@stableflow/wallet-tron 3.0.2 → 3.0.3-rc-fca5606ac4-20260703
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +5 -5
package/dist/index.js
CHANGED
|
@@ -517,7 +517,7 @@ var TronWallet = class {
|
|
|
517
517
|
execTime.log("quoteOFT");
|
|
518
518
|
const [, , oftReceipt] = oftData;
|
|
519
519
|
sendParam[3] = Big__default.default(amountWei).times(Big__default.default(1).minus(Big__default.default(slippageTolerance || 0).div(100))).toFixed(0);
|
|
520
|
-
result.outputAmount = core.numberRemoveEndZero(
|
|
520
|
+
result.outputAmount = core.numberRemoveEndZero(Big__default.default(oftReceipt[1].toString()).div(10 ** params.toToken.decimals).toFixed(params.toToken.decimals, 0));
|
|
521
521
|
}
|
|
522
522
|
this.csl("TronWallet quoteOFT", "red-600", "result.outputAmount: %o", result.outputAmount);
|
|
523
523
|
this.csl("TronWallet quoteOFT", "red-600", "slippageTolerance: %o", slippageTolerance + "%");
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tron.ts"],"names":["DefaultAddresses","TronWeb","getChainRpcUrl","Csl","OpenAPI","Big","numberRemoveEndZero","getPrice","DATA_HEX_PROTOBUF_EXTRA","SIGNATURE_SIZE","ExecTime","getDestinationAssociatedTokenAddress","LZ_RECEIVE_VALUE","addressToBytes32","USDT0_LEGACY_MESH_TRANSFTER_FEE","getHopMsgFee","ethers","NATIVE_MSG_FEE_BUFFER","Service","SendType"],"mappings":";;;;;;;;;;;;;;;;;AA0BA,IAAM,wBAAA,GAA2BA,sBAAiB,MAAM,CAAA;AACxD,IAAM,mBAAmB,MAAM;AAC7B,EAAA,OAAO,IAAIC,eAAA,CAAQ;AAAA,IACjB,QAAA,EAAUC,mBAAA,CAAe,MAAM,CAAA,CAAE,MAAA;AAAA,IACjC,SAAS,EAAC;AAAA,IACV,UAAA,EAAY;AAAA,GACb,CAAA;AACH,CAAA;AAEA,IAAqB,aAArB,MAAgC;AAAA,EAM9B,YAAY,OAAA,EAAc;AACxB,IAAA,IAAA,CAAK,yBAAyB,OAAA,CAAQ,sBAAA;AACtC,IAAA,IAAA,CAAK,UAAU,OAAA,CAAQ,OAAA;AAEvB,IAAA,MAAM,gBAAgB,gBAAA,EAAiB;AACvC,IAAA,aAAA,CAAc,UAAA,CAAW,IAAA,CAAK,OAAA,IAAW,wBAAwB,CAAA;AACjE,IAAA,IAAA,CAAK,OAAA,GAAU,aAAA;AAEf,IAAA,MAAM,EAAA,GAAK,IAAIC,QAAA,CAAIC,YAAA,CAAQ,KAAK,CAAA;AAChC,IAAA,IAAA,CAAK,MAAM,EAAA,CAAG,GAAA;AAAA,EAChB;AAAA,EAEA,MAAM,cAAA,GAAiB;AACrB,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAY;AAC9B,MAAA,IAAI,KAAK,OAAA,EAAS;AAChB,QAAA,MAAM,OAAA,GAAU,IAAA,CAAK,OAAA,CAAQ,cAAA,CAAe,MAAA,IAAU,wBAAA;AACtD,QAAA,MAAM,gBAAgB,gBAAA,EAAiB;AACvC,QAAA,aAAA,CAAc,WAAW,OAAO,CAAA;AAChC,QAAA,IAAA,CAAK,OAAA,GAAU,aAAA;AACf,QAAA,OAAA,CAAQ,KAAK,OAAO,CAAA;AACpB,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,eAAe,MAAM;AACzB,QAAA,IAAK,OAAe,OAAA,EAAS;AAC3B,UAAA,IAAA,CAAK,UAAW,MAAA,CAAe,OAAA;AAC/B,UAAA,MAAM,OAAA,GAAU,IAAA,CAAK,OAAA,CAAQ,cAAA,CAAe,MAAA,IAAU,wBAAA;AACtD,UAAA,MAAM,gBAAgB,gBAAA,EAAiB;AACvC,UAAA,aAAA,CAAc,WAAW,OAAO,CAAA;AAChC,UAAA,IAAA,CAAK,OAAA,GAAU,aAAA;AACf,UAAA,OAAA,CAAQ,KAAK,OAAO,CAAA;AAAA,QACtB,CAAA,MAAO;AACL,UAAA,UAAA,CAAW,cAAc,GAAG,CAAA;AAAA,QAC9B;AAAA,MACF,CAAA;AAEA,MAAA,YAAA,EAAa;AAEb,MAAA,UAAA,CAAW,MAAM;AACf,QAAA,MAAM,gBAAgB,gBAAA,EAAiB;AACvC,QAAA,aAAA,CAAc,WAAW,wBAAwB,CAAA;AACjD,QAAA,IAAA,CAAK,OAAA,GAAU,aAAA;AACf,QAAA,OAAA,CAAQ,KAAK,OAAO,CAAA;AACpB,QAAA,IAAA,CAAK,GAAA,CAAI,2BAAA,EAA6B,SAAA,EAAW,gCAAgC,CAAA;AAAA,MACnF,GAAG,GAAK,CAAA;AAAA,IACV,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,SAAS,IAAA,EAIZ;AACD,IAAA,MAAM,EAAE,WAAA,EAAa,cAAA,EAAgB,MAAA,EAAO,GAAI,IAAA;AAEhD,IAAA,MAAM,KAAK,cAAA,EAAe;AAE1B,IAAA,IAAI,WAAA,KAAgB,KAAA,IAAS,WAAA,KAAgB,KAAA,EAAO;AAClD,MAAA,OAAO,MAAM,IAAA,CAAK,WAAA,CAAY,cAAA,EAAgB,MAAM,CAAA;AAAA,IACtD;AAGA,IAAA,OAAO,MAAM,IAAA,CAAK,aAAA,CAAc,WAAA,EAAa,gBAAgB,MAAM,CAAA;AAAA,EACrE;AAAA,EAEA,MAAM,WAAA,CAAY,EAAA,EAAY,MAAA,EAAgB;AAC5C,IAAA,MAAM,KAAK,cAAA,EAAe;AAE1B,IAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,OAAA,CAAQ,kBAAA,CAAmB,OAAA;AAAA,MACxD,EAAA;AAAA,MACA,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,MAAM;AAAA,KAC3B;AAEA,IAAA,OAAO,KAAK,eAAA,CAAgB,EAAE,IAAI,EAAE,WAAA,IAAe,CAAA;AAAA,EACrD;AAAA,EAEA,MAAM,aAAA,CAAc,eAAA,EAAyB,EAAA,EAAY,MAAA,EAAgB;AACvE,IAAA,MAAM,KAAK,cAAA,EAAe;AAE1B,IAAA,MAAM,gBAAA,GAAmB,2BAAA;AACzB,IAAA,MAAM,SAAA,GAAY,CAAC,EAAE,IAAA,EAAM,SAAA,EAAW,KAAA,EAAO,EAAA,EAAG,EAAG,EAAE,IAAA,EAAM,SAAA,EAAW,KAAA,EAAO,QAAQ,CAAA;AACrF,IAAA,MAAM,EAAA,GAAK,MAAM,IAAA,CAAK,OAAA,CAAQ,kBAAA,CAAmB,qBAAqB,eAAA,EAAiB,gBAAA,EAAkB,EAAC,EAAG,SAAS,CAAA;AAEtH,IAAA,OAAO,IAAA,CAAK,eAAA,CAAgB,EAAE,EAAA,EAAI,CAAA;AAAA,EAWpC;AAAA,EAEA,MAAM,UAAA,CAAW,KAAA,EAAY,OAAA,EAAiB,OAAA,EAAuC;AACnF,IAAA,MAAM,KAAK,cAAA,EAAe;AAE1B,IAAA,IAAI,KAAA,CAAM,WAAW,KAAA,IAAS,KAAA,CAAM,WAAW,KAAA,IAAS,KAAA,CAAM,WAAW,QAAA,EAAU;AACjF,MAAA,OAAO,MAAM,IAAA,CAAK,aAAA,CAAc,OAAA,EAAS,OAAO,CAAA;AAAA,IAClD;AAEA,IAAA,OAAO,MAAM,IAAA,CAAK,eAAA,CAAgB,KAAA,CAAM,eAAA,EAAiB,SAAS,OAAO,CAAA;AAAA,EAC3E;AAAA,EAEA,MAAM,aAAA,CAAc,OAAA,EAAiB,OAAA,EAAuC;AAC1E,IAAA,MAAM,EAAE,YAAA,GAAe,KAAA,EAAM,GAAI,WAAW,EAAC;AAE7C,IAAA,MAAM,KAAK,cAAA,EAAe;AAE1B,IAAA,IAAI;AACF,MAAA,MAAM,UAAU,MAAM,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,WAAW,OAAO,CAAA;AACzD,MAAA,OAAO,QAAQ,QAAA,EAAS;AAAA,IAC1B,SAAS,KAAA,EAAO;AACd,MAAA,IAAA,CAAK,GAAA,CAAI,oBAAA,EAAsB,SAAA,EAAW,4BAAA,EAA8B,KAAK,CAAA;AAC7E,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,MAAM,KAAA;AAAA,MACR;AACA,MAAA,OAAO,GAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,eAAA,CAAgB,eAAA,EAAyB,OAAA,EAAiB,OAAA,EAAuC;AACrG,IAAA,MAAM,EAAE,YAAA,GAAe,KAAA,EAAM,GAAI,WAAW,EAAC;AAE7C,IAAA,MAAM,KAAK,cAAA,EAAe;AAE1B,IAAA,IAAI;AACF,MAAA,MAAM,WAAW,MAAM,IAAA,CAAK,QAAQ,QAAA,EAAS,CAAE,GAAG,eAAe,CAAA;AACjE,MAAA,MAAM,UAAU,MAAM,QAAA,CAAS,SAAA,CAAU,OAAO,EAAE,IAAA,EAAK;AAGvD,MAAA,OAAO,QAAQ,QAAA,EAAS;AAAA,IAC1B,SAAS,KAAA,EAAO;AACd,MAAA,IAAA,CAAK,GAAA,CAAI,sBAAA,EAAwB,SAAA,EAAW,8BAAA,EAAgC,KAAK,CAAA;AACjF,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,MAAM,KAAA;AAAA,MACR;AACA,MAAA,OAAO,GAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,SAAA,CAAU,KAAA,EAAY,OAAA,EAAiB,OAAA,EAAuC;AAClF,IAAA,OAAO,MAAM,IAAA,CAAK,UAAA,CAAW,KAAA,EAAO,SAAS,OAAO,CAAA;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,oBAAoB,IAAA,EAQvB;AACD,IAAA,MAAM,EAAE,WAAU,GAAI,IAAA;AACtB,IAAA,MAAM,cAAc,SAAA,CAAU,eAAA;AAK9B,IAAA,IAAI,QAAA;AAEJ,IAAA,IAAI,WAAA,KAAgB,KAAA,IAAS,WAAA,KAAgB,KAAA,EAAO;AAElD,MAAA,QAAA,GAAW,IAAA;AAAA,IACb,CAAA,MAAO;AAEL,MAAA,QAAA,GAAW,MAAA;AAAA,IACb;AAGA,IAAA,QAAA,GAAY,WAAW,IAAA,GAAQ,IAAA;AAK/B,IAAA,IAAI,QAAA,GAAmB,IAAA;AAWvB,IAAA,MAAM,cAAc,QAAA,GAAW,QAAA;AAE/B,IAAA,OAAO;AAAA,MACL,QAAA;AAAA,MACA,QAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA,EAEA,MAAM,eAAe,MAAA,EAAa;AAChC,IAAA,MAAM,EAAE,QAAA,EAAU,KAAA,EAAO,WAAA,EAAY,GAAI,MAAA;AAEzC,IAAA,MAAM,WAAA,GAAc,OAAO,GAAG,CAAA;AAC9B,IAAA,MAAM,WAAA,GAAcC,qBAAI,QAAA,CAAS,QAAA,EAAU,CAAA,CAAE,KAAA,CAAM,WAAA,CAAY,QAAA,EAAU,CAAA;AACzE,IAAA,MAAM,oBAAoBA,oBAAA,CAAI,WAAW,EAAE,GAAA,CAAI,EAAA,IAAM,YAAY,QAAQ,CAAA;AACzE,IAAA,MAAM,iBAAiBA,oBAAA,CAAI,iBAAiB,CAAA,CAAE,KAAA,CAAM,SAAS,CAAC,CAAA;AAE9D,IAAA,OAAO;AAAA,MACL,QAAA,EAAU,WAAA;AAAA,MACV,KAAKC,wBAAA,CAAoBD,oBAAA,CAAI,cAAc,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAC,CAAA;AAAA,MACxD,GAAA,EAAK,MAAA,CAAO,WAAA,CAAY,OAAA,CAAQ,CAAC,CAAC,CAAA;AAAA,MAClC,MAAA,EAAQC,yBAAoBD,oBAAA,CAAI,iBAAiB,EAAE,OAAA,CAAQ,WAAA,CAAY,QAAQ,CAAC;AAAA,KAClF;AAAA,EACF;AAAA,EAEA,MAAM,oBAAoB,MAAA,EAAa;AACrC,IAAA,MAAM;AAAA,MACJ,GAAA;AAAA,MACA,iBAAA;AAAA,MACA,SAAA;AAAA,MACA,MAAA;AAAA,MACA,iBAAA;AAAA,MACA,uBAAA;AAAA,MACA;AAAA,KACF,GAAI,MAAA;AAEJ,IAAA,MAAM,gBAAA,GAAmBE,aAAA,CAAS,MAAA,EAAQ,SAAA,CAAU,YAAY,MAAM,CAAA;AAEtE,IAAA,IAAI,aAAa,iBAAA,IAAqB,GAAA;AACtC,IAAA,IAAI,mBAAmB,uBAAA,IAA2B,GAAA;AAClD,IAAA,IAAI;AACF,MAAA,MAAM,cAAc,MAAM,IAAA,CAAK,QAAQ,kBAAA,CAAmB,uBAAA,CAAwB,GAAG,iBAAiB,CAAA;AACtG,MAAA,UAAA,GAAa,YAAY,WAAA,IAAe,GAAA;AACxC,MAAA,gBAAA,GAAmB,WAAA,CAAY,WAAA,CAAY,YAAA,CAAa,MAAA,IAAU,GAAA;AAAA,IACpE,SAAS,KAAA,EAAO;AACd,MAAA,IAAA,CAAK,IAAI,YAAA,EAAc,SAAA,EAAW,qEAAqE,KAAA,EAAO,iBAAA,GAAoB,CAAC,CAAC,CAAA;AAAA,IACtI;AACA,IAAA,MAAM,kBAAkBF,oBAAA,CAAIA,oBAAA,CAAI,gBAAgB,CAAA,CAAE,IAAI,CAAC,CAAA,CAAE,IAAA,CAAKG,+BAAuB,EAAE,IAAA,CAAKC,sBAAc,CAAC,CAAA,CAAE,MAAM,IAAI,CAAA;AACvH,IAAA,MAAM,aAAA,GAAgBJ,oBAAA,CAAI,eAAe,CAAA,CAAE,GAAA,CAAI,GAAG,CAAA,CAAE,KAAA,CAAM,EAAA,IAAM,SAAA,CAAU,WAAA,CAAY,QAAQ,CAAA;AAC9F,IAAA,IAAI,SAAA,GAAYA,oBAAA,CAAI,UAAU,CAAA,CAAE,KAAK,aAAa,CAAA;AAElD,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,SAAA,GAAYA,oBAAA,CAAI,SAAS,CAAA,CAAE,KAAA,CAAMA,qBAAI,CAAC,CAAA,CAAE,IAAA,CAAK,MAAM,CAAC,CAAA;AAAA,IACtD;AAEA,IAAA,MAAM,EAAE,GAAA,EAAK,GAAA,EAAI,GAAI,MAAM,KAAK,cAAA,CAAe;AAAA,MAC7C,QAAA,EAAU,SAAA,CAAU,OAAA,CAAQ,CAAC,CAAA;AAAA,MAC7B,KAAA,EAAO,gBAAA;AAAA,MACP,aAAa,SAAA,CAAU;AAAA,KACxB,CAAA;AAED,IAAA,MAAM,MAAA,GAAS;AAAA,MACb,sBAAA,EAAwB,UAAA;AAAA,MACxB,iBAAA,EAAmB,GAAA;AAAA,MACnB,oBAAA,EAAsB;AAAA,KACxB;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAM,gBAAgB,MAAA,EAAa;AACjC,IAAA,MAAM;AAAA,MACJ,GAAA;AAAA,MACA,OAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACF,GAAI,MAAA;AAEJ,IAAA,MAAM,aAAA,GAAgB;AAAA,MACpB,SAAA,CAAU,eAAA;AAAA,MACV,0BAAA;AAAA,MACA,EAAC;AAAA,MACD;AAAA,QACE,EAAE,IAAA,EAAM,SAAA,EAAW,KAAA,EAAO,OAAA,EAAQ;AAAA,QAClC,EAAE,IAAA,EAAM,SAAA,EAAW,KAAA,EAAO,SAAA;AAAU;AACtC,KACF;AACA,IAAA,OAAO,KAAK,mBAAA,CAAoB;AAAA,MAC9B,GAAA;AAAA,MACA,iBAAA,EAAmB,aAAA;AAAA,MACnB,SAAA;AAAA,MACA,MAAA;AAAA,MACA,iBAAA,EAAmB,GAAA;AAAA,MACnB,uBAAA,EAAyB,GAAA;AAAA;AAAA,MAEzB,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,wBAAA,CAAyB,MAAA,EAAgB,OAAA,EAI5C;AACD,IAAA,MAAM,KAAK,cAAA,EAAe;AAE1B,IAAA,MAAM,EAAE,WAAW,EAAA,EAAI,YAAA,GAAe,KAAM,KAAA,EAAM,GAAI,WAAW,EAAC;AAClE,IAAA,IAAI,SAAA,GAAY,CAAA;AAEhB,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAY;AAC9B,MAAA,MAAM,OAAO,YAAY;AACvB,QAAA,SAAA,EAAA;AACA,QAAA,IAAA,CAAK,GAAA,CAAI,qCAAA,EAAuC,UAAA,EAAY,2CAAA,EAA6C,QAAQ,SAAS,CAAA;AAE1H,QAAA,IAAI;AACF,UAAA,MAAM,SAAS,MAAM,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,mBAAmB,MAAM,CAAA;AAC/D,UAAA,IAAA,CAAK,GAAA,CAAI,qCAAA,EAAuC,UAAA,EAAY,2BAAA,EAA6B,QAAQ,MAAM,CAAA;AAGvG,UAAA,IAAI,MAAA,IAAU,OAAO,OAAA,EAAS;AAC5B,YAAA,IAAI,KAAA,EAAO;AACT,cAAA,OAAA,CAAQ,IAAI,CAAA;AACZ,cAAA;AAAA,YACF;AAEA,YAAA,MAAM,MAAA,GAAS,OAAO,OAAA,CAAQ,MAAA;AAE9B,YAAA,IAAI,WAAW,SAAA,EAAW;AACxB,cAAA,IAAA,CAAK,GAAA,CAAI,qCAAA,EAAuC,UAAA,EAAY,0BAAA,EAA4B,MAAM,CAAA;AAC9F,cAAA,OAAA,CAAQ,IAAI,CAAA;AACZ,cAAA;AAAA,YACF,CAAA,MAAA,IAAW,MAAA,KAAW,QAAA,IAAY,MAAA,KAAW,QAAA,EAAU;AACrD,cAAA,IAAA,CAAK,GAAA,CAAI,qCAAA,EAAuC,SAAA,EAAW,qCAAA,EAAuC,QAAQ,MAAM,CAAA;AAChH,cAAA,OAAA,CAAQ,KAAK,CAAA;AACb,cAAA;AAAA,YACF,CAAA,MAAO;AAEL,cAAA,IAAA,CAAK,GAAA,CAAI,qCAAA,EAAuC,UAAA,EAAY,kEAAA,EAAoE,QAAQ,MAAM,CAAA;AAAA,YAChJ;AAAA,UACF,CAAA,MAAO;AAEL,YAAA,IAAA,CAAK,GAAA,CAAI,qCAAA,EAAuC,UAAA,EAAY,qDAAA,EAAuD,MAAM,CAAA;AAAA,UAC3H;AAAA,QACF,SAAS,KAAA,EAAY;AAGnB,UAAA,MAAM,YAAA,GAAe,KAAA,EAAO,OAAA,IAAW,MAAA,CAAO,KAAK,CAAA;AACnD,UAAA,IACE,YAAA,CAAa,QAAA,CAAS,WAAW,CAAA,IACjC,YAAA,CAAa,QAAA,CAAS,gBAAgB,CAAA,IACtC,YAAA,CAAa,QAAA,CAAS,WAAW,CAAA,EACjC;AACA,YAAA,IAAA,CAAK,GAAA,CAAI,qCAAA,EAAuC,UAAA,EAAY,oDAAA,EAAsD,MAAM,CAAA;AAAA,UAC1H,CAAA,MAAO;AAEL,YAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,gCAAA,EAAmC,MAAM,CAAA,KAAA,CAAA,EAAS,YAAY,CAAA;AAAA,UAC7E;AAAA,QACF;AAGA,QAAA,IAAI,aAAa,QAAA,EAAU;AACzB,UAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,iBAAA,EAAoB,MAAM,CAAA,kCAAA,EAAqC,QAAQ,CAAA,CAAE,CAAA;AACvF,UAAA,OAAA,CAAQ,KAAK,CAAA;AACb,UAAA;AAAA,QACF;AAGA,QAAA,UAAA,CAAW,MAAM,YAAY,CAAA;AAAA,MAC/B,CAAA;AAGA,MAAA,IAAA,EAAK;AAAA,IACP,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,uBAAuB,MAAA,EAAgB;AAC3C,IAAA,MAAM,KAAK,cAAA,EAAe;AAE1B,IAAA,IAAI;AACF,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,mBAAmB,MAAM,CAAA;AAE/D,MAAA,IAAI,MAAA,IAAU,OAAO,OAAA,EAAS;AAC5B,QAAA,OAAO,MAAA,CAAO,QAAQ,MAAA,KAAW,SAAA;AAAA,MACnC;AAEA,MAAA,OAAO,KAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,qBAAqB,MAAA,EAAgB;AACzC,IAAA,MAAM,KAAK,cAAA,EAAe;AAE1B,IAAA,IAAI;AACF,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,mBAAmB,MAAM,CAAA;AAC/D,MAAA,OAAO,MAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,EAAC;AAAA,IACV;AAAA,EACF;AAAA,EAEA,MAAM,UAAU,MAAA,EAAa;AAC3B,IAAA,MAAM;AAAA,MACJ,GAAA;AAAA,MACA,eAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,SAAA;AAAA,MACA,MAAA,GAAS;AAAA,KACX,GAAI,MAAA;AAGJ,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,QAAQ,QAAA,EAAS,CAAE,GAAG,eAAe,CAAA;AAEjE,IAAA,IAAI,GAAA,EAAK;AACP,MAAA,OAAO;AAAA,QACL,QAAA;AAAA,QACA,SAAA,EAAW,GAAA;AAAA,QACX,WAAA,EAAa;AAAA,OACf;AAAA,IACF;AAEA,IAAA,MAAM,KAAK,cAAA,EAAe;AAE1B,IAAA,IAAI;AAEF,MAAA,IAAI,SAAA,GAAY,GAAA;AAChB,MAAA,IAAI;AACF,QAAA,MAAM,kBAAkB,MAAM,QAAA,CAAS,UAAU,OAAA,EAAS,OAAO,EAAE,IAAA,EAAK;AACxE,QAAA,SAAA,GAAY,gBAAgB,QAAA,EAAS;AAAA,MACvC,SAAS,KAAA,EAAO;AACd,QAAA,IAAA,CAAK,GAAA,CAAI,sBAAA,EAAwB,SAAA,EAAW,6BAAA,EAA+B,KAAK,CAAA;AAChF,QAAA,IAAI,MAAA,EAAQ;AACV,UAAA,MAAM,KAAA;AAAA,QACR;AAAA,MACF;AAEA,MAAA,OAAO;AAAA,QACL,QAAA;AAAA,QACA,SAAA;AAAA,QACA,aAAaA,oBAAA,CAAI,SAAA,IAAa,CAAC,CAAA,CAAE,EAAA,CAAG,aAAa,CAAC;AAAA,OACpD;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,IAAA,CAAK,GAAA,CAAI,sBAAA,EAAwB,SAAA,EAAW,wBAAA,EAA0B,KAAK,CAAA;AAC3E,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAM,KAAA;AAAA,MACR;AAEA,MAAA,OAAO;AAAA,QACL,QAAA,EAAU,IAAA;AAAA,QACV,SAAA,EAAW,GAAA;AAAA,QACX,WAAA,EAAa;AAAA,OACf;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,QAAQ,MAAA,EAAa;AACzB,IAAA,MAAM;AAAA,MACJ,eAAA;AAAA,MACA,OAAA;AAAA,MACA,SAAA;AAAA,MACA,YAAA,GAAe,KAAA;AAAA,MACf,SAAA,GAAY,KAAA;AAAA,MACZ,eAAA,GAAkB;AAAA,KACpB,GAAI,MAAA;AAEJ,IAAA,MAAM,KAAK,cAAA,EAAe;AAE1B,IAAA,MAAM,YAAA,GAAoB;AAAA,MACxB,OAAA,EAAS,KAAA;AAAA,MACT,MAAM,EAAC;AAAA,MACP,OAAA,EAAS;AAAA,KACX;AAEA,IAAA,IAAI;AAEF,MAAA,IAAI,UAAA,GAAa,SAAA;AACjB,MAAA,IAAI,YAAA,EAAc;AAEhB,QAAA,UAAA,GAAa,gFAAA;AAAA,MACf;AAGA,MAAA,MAAM,gBAAA,GAAmB,0BAAA;AACzB,MAAA,MAAM,SAAA,GAAY;AAAA,QAChB,EAAE,IAAA,EAAM,SAAA,EAAW,KAAA,EAAO,OAAA,EAAQ;AAAA,QAClC,EAAE,IAAA,EAAM,SAAA,EAAW,KAAA,EAAO,UAAA;AAAW,OACvC;AACA,MAAA,MAAM,EAAA,GAAK,MAAM,IAAA,CAAK,OAAA,CAAQ,kBAAA,CAAmB,oBAAA;AAAA,QAC/C,eAAA;AAAA,QACA,gBAAA;AAAA,QACA,EAAC;AAAA,QACD;AAAA,OACF;AAGA,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,eAAA,CAAgB,EAAE,IAAI,CAAA;AAChD,MAAA,IAAI,MAAA,GAAyC,IAAA;AAE7C,MAAA,IAAI,eAAA,EAAiB;AACnB,QAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,CAAK,wBAAA,CAAyB,MAAA,EAAQ;AAAA,UAChE,QAAA,EAAU,GAAA;AAAA,UACV,YAAA,EAAc;AAAA,SACf,CAAA;AACD,QAAA,IAAI,CAAC,aAAA,EAAe;AAClB,UAAA,IAAA,CAAK,GAAA,CAAI,oBAAA,EAAsB,SAAA,EAAW,2CAA2C,CAAA;AACrF,UAAA,IAAI,SAAA,EAAW;AACb,YAAA,YAAA,CAAa,OAAA,GAAU,8BAAA;AACvB,YAAA,OAAO,YAAA;AAAA,UACT;AACA,UAAA,OAAO,KAAA;AAAA,QACT;AACA,QAAA,MAAA,GAAS,MAAM,IAAA,CAAK,oBAAA,CAAqB,MAAM,CAAA;AAAA,MACjD;AAEA,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,MAAM,YAAY,MAAA,EAAQ,OAAA;AAC1B,QAAA,YAAA,CAAa,OAAA,GAAU,IAAA;AACvB,QAAA,YAAA,CAAa,IAAA,GAAO;AAAA,UAClB,MAAA;AAAA,UACA,MAAA;AAAA,UACA,eAAe,SAAA,EAAW,MAAA;AAAA,UAC1B,aAAa,MAAA,EAAQ,WAAA;AAAA,UACrB,gBAAgB,MAAA,EAAQ;AAAA,SAC1B;AACA,QAAA,OAAO,YAAA;AAAA,MACT;AAEA,MAAA,OAAO,MAAA;AAAA,IACT,SAAS,KAAA,EAAY;AACnB,MAAA,IAAA,CAAK,GAAA,CAAI,oBAAA,EAAsB,SAAA,EAAW,mBAAA,EAAqB,KAAK,CAAA;AACpE,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,YAAA,CAAa,UAAU,KAAA,CAAM,OAAA;AAC7B,QAAA,OAAO,YAAA;AAAA,MACT;AACA,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,UAAU,IAAA,EAAsB;AAC9B,IAAA,MAAM,GAAA,GAAM,KAAK,OAAA,CAAQ,OAAA,CAAQ,MAAM,IAAI,CAAA,CAAE,MAAM,CAAC,CAAA;AACpD,IAAA,OAAO,IAAA,GAAO,GAAA,CAAI,QAAA,CAAS,EAAA,EAAI,GAAG,CAAA;AAAA,EACpC;AAAA,EAEA,MAAM,SAAS,MAAA,EAAa;AAC1B,IAAA,MAAM;AAAA,MACJ,GAAA;AAAA,MACA,GAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,iBAAA;AAAA,MACA,YAAA;AAAA,MACA,SAAA;AAAA,MACA,OAAA;AAAA,MACA,MAAA;AAAA,MACA,sBAAA;AAAA,MACA,2BAAA;AAAA,MACA,WAAA;AAAA,MACA,QAAA;AAAA,MACA,gBAAA;AAAA,MACA,kBAAA;AAAA,MACA,cAAA;AAAA,MACA,mBAAA;AAAA,MACA,eAAA;AAAA,MACA;AAAA,KACF,GAAI,MAAA;AAEJ,IAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,MAAM,OAAO,gCAAgC,CAAA;AAEjE,IAAA,MAAM,MAAA,GAAc;AAAA,MAClB,WAAA,EAAa,KAAA;AAAA,MACb,cAAA,EAAgB,sBAAA;AAAA,MAChB,SAAA,EAAW,MAAA;AAAA,MACX,UAAA,EAAY;AAAA,QACV,GAAG,MAAA;AAAA,QACH,sBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,MAAM,EAAC;AAAA,MACP,YAAA,EAAc,MAAA;AAAA,MACd,iBAAA,EAAmB,MAAA;AAAA,MACnB,sBAAA,EAAwB,EAAA;AAAA,MACxB,oBAAA,EAAsB,MAAA;AAAA,MACtB,YAAA,EAAc,CAAA;AAAA;AAAA,MACd,cAAcC,wBAAA,CAAoBD,oBAAA,CAAI,SAAA,IAAa,CAAC,EAAE,GAAA,CAAI,EAAA,IAAM,MAAA,CAAO,SAAA,CAAU,QAAQ,CAAA,CAAE,OAAA,CAAQ,OAAO,SAAA,CAAU,QAAA,EAAU,CAAC,CAAC;AAAA,KAClI;AAEA,IAAA,MAAM,QAAA,GAAW,IAAIK,aAAA,CAAS,EAAE,IAAA,EAAM,YAAA,EAAc,QAAA,EAAU,YAAA,EAAc,OAAA,EAASN,YAAA,CAAQ,KAAA,EAAO,CAAA;AACpG,IAAA,MAAM,KAAK,cAAA,EAAe;AAC1B,IAAA,QAAA,CAAS,IAAI,gBAAgB,CAAA;AAE7B,IAAA,QAAA,CAAS,UAAA,EAAW;AACpB,IAAA,MAAM,cAAc,MAAM,IAAA,CAAK,OAAA,CAAQ,QAAA,CAAS,KAAK,sBAAsB,CAAA;AAC3E,IAAA,QAAA,CAAS,IAAI,yCAAyC,CAAA;AAEtD,IAAA,QAAA,CAAS,UAAA,EAAW;AACpB,IAAA,MAAM,WAAA,GAAc,QAAA,IAAY,IAAA,CAAK,OAAA,CAAQ,cAAA,CAAe,MAAA;AAC5D,IAAA,MAAM,gBAAA,GAAmB,cAAA,GAAiB,eAAA,CAAgB,yBAAA,GAA4B,eAAA,CAAgB,mBAAA;AACtG,IAAA,QAAA,CAAS,IAAI,kBAAkB,CAAA;AAE/B,IAAA,MAAM,kBAAA,GAAqB,mBAAA,GAAsB,oBAAA,CAAqB,wBAAA,GAA2B,oBAAA,CAAqB,kBAAA;AACtH,IAAA,IAAI,oBAAA,GAAuB,CAAA;AAE3B,IAAA,QAAA,CAAS,UAAA,EAAW;AACpB,IAAA,MAAM,OAAA,GAAU,MAAMO,gDAAA,CAAqC;AAAA,MACzD,SAAA;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,QAAA,CAAS,IAAI,sCAAsC,CAAA;AACnD,IAAA,IAAI,QAAQ,sBAAA,EAAwB;AAClC,MAAA,oBAAA,GAAuBC,wBAAA,CAAiB,OAAA,CAAQ,SAAS,CAAA,IAAK,CAAA;AAAA,IAChE;AAEA,IAAA,IAAI,sBAAA,GAAyB,OAAA,CAAQ,UAAA,EAAW,CAAE,KAAA,EAAM;AACxD,IAAA,IAAI,CAAC,sBAAsB,oBAAA,EAAsB;AAC/C,MAAA,sBAAA,GAAyB,QAAQ,UAAA,EAAW,CAAE,2BAA2B,kBAAA,EAAoB,oBAAoB,EAAE,KAAA,EAAM;AAAA,IAC3H;AAGA,IAAA,MAAM,SAAA,GAAiB;AAAA;AAAA,MAErB,MAAA;AAAA;AAAA;AAAA,MAGAC,wBAAA,CAAiB,OAAA,CAAQ,SAAA,EAAW,SAAS,CAAA;AAAA;AAAA,MAE7C,SAAA;AAAA;AAAA,MAEA,GAAA;AAAA;AAAA,MAEA,sBAAA;AAAA;AAAA,MAEA,IAAA;AAAA;AAAA,MAEA;AAAA,KACF;AAEA,IAAA,IAAI,kBAAA,EAAoB;AAEtB,MAAA,SAAA,CAAU,CAAC,IAAI,gBAAA,CAAiB,GAAA;AAChC,MAAA,SAAA,CAAU,CAAC,CAAA,GAAIA,wBAAA,CAAiB,KAAA,EAAO,iBAAiB,mBAAmB,CAAA;AAAA,IAC7E;AAGA,IAAA,IAAI,kBAAkB,mBAAA,EAAqB;AACzC,MAAA,MAAA,CAAO,KAAK,gBAAA,GAAmBP,wBAAA,CAAoBD,qBAAI,SAAA,IAAa,CAAC,EAAE,GAAA,CAAI,EAAA,IAAM,SAAA,CAAU,QAAQ,EAAE,KAAA,CAAMS,uCAA+B,EAAE,OAAA,CAAQ,SAAA,CAAU,QAAQ,CAAC,CAAA;AACvK,MAAA,MAAA,CAAO,YAAA,GAAeR,wBAAA,CAAoBD,oBAAA,CAAIA,oBAAA,CAAI,SAAA,IAAa,CAAC,CAAA,CAAE,GAAA,CAAI,EAAA,IAAM,MAAA,CAAO,SAAA,CAAU,QAAQ,CAAC,CAAA,CAAE,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,gBAAA,IAAoB,CAAC,CAAA,CAAE,OAAA,CAAQ,MAAA,CAAO,SAAA,CAAU,QAAA,EAAU,CAAC,CAAC,CAAA;AAAA,IACxL;AAEA,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA,QAAA,CAAS,UAAA,EAAW;AACpB,MAAA,MAAM,UAAU,MAAM,WAAA,CAAY,QAAA,CAAS,SAAS,EAAE,IAAA,EAAK;AAC3D,MAAA,QAAA,CAAS,IAAI,UAAU,CAAA;AACvB,MAAA,MAAM,KAAK,UAAU,CAAA,GAAI,OAAA;AAEzB,MAAA,SAAA,CAAU,CAAC,IAAIA,oBAAA,CAAI,SAAS,EAAE,KAAA,CAAMA,oBAAA,CAAI,CAAC,CAAA,CAAE,KAAA,CAAMA,qBAAI,iBAAA,IAAqB,CAAC,EAAE,GAAA,CAAI,GAAG,CAAC,CAAC,CAAA,CAAE,QAAQ,CAAC,CAAA;AAEjG,MAAA,MAAA,CAAO,YAAA,GAAeC,yBAAoBA,wBAAA,CAAoBD,oBAAA,CAAI,WAAW,CAAC,CAAA,CAAE,QAAA,EAAU,CAAA,CAAE,GAAA,CAAI,MAAM,MAAA,CAAO,OAAA,CAAQ,QAAQ,CAAA,CAAE,OAAA,CAAQ,OAAO,OAAA,CAAQ,QAAA,EAAU,CAAC,CAAC,CAAC,CAAA;AAAA,IACrK;AAIA,IAAA,IAAA,CAAK,GAAA,CAAI,qBAAA,EAAuB,SAAA,EAAW,yBAAA,EAA2B,OAAO,YAAY,CAAA;AACzF,IAAA,IAAA,CAAK,GAAA,CAAI,qBAAA,EAAuB,SAAA,EAAW,uBAAA,EAAyB,oBAAoB,GAAG,CAAA;AAC3F,IAAA,IAAA,CAAK,GAAA,CAAI,qBAAA,EAAuB,SAAA,EAAW,6BAAA,EAA+BA,oBAAA,CAAI,SAAS,CAAA,CAAE,GAAA,CAAI,EAAA,IAAM,SAAA,CAAU,QAAQ,CAAA,CAAE,KAAA,CAAMA,oBAAA,CAAI,CAAC,CAAA,CAAE,KAAA,CAAMA,oBAAA,CAAI,iBAAA,IAAqB,CAAC,CAAA,CAAE,GAAA,CAAI,GAAG,CAAC,CAAC,CAAA,CAAE,OAAA,CAAQ,CAAA,EAAG,CAAC,CAAC,CAAA;AAC9L,IAAA,IAAIA,oBAAA,CAAI,MAAA,CAAO,YAAY,CAAA,CAAE,EAAA,CAAGA,oBAAA,CAAI,SAAS,CAAA,CAAE,GAAA,CAAI,EAAA,IAAM,SAAA,CAAU,QAAQ,CAAA,CAAE,KAAA,CAAMA,oBAAA,CAAI,CAAC,CAAA,CAAE,KAAA,CAAMA,oBAAA,CAAI,iBAAA,IAAqB,CAAC,CAAA,CAAE,GAAA,CAAI,GAAG,CAAC,CAAC,CAAC,CAAA,EAAG;AACvI,MAAA,MAAA,CAAO,MAAA,GAAS,yBAAA;AAChB,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,IAAI,kBAAA,EAAoB;AACtB,MAAA,IAAI,oBAAA,GAAuB,OAAA,CAAQ,UAAA,EAAW,CAAE,KAAA,EAAM;AACtD,MAAA,IAAI,oBAAA,EAAsB;AACxB,QAAA,oBAAA,GAAuB,QAAQ,UAAA,EAAW,CAAE,2BAA2B,kBAAA,EAAoB,oBAAoB,EAAE,KAAA,EAAM;AAAA,MACzH;AAEA,MAAA,MAAM,mBAAA,GAAsB;AAAA,QAC1B,MAAA;AAAA,QACA,EAAA,EAAIQ,wBAAA,CAAiB,OAAA,CAAQ,SAAA,EAAW,SAAS,CAAA;AAAA,QACjD,QAAA,EAAU,UAAU,CAAC,CAAA;AAAA,QACrB,WAAA,EAAa,UAAU,CAAC,CAAA;AAAA,QACxB,YAAA,EAAc,oBAAA;AAAA,QACd,UAAA,EAAY,IAAA;AAAA,QACZ,MAAA,EAAQ;AAAA,OACV;AACA,MAAA,QAAA,CAAS,UAAA,EAAW;AACpB,MAAA,MAAM,SAAA,GAAY,MAAME,oBAAA,CAAa;AAAA,QACnC,SAAA,EAAW,mBAAA;AAAA,QACX;AAAA,OACD,CAAA;AACD,MAAA,QAAA,CAAS,IAAI,cAAc,CAAA;AAE3B,MAAA,SAAA,CAAU,CAAC,CAAA,GAAI,OAAA,CAAQ,UAAA,EAAW,CAC/B,wBAAA,CAAyB,CAAA,EAAG,eAAA,CAAgB,gBAAA,IAAoB,GAAA,EAAQ,SAAS,CAAA,CACjF,KAAA,EAAM;AACT,MAAA,MAAM,QAAA,GAAWC,aAAA,CAAO,QAAA,CAAS,eAAA,EAAgB;AACjD,MAAA,SAAA,CAAU,CAAC,IAAI,QAAA,CAAS,MAAA;AAAA,QACtB,CAAC,6HAA6H,CAAA;AAAA,QAC9H,CAAC,MAAA,CAAO,MAAA,CAAO,mBAAmB,CAAC;AAAA,OACrC;AAAA,IACF;AAEA,IAAA,QAAA,CAAS,UAAA,EAAW;AACpB,IAAA,MAAM,WAAA,GAAc;AAAA,MAClB,WAAA,CAAY,SAAA,CAAU,SAAA,EAAW,YAAY,EAAE,IAAA;AAAK,KACtD;AACA,IAAA,IAAI,gBAAA,EAAkB;AACpB,MAAA,WAAA,CAAY,IAAA;AAAA,QACV,KAAK,SAAA,CAAU;AAAA,UACb,GAAA;AAAA,UACA,iBAAiB,SAAA,CAAU,eAAA;AAAA,UAC3B,OAAA,EAAS,sBAAA;AAAA,UACT,OAAA,EAAS,WAAA;AAAA,UACT;AAAA,SACD;AAAA,OACH;AAAA,IACF;AACA,IAAA,MAAM,CAAC,MAAA,EAAQ,eAAe,IAAI,MAAM,OAAA,CAAQ,IAAI,WAAW,CAAA;AAC/D,IAAA,IAAI,gBAAA,EAAkB;AACpB,MAAA,MAAA,CAAO,cAAc,eAAA,CAAgB,WAAA;AAAA,IACvC;AACA,IAAA,QAAA,CAAS,GAAA,CAAI,uBAAA,EAAyB,qBAAA,EAAuB,eAAe,CAAA;AAE5E,IAAA,IAAI,YAAA,GAAuB,MAAA,CAAO,CAAC,CAAA,CAAE,WAAW,CAAA;AAChD,IAAA,IAAA,CAAK,GAAA,CAAI,eAAA,EAAiB,SAAA,EAAW,eAAA,EAAiB,YAAY,CAAA;AAClE,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,YAAA,GAAe,MAAA,CAAOX,oBAAA,CAAI,YAAA,CAAa,QAAA,EAAU,CAAA,CAAE,KAAA,CAAM,MAAA,CAAOY,8BAAqB,CAAA,GAAI,GAAG,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA;AAAA,IAC1G;AACA,IAAA,IAAA,CAAK,GAAA,CAAI,eAAA,EAAiB,SAAA,EAAW,4BAAA,EAA8B,YAAY,CAAA;AAC/E,IAAA,MAAA,CAAO,sBAAA,GAAyB,YAAA;AAEhC,IAAA,IAAA,CAAK,GAAA,CAAI,qBAAA,EAAuB,UAAA,EAAY,YAAA,EAAc,MAAM,CAAA;AAEhE,IAAA,MAAA,CAAO,SAAA,GAAY;AAAA,MACjB,KAAA,EAAO;AAAA;AAAA,QAEL,SAAA;AAAA;AAAA,QAEA;AAAA;AAAA,UAEE,aAAa,QAAA,EAAS;AAAA;AAAA,UAEtB,MAAA,CAAO,CAAC,CAAA,CAAE,YAAY,EAAE,QAAA;AAAS,SACnC;AAAA;AAAA,QAEA;AAAA,OACF;AAAA,MACA,OAAA,EAAS,EAAE,SAAA,EAAW,YAAA,CAAa,UAAS;AAAE,KAChD;AAKA,IAAA,MAAM,eAAeZ,oBAAA,CAAI,YAAA,EAAc,UAAS,IAAK,CAAC,EAAE,GAAA,CAAI,EAAA,IAAM,UAAU,WAAA,CAAY,QAAQ,EAAE,KAAA,CAAME,aAAA,CAAS,QAAQ,SAAA,CAAU,WAAA,CAAY,MAAM,CAAC,CAAA;AACtJ,IAAA,MAAA,CAAO,KAAK,SAAA,GAAYD,wBAAA,CAAoBD,qBAAI,YAAA,EAAc,QAAA,MAAc,CAAC,CAAA,CAAE,IAAI,EAAA,IAAM,SAAA,CAAU,YAAY,QAAQ,CAAA,CAAE,QAAQ,SAAA,CAAU,WAAA,CAAY,QAAQ,CAAC,CAAA;AAChK,IAAA,MAAA,CAAO,IAAA,CAAK,eAAeC,wBAAA,CAAoBD,oBAAA,CAAI,YAAY,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAC,CAAA;AAC5E,IAAA,MAAA,CAAO,IAAA,CAAK,gBAAgBC,wBAAA,CAAoBD,oBAAA,CAAI,OAAO,CAAC,CAAA,CAAE,YAAY,CAAA,EAAG,QAAA,MAAc,CAAC,CAAA,CAAE,IAAI,EAAA,IAAM,SAAA,CAAU,QAAQ,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAC,CAAA;AAEvI,IAAA,MAAM,iBAAA,GAAoB;AAAA,MACxB,sBAAA;AAAA,MACA,oFAAA;AAAA,MACA,OAAO,SAAA,CAAU,OAAA;AAAA,MACjB;AAAA,QACE;AAAA,UACE,IAAA,EAAM,yDAAA;AAAA,UACN,KAAA,EAAO,MAAA,CAAO,SAAA,CAAU,KAAA,CAAM,CAAC;AAAA,SACjC;AAAA,QACA;AAAA,UACE,IAAA,EAAM,wBAAA;AAAA,UACN,KAAA,EAAO,MAAA,CAAO,SAAA,CAAU,KAAA,CAAM,CAAC;AAAA,SACjC;AAAA,QACA;AAAA,UACE,IAAA,EAAM,SAAA;AAAA,UACN,KAAA,EAAO,MAAA,CAAO,SAAA,CAAU,KAAA,CAAM,CAAC;AAAA;AACjC,OACF;AAAA,MACA,IAAA,CAAK,OAAA,CAAQ,cAAA,CAAe,MAAA,IAAU;AAAA,KACxC;AAEA,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA,QAAA,CAAS,UAAA,EAAW;AACpB,MAAA,MAAM,KAAK,MAAM,IAAA,CAAK,QAAQ,kBAAA,CAAmB,oBAAA,CAAqB,GAAG,iBAAiB,CAAA;AAC1F,MAAA,QAAA,CAAS,IAAI,yCAAyC,CAAA;AACtD,MAAA,MAAA,CAAO,UAAU,EAAA,GAAK,EAAA;AAAA,IACxB;AAEA,IAAA,QAAA,CAAS,UAAA,EAAW;AACpB,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,mBAAA,CAAoB;AAAA,MACzC,GAAA;AAAA,MACA,iBAAA;AAAA,MACA,SAAA;AAAA,MACA,MAAA;AAAA,MACA,iBAAA,EAAmB,GAAA;AAAA,MACnB,uBAAA,EAAyB;AAAA,KAC1B,CAAA;AACD,IAAA,QAAA,CAAS,IAAI,qBAAqB,CAAA;AAClC,IAAA,MAAA,CAAO,IAAA,CAAK,iBAAiB,GAAA,CAAI,oBAAA;AACjC,IAAA,MAAA,CAAO,oBAAoB,GAAA,CAAI,iBAAA;AAC/B,IAAA,MAAA,CAAO,0BAA0B,GAAA,CAAI,iBAAA;AACrC,IAAA,MAAA,CAAO,uBAAuB,GAAA,CAAI,oBAAA;AAElC,IAAA,IAAI,OAAO,WAAA,EAAa;AACtB,MAAA,QAAA,CAAS,UAAA,EAAW;AACpB,MAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,CAAK,eAAA,CAAgB;AAAA,QAC/C,GAAA;AAAA,QACA,SAAA;AAAA,QACA,SAAS,MAAA,CAAO,cAAA;AAAA,QAChB,SAAA;AAAA,QACA;AAAA,OACD,CAAA;AACD,MAAA,MAAA,CAAO,qBAAqB,aAAA,CAAc,iBAAA;AAC1C,MAAA,QAAA,CAAS,IAAI,iBAAiB,CAAA;AAAA,IAChC;AAGA,IAAA,KAAA,MAAW,MAAA,IAAU,OAAO,IAAA,EAAM;AAChC,MAAA,IAAI,WAAA,CAAY,SAAS,MAAM,CAAA,IAAK,CAAC,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,EAAG;AACxD,QAAA;AAAA,MACF;AACA,MAAA,MAAA,CAAO,YAAA,GAAeA,oBAAA,CAAI,MAAA,CAAO,YAAA,IAAgB,CAAC,CAAA,CAAE,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,IAAK,CAAC,CAAA;AAAA,IACnF;AACA,IAAA,MAAA,CAAO,YAAA,GAAeC,yBAAoBD,oBAAA,CAAI,MAAA,CAAO,YAAY,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAC,CAAA;AAE9E,IAAA,MAAA,CAAO,UAAU,iBAAA,GAAoB,iBAAA;AAErC,IAAA,QAAA,CAAS,IAAI,UAAU,CAAA;AAEvB,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAM,gBAAgB,MAAA,EAAa;AACjC,IAAA,MAAM;AAAA,MACJ;AAAA,KACF,GAAI,MAAA;AAEJ,IAAA,MAAM,cAAc,EAAA,EAAI,WAAA;AACxB,IAAA,IAAI,CAAC,aAAa,QAAA,EAAU;AAC1B,MAAA,MAAM,IAAI,MAAM,qBAAqB,CAAA;AAAA,IACvC;AAEA,IAAA,IAAA,CAAK,GAAA,CAAI,sBAAA,EAAwB,SAAA,EAAW,iBAAA,EAAmB,WAAW,CAAA;AAE1E,IAAA,MAAM,cAAA,GAAiB,KAAK,GAAA,EAAI;AAChC,IAAA,MAAM,kBAAA,GAAqB,IAAI,EAAA,GAAK,GAAA;AACpC,IAAA,MAAM,aAAa,cAAA,GAAiB,kBAAA;AACpC,IAAA,IAAI,yBAAA,GAA4B;AAAA,MAC9B,GAAG,WAAA;AAAA,MACH,QAAA,EAAU;AAAA,QACR,GAAG,WAAA,CAAY,QAAA;AAAA,QACf;AAAA;AACF,KACF;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,KAAK,cAAA,EAAe;AAC1B,MAAA,yBAAA,GAA4B,MAAM,KAAK,OAAA,CAAQ,kBAAA,CAAmB,QAAQ,yBAAA,EAA2B,EAAE,OAAA,EAAS,IAAA,EAAM,CAAA;AAAA,IACxH,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,IAAA,CAAK,gEAAgE,KAAK,CAAA;AAAA,IACpF;AAEA,IAAA,IAAA,CAAK,GAAA,CAAI,sBAAA,EAAwB,SAAA,EAAW,0BAAA,EAA4B,yBAAyB,CAAA;AAEjG,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,sBAAA,CAAuB,yBAAyB,CAAA;AAE1E,IAAA,IAAA,CAAK,GAAA,CAAI,sBAAA,EAAwB,SAAA,EAAW,kCAAA,EAAoC,MAAM,CAAA;AAEtF,IAAA,IAAI,OAAO,WAAW,QAAA,EAAU;AAC9B,MAAA,MAAM,OAAO,MAAA,CAAO,IAAA,GAAO,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA,GAAI,EAAA;AACjD,MAAA,MAAM,UAAU,MAAA,CAAO,OAAA,GAAU,MAAA,CAAO,MAAA,CAAO,OAAO,CAAA,GAAI,EAAA;AAC1D,MAAA,MAAM,WAAW,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,OAAO,GAAG,WAAA,EAAY;AAClD,MAAA,IAAI,QAAA,CAAS,QAAA,CAAS,8BAA8B,CAAA,IAC/C,QAAA,CAAS,QAAA,CAAS,qBAAqB,CAAA,IACvC,QAAA,CAAS,QAAA,CAAS,SAAS,CAAA,EAC9B;AACA,QAAA,MAAM,IAAI,MAAM,iCAAiC,CAAA;AAAA,MACnD;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,GAAA,CAAI,sBAAA,EAAwB,SAAA,EAAW,aAAA,EAAe,MAAM,CAAA;AAEjE,IAAA,IAAI,OAAO,WAAW,QAAA,EAAU;AAC9B,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,OAAO,MAAA,EAAQ,IAAA,IAAQ,MAAA,EAAQ,IAAA,IAAQ,yBAAA,CAA0B,IAAA;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,KAAA,CAAM,IAAA,EAAe,MAAA,EAAa;AACtC,IAAA,QAAQ,IAAA;AAAM,MACZ,KAAKa,YAAA,CAAQ,KAAA;AACX,QAAA,OAAO,MAAM,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA;AAAA,MACnC,KAAKA,YAAA,CAAQ,QAAA;AACX,QAAA,OAAO,MAAM,IAAA,CAAK,kBAAA,CAAmB,MAAM,CAAA;AAAA,MAC7C;AACE,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,wBAAA,EAA2B,IAAI,CAAA,CAAE,CAAA;AAAA;AACrD,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,IAAA,CAAK,IAAA,EAAgB,MAAA,EAAa;AACtC,IAAA,QAAQ,IAAA;AAAM,MACZ,KAAKC,aAAA,CAAS,IAAA;AACZ,QAAA,OAAO,MAAM,IAAA,CAAK,eAAA,CAAgB,MAAM,CAAA;AAAA,MAC1C,KAAKA,aAAA,CAAS,QAAA;AACZ,QAAA,OAAO,MAAM,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA;AAAA,MACnC;AACE,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,uBAAA,EAA0B,IAAI,CAAA,CAAE,CAAA;AAAA;AACpD,EACF;AAAA,EAEA,MAAM,mBAAmB,MAAA,EAAa;AACpC,IAAA,MAAM;AAAA,MACJ,GAAA;AAAA,MACA,YAAA;AAAA,MACA,GAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA;AAAA,MACA,cAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACF,GAAI,MAAA;AAEJ,IAAA,MAAM,MAAA,GAAc,EAAE,IAAA,EAAM,EAAC,EAAE;AAE/B,IAAA,MAAM,QAAA,GAAW,IAAIT,aAAA,CAAS,EAAE,IAAA,EAAM,eAAA,EAAiB,QAAA,EAAU,YAAA,EAAc,OAAA,EAASN,YAAA,CAAQ,KAAA,EAAO,CAAA;AACvG,IAAA,MAAM,KAAK,cAAA,EAAe;AAC1B,IAAA,QAAA,CAAS,IAAI,gBAAgB,CAAA;AAC7B,IAAA,MAAM,WAAA,GAAc,QAAA,IAAY,IAAA,CAAK,OAAA,CAAQ,cAAA,CAAe,MAAA;AAE5D,IAAA,QAAA,CAAS,UAAA,EAAW;AACpB,IAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,SAAA,CAAU;AAAA,MACrC,GAAA;AAAA,MACA,iBAAiB,SAAA,CAAU,eAAA;AAAA,MAC3B,OAAA,EAAS,WAAA;AAAA,MACT,OAAA,EAAS,YAAA;AAAA,MACT;AAAA,KACD,CAAA;AACD,IAAA,MAAA,CAAO,cAAc,SAAA,CAAU,WAAA;AAC/B,IAAA,MAAA,CAAO,cAAA,GAAiB,YAAA;AACxB,IAAA,QAAA,CAAS,IAAI,WAAW,CAAA;AAExB,IAAA,MAAM,UAAA,GAAkB;AAAA;AAAA,MAEtB,SAAA,CAAU,eAAA;AAAA;AAAA,MAEV,cAAA;AAAA;AAAA,MAEA;AAAA,KACF;AACA,IAAA,MAAA,CAAO,SAAA,GAAY;AAAA,MACjB,KAAA,EAAO;AAAA,KACT;AAEA,IAAA,MAAM,iBAAA,GAAoB;AAAA,MACxB,YAAA;AAAA,MACA,wCAAA;AAAA,MACA,EAAC;AAAA,MACD;AAAA,QACE;AAAA,UACE,IAAA,EAAM,SAAA;AAAA,UACN,KAAA,EAAO,MAAA,CAAO,SAAA,CAAU,KAAA,CAAM,CAAC;AAAA;AAAA,SACjC;AAAA,QACA;AAAA,UACE,IAAA,EAAM,SAAA;AAAA,UACN,KAAA,EAAO,MAAA,CAAO,SAAA,CAAU,KAAA,CAAM,CAAC;AAAA;AAAA,SACjC;AAAA,QACA;AAAA,UACE,IAAA,EAAM,SAAA;AAAA,UACN,KAAA,EAAO,MAAA,CAAO,SAAA,CAAU,KAAA,CAAM,CAAC;AAAA;AAAA;AACjC,OACF;AAAA,MACA,IAAA,CAAK,OAAA,CAAQ,cAAA,CAAe,MAAA,IAAU;AAAA,KACxC;AAEA,IAAA,QAAA,CAAS,UAAA,EAAW;AACpB,IAAA,MAAM,KAAK,MAAM,IAAA,CAAK,QAAQ,kBAAA,CAAmB,oBAAA,CAAqB,GAAG,iBAAiB,CAAA;AAC1F,IAAA,QAAA,CAAS,IAAI,yCAAyC,CAAA;AACtD,IAAA,MAAA,CAAO,UAAU,EAAA,GAAK,EAAA;AAEtB,IAAA,QAAA,CAAS,UAAA,EAAW;AACpB,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,mBAAA,CAAoB;AAAA,MACzC,GAAA;AAAA,MACA,iBAAA;AAAA,MACA,SAAA;AAAA,MACA,MAAA;AAAA,MACA,iBAAA,EAAmB,GAAA;AAAA,MACnB,uBAAA,EAAyB;AAAA,KAC1B,CAAA;AACD,IAAA,QAAA,CAAS,IAAI,qBAAqB,CAAA;AAClC,IAAA,MAAA,CAAO,IAAA,CAAK,iBAAiB,GAAA,CAAI,oBAAA;AACjC,IAAA,MAAA,CAAO,oBAAoB,GAAA,CAAI,iBAAA;AAC/B,IAAA,MAAA,CAAO,yBAAyB,GAAA,CAAI,iBAAA;AACpC,IAAA,MAAA,CAAO,uBAAuB,GAAA,CAAI,oBAAA;AAElC,IAAA,IAAI,OAAO,WAAA,EAAa;AACtB,MAAA,QAAA,CAAS,UAAA,EAAW;AACpB,MAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,CAAK,eAAA,CAAgB;AAAA,QAC/C,GAAA;AAAA,QACA,SAAA;AAAA,QACA,SAAS,MAAA,CAAO,cAAA;AAAA,QAChB,SAAA;AAAA,QACA;AAAA,OACD,CAAA;AACD,MAAA,MAAA,CAAO,qBAAqB,aAAA,CAAc,iBAAA;AAC1C,MAAA,QAAA,CAAS,IAAI,iBAAiB,CAAA;AAAA,IAChC;AAEA,IAAA,MAAA,CAAO,UAAU,iBAAA,GAAoB,iBAAA;AAErC,IAAA,QAAA,CAAS,SAAS,oBAAoB,CAAA;AAEtC,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAM,oBAAoB,MAAA,EAAa;AACrC,IAAA,MAAM,EAAE,SAAQ,GAAI,MAAA;AAEpB,IAAA,MAAM,MAAA,GAAc;AAAA,MAClB,MAAA,EAAQ,CAAA;AAAA,MACR,SAAA,EAAW,CAAA;AAAA,MACX,OAAA,EAAS,KAAA;AAAA,MACT,KAAA,EAAO;AAAA,KACT;AAEA,IAAA,MAAM,KAAK,cAAA,EAAe;AAE1B,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,IAAW,CAAC,OAAA,EAAS;AAC7B,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,IAAI;AACF,MAAA,IAAI,eAAA;AACJ,MAAA,IAAI,kBAAA;AAEJ,MAAA,IAAI;AACF,QAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,mBAAA,EAAqB;AACxC,UAAA,MAAM,YAAiB,MAAM,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,oBAAoB,OAAO,CAAA;AACzE,UAAA,IAAA,CAAK,GAAA,CAAI,gCAAA,EAAkC,UAAA,EAAY,eAAA,EAAiB,SAAS,CAAA;AACjF,UAAA,IAAI,SAAA,EAAW;AAEb,YAAA,eAAA,GAAA,CAAmB,SAAA,CAAU,WAAA,IAAe,CAAA,KAAM,SAAA,CAAU,UAAA,IAAc,CAAA,CAAA;AAE1E,YAAA,kBAAA,GAAA,CAAsB,SAAA,CAAU,YAAA,IAAgB,CAAA,KAAM,SAAA,CAAU,WAAA,IAAe,CAAA,CAAA;AAAA,UACjF;AAAA,QACF;AAAA,MACF,SAAS,YAAA,EAAc;AACrB,QAAA,OAAA,CAAQ,IAAA,CAAK,4DAA4D,YAAY,CAAA;AAAA,MACvF;AAEA,MAAA,IAAI,eAAA,KAAoB,KAAA,CAAA,IAAU,kBAAA,KAAuB,KAAA,CAAA,EAAQ;AAC/D,QAAA,MAAM,cAAmB,MAAM,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,WAAW,OAAO,CAAA;AAElE,QAAA,IAAI,YAAY,gBAAA,EAAkB;AAChC,UAAA,MAAM,kBAAkB,WAAA,CAAY,gBAAA;AACpC,UAAA,eAAA,GAAA,CAAmB,eAAA,CAAgB,WAAA,IAAe,CAAA,KAAM,eAAA,CAAgB,UAAA,IAAc,CAAA,CAAA;AACtF,UAAA,kBAAA,GAAA,CAAsB,eAAA,CAAgB,QAAA,IAAY,CAAA,KAAM,eAAA,CAAgB,OAAA,IAAW,CAAA,CAAA;AAAA,QACrF,CAAA,MAAA,IAAW,WAAA,CAAY,MAAA,KAAW,KAAA,CAAA,EAAW;AAC3C,UAAA,eAAA,GAAkB,YAAY,MAAA,IAAU,CAAA;AAAA,QAC1C;AAGA,QAAA,IAAI,WAAA,CAAY,cAAc,KAAA,CAAA,EAAW;AACvC,UAAA,IAAI,OAAO,WAAA,CAAY,SAAA,KAAc,QAAA,EAAU;AAC7C,YAAA,kBAAA,GAAqB,WAAA,CAAY,SAAA;AAAA,UACnC,CAAA,MAAA,IAAW,YAAY,SAAA,EAAW;AAChC,YAAA,kBAAA,GAAqB,WAAA,CAAY,SAAA,CAAU,SAAA,IAAa,WAAA,CAAY,UAAU,YAAA,IAAgB,CAAA;AAAA,UAChG;AAAA,QACF;AAAA,MACF;AAEA,MAAA,MAAA,CAAO,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,eAAe,CAAA;AAC3C,MAAA,MAAA,CAAO,SAAA,GAAY,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,kBAAkB,CAAA;AACjD,MAAA,MAAA,CAAO,OAAA,GAAU,IAAA;AACjB,MAAA,MAAA,CAAO,KAAA,GAAQ,IAAA;AAAA,IACjB,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,oCAAoC,KAAK,CAAA;AAAA,IACzD;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AACF","file":"index.js","sourcesContent":["import {\n numberRemoveEndZero,\n getPrice,\n SendType,\n Service,\n DefaultAddresses,\n getChainRpcUrl,\n Csl,\n OpenAPI,\n ExecTime,\n} from '@stableflow/core';\nimport {\n addressToBytes32,\n getHopMsgFee,\n DATA_HEX_PROTOBUF_EXTRA,\n LZ_RECEIVE_VALUE,\n SIGNATURE_SIZE,\n USDT0_LEGACY_MESH_TRANSFTER_FEE,\n} from '@stableflow/bridges';\nimport { NATIVE_MSG_FEE_BUFFER } from '@stableflow/utils-evm';\nimport { getDestinationAssociatedTokenAddress } from '@stableflow/utils-solana';\nimport { Options } from \"@layerzerolabs/lz-v2-utilities\";\nimport { ethers } from \"ethers\";\nimport Big from \"big.js\";\nimport { TronWeb } from \"tronweb\";\n\nconst DefaultTronWalletAddress = DefaultAddresses[\"tron\"];\nconst getCustomTronWeb = () => {\n return new TronWeb({\n fullHost: getChainRpcUrl(\"tron\").rpcUrl,\n headers: {},\n privateKey: \"\",\n });\n};\n\nexport default class TronWallet {\n private signAndSendTransaction: any;\n private address: string;\n private tronWeb: any;\n private csl;\n\n constructor(options: any) {\n this.signAndSendTransaction = options.signAndSendTransaction;\n this.address = options.address;\n\n const customTronWeb = getCustomTronWeb();\n customTronWeb.setAddress(this.address || DefaultTronWalletAddress);\n this.tronWeb = customTronWeb;\n\n const cs = new Csl(OpenAPI.DEBUG);\n this.csl = cs.log;\n }\n\n async waitForTronWeb() {\n return new Promise((resolve) => {\n if (this.tronWeb) {\n const address = this.tronWeb.defaultAddress.base58 || DefaultTronWalletAddress;\n const customTronWeb = getCustomTronWeb();\n customTronWeb.setAddress(address);\n this.tronWeb = customTronWeb;\n resolve(this.tronWeb);\n return;\n }\n\n const checkTronWeb = () => {\n if ((window as any).tronWeb) {\n this.tronWeb = (window as any).tronWeb;\n const address = this.tronWeb.defaultAddress.base58 || DefaultTronWalletAddress;\n const customTronWeb = getCustomTronWeb();\n customTronWeb.setAddress(address);\n this.tronWeb = customTronWeb;\n resolve(this.tronWeb);\n } else {\n setTimeout(checkTronWeb, 100);\n }\n };\n\n checkTronWeb();\n\n setTimeout(() => {\n const customTronWeb = getCustomTronWeb();\n customTronWeb.setAddress(DefaultTronWalletAddress);\n this.tronWeb = customTronWeb;\n resolve(this.tronWeb);\n this.csl(\"TronWallet waitForTronWeb\", \"red-500\", \"TronWeb initialization timeout\");\n }, 10000);\n });\n }\n\n async transfer(data: {\n originAsset: string;\n depositAddress: string;\n amount: string;\n }) {\n const { originAsset, depositAddress, amount } = data;\n\n await this.waitForTronWeb();\n\n if (originAsset === \"TRX\" || originAsset === \"trx\") {\n return await this.transferTRX(depositAddress, amount);\n }\n\n // Transfer TRC20 token (USDT, USDC, etc.)\n return await this.transferToken(originAsset, depositAddress, amount);\n }\n\n async transferTRX(to: string, amount: string) {\n await this.waitForTronWeb();\n\n const transaction = await this.tronWeb.transactionBuilder.sendTrx(\n to,\n this.tronWeb.toSun(amount)\n );\n\n return this.sendTransaction({ tx: { transaction } });\n }\n\n async transferToken(contractAddress: string, to: string, amount: string) {\n await this.waitForTronWeb();\n\n const functionSelector = 'transfer(address,uint256)';\n const parameter = [{ type: 'address', value: to }, { type: 'uint256', value: amount }];\n const tx = await this.tronWeb.transactionBuilder.triggerSmartContract(contractAddress, functionSelector, {}, parameter);\n\n return this.sendTransaction({ tx });\n\n // // Get contract instance\n // const contract = await this.tronWeb.contract().at(contractAddress);\n\n // // Call transfer function\n // const transaction = await contract.transfer(to, amount).send({\n // feeLimit: 100_000_000\n // });\n\n // return transaction;\n }\n\n async getBalance(token: any, account: string, options?: { isCatchError?: boolean; }) {\n await this.waitForTronWeb();\n\n if (token.symbol === \"TRX\" || token.symbol === \"trx\" || token.symbol === \"native\") {\n return await this.getTRXBalance(account, options);\n }\n\n return await this.getTokenBalance(token.contractAddress, account, options);\n }\n\n async getTRXBalance(account: string, options?: { isCatchError?: boolean; }) {\n const { isCatchError = false } = options || {};\n\n await this.waitForTronWeb();\n\n try {\n const balance = await this.tronWeb.trx.getBalance(account);\n return balance.toString();\n } catch (error) {\n this.csl(\"Tron getTRXBalance\", \"red-500\", \"Get TRX balance failed: %o\", error);\n if (isCatchError) {\n throw error;\n }\n return \"0\";\n }\n }\n\n async getTokenBalance(contractAddress: string, account: string, options?: { isCatchError?: boolean; }) {\n const { isCatchError = false } = options || {};\n\n await this.waitForTronWeb();\n\n try {\n const contract = await this.tronWeb.contract().at(contractAddress);\n const balance = await contract.balanceOf(account).call();\n\n // Convert from smallest unit to token unit (assuming 6 decimals)\n return balance.toString();\n } catch (error) {\n this.csl(\"Tron getTokenBalance\", \"red-500\", \"Get token balance failed: %o\", error);\n if (isCatchError) {\n throw error;\n }\n return \"0\";\n }\n }\n\n async balanceOf(token: any, account: string, options?: { isCatchError?: boolean; }) {\n return await this.getBalance(token, account, options);\n }\n\n /**\n * Estimate gas limit for transfer transaction\n * @param data Transfer data\n * @returns Gas limit estimate (bandwidth or energy), gas price, and estimated gas cost\n */\n async estimateTransferGas(data: {\n fromToken: any;\n depositAddress: string;\n amount: string;\n }): Promise<{\n gasLimit: bigint;\n gasPrice: bigint;\n estimateGas: bigint;\n }> {\n const { fromToken } = data;\n const originAsset = fromToken.contractAddress;\n\n // Tron uses bandwidth for TRX transfers and energy for smart contract calls\n // TRX transfer: ~268 bandwidth\n // TRC20 transfer: ~30000 energy (estimated)\n let gasLimit: bigint;\n\n if (originAsset === \"TRX\" || originAsset === \"trx\") {\n // TRX transfer uses bandwidth (typically 268)\n gasLimit = 268n;\n } else {\n // TRC20 token transfer uses energy (typically 30000-35000)\n gasLimit = 30000n;\n }\n\n // Increase by 20% to provide buffer\n gasLimit = (gasLimit * 120n) / 100n;\n\n // Get current energy price from Tron (in sun)\n // For bandwidth, it's free if you have bandwidth\n // For energy, the price varies, typically 420 sun per energy unit\n let gasPrice: bigint = 100n;\n // try {\n // const chainParameters = await this.tronWeb.trx.getChainParameters();\n // const energyPrice = chainParameters?.find((p: any) => p.key === \"getEnergyFee\")?.value || 420;\n // gasPrice = BigInt(energyPrice);\n // } catch (error) {\n // // Default energy price: 420 sun per energy unit\n // gasPrice = 420n;\n // }\n\n // Calculate estimated gas cost: gasLimit * gasPrice\n const estimateGas = gasLimit * gasPrice;\n\n return {\n gasLimit,\n gasPrice,\n estimateGas\n };\n }\n\n async getEstimateGas(params: any) {\n const { gasLimit, price, nativeToken } = params;\n\n const energyPrice = BigInt(100);\n const estimateGas = Big(gasLimit.toString()).times(energyPrice.toString());\n const estimateGasAmount = Big(estimateGas).div(10 ** nativeToken.decimals);\n const estimateGasUsd = Big(estimateGasAmount).times(price || 1);\n\n return {\n gasPrice: energyPrice,\n usd: numberRemoveEndZero(Big(estimateGasUsd).toFixed(20)),\n wei: BigInt(estimateGas.toFixed(0)),\n amount: numberRemoveEndZero(Big(estimateGasAmount).toFixed(nativeToken.decimals)),\n };\n }\n\n async estimateTransaction(params: any) {\n const {\n dry,\n transactionParams,\n fromToken,\n prices,\n defaultEnergyUsed,\n defaultRawDataHexLength,\n buffer,\n } = params;\n\n const nativeTokenPrice = getPrice(prices, fromToken.nativeToken.symbol);\n\n let energyUsed = defaultEnergyUsed || 200000;\n let rawDataHexLength = defaultRawDataHexLength || 1000;\n try {\n const transaction = await this.tronWeb.transactionBuilder.triggerConstantContract(...transactionParams);\n energyUsed = transaction.energy_used || 200000;\n rawDataHexLength = transaction.transaction.raw_data_hex.length || 1000;\n } catch (error) {\n this.csl(\"Usdt0 Tron\", \"red-500\", \"estimateTransaction triggerConstantContract error: %o, action: %o\", error, transactionParams?.[1]);\n }\n const bandwidthAmount = Big(Big(rawDataHexLength).div(2).plus(DATA_HEX_PROTOBUF_EXTRA).plus(SIGNATURE_SIZE)).times(1e-3);\n const bandwidthUsed = Big(bandwidthAmount).div(1e2).times(10 ** fromToken.nativeToken.decimals);\n let totalUsed = Big(energyUsed).plus(bandwidthUsed);\n\n if (buffer) {\n totalUsed = Big(totalUsed).times(Big(1).plus(buffer));\n }\n\n const { usd, wei } = await this.getEstimateGas({\n gasLimit: totalUsed.toFixed(0),\n price: nativeTokenPrice,\n nativeToken: fromToken.nativeToken,\n });\n\n const result = {\n estimateSourceGasLimit: energyUsed,\n estimateSourceGas: wei,\n estimateSourceGasUsd: usd,\n };\n\n return result;\n }\n\n async estimateApprove(params: any) {\n const {\n dry,\n spender,\n amountWei,\n fromToken,\n prices,\n } = params;\n\n const approveParams = [\n fromToken.contractAddress,\n \"approve(address,uint256)\",\n {},\n [\n { type: \"address\", value: spender },\n { type: \"uint256\", value: amountWei }\n ]\n ];\n return this.estimateTransaction({\n dry,\n transactionParams: approveParams,\n fromToken,\n prices,\n defaultEnergyUsed: 100000,\n defaultRawDataHexLength: 500,\n // +10%\n buffer: 0.1,\n });\n }\n\n async pollingTransactionStatus(txHash: string, options?: {\n maxPolls?: number;\n pollInterval?: number;\n isTRX?: boolean;\n }) {\n await this.waitForTronWeb();\n\n const { maxPolls = 60, pollInterval = 2000, isTRX } = options || {};\n let pollCount = 0;\n\n return new Promise((resolve) => {\n const poll = async () => {\n pollCount++;\n this.csl(\"TronWallet pollingTransactionStatus\", \"teal-400\", \"polling transaction status (%s), %d times\", txHash, pollCount);\n\n try {\n const txInfo = await this.tronWeb.trx.getTransactionInfo(txHash);\n this.csl(\"TronWallet pollingTransactionStatus\", \"teal-400\", \"transaction info (%s): %o\", txHash, txInfo);\n\n // if the transaction info exists and has receipt, the transaction has been on-chain\n if (txInfo && txInfo.receipt) {\n if (isTRX) {\n resolve(true);\n return;\n }\n\n const result = txInfo.receipt.result;\n\n if (result === \"SUCCESS\") {\n this.csl(\"TronWallet pollingTransactionStatus\", \"teal-400\", \"transaction success (%s)\", txHash);\n resolve(true);\n return;\n } else if (result === \"FAILED\" || result === \"REVERT\") {\n this.csl(\"TronWallet pollingTransactionStatus\", \"red-500\", \"transaction failed (%s), result: %s\", txHash, result);\n resolve(false);\n return;\n } else {\n // other status, continue polling\n this.csl(\"TronWallet pollingTransactionStatus\", \"teal-400\", \"unknown transaction status (%s), result: %s, continue polling...\", txHash, result);\n }\n } else {\n // transaction info exists but no receipt, maybe still being packed, continue polling\n this.csl(\"TronWallet pollingTransactionStatus\", \"teal-400\", \"transaction not confirmed (%s), continue polling...\", txHash);\n }\n } catch (error: any) {\n // if the transaction does not exist (maybe still being packed), continue polling\n // common error messages include \"not found\" or \"does not exist\"\n const errorMessage = error?.message || String(error);\n if (\n errorMessage.includes(\"not found\") ||\n errorMessage.includes(\"does not exist\") ||\n errorMessage.includes(\"not exist\")\n ) {\n this.csl(\"TronWallet pollingTransactionStatus\", \"teal-400\", \"transaction not on-chain (%s), continue polling...\", txHash);\n } else {\n // other error, log but continue polling\n console.warn(`query transaction status error (${txHash}): %o`, errorMessage);\n }\n }\n\n // check if the maximum polling times is reached\n if (pollCount >= maxPolls) {\n console.error(`polling timeout (${txHash}), maximum polling times reached: ${maxPolls}`);\n resolve(false);\n return;\n }\n\n // continue polling\n setTimeout(poll, pollInterval);\n };\n\n // start polling\n poll();\n });\n }\n\n async checkTransactionStatus(txHash: string) {\n await this.waitForTronWeb();\n\n try {\n const txInfo = await this.tronWeb.trx.getTransactionInfo(txHash);\n\n if (txInfo && txInfo.receipt) {\n return txInfo.receipt.result === \"SUCCESS\";\n }\n\n return false;\n } catch (error) {\n return false;\n }\n }\n\n async getTransactionResult(txHash: string) {\n await this.waitForTronWeb();\n\n try {\n const txInfo = await this.tronWeb.trx.getTransactionInfo(txHash);\n return txInfo;\n } catch (error) {\n return {};\n }\n }\n\n async allowance(params: any) {\n const {\n dry,\n contractAddress,\n spender,\n address,\n amountWei,\n strict = false,\n } = params;\n\n // Get contract instance\n const contract = await this.tronWeb.contract().at(contractAddress);\n\n if (dry) {\n return {\n contract,\n allowance: \"0\",\n needApprove: false,\n };\n }\n\n await this.waitForTronWeb();\n\n try {\n // Get allowance\n let allowance = \"0\";\n try {\n const allowanceResult = await contract.allowance(address, spender).call();\n allowance = allowanceResult.toString();\n } catch (error) {\n this.csl(\"TronWallet allowance\", \"red-500\", \"Error getting allowance: %o\", error);\n if (strict) {\n throw error;\n }\n }\n\n return {\n contract,\n allowance,\n needApprove: Big(amountWei || 0).gt(allowance || 0),\n };\n } catch (error) {\n this.csl(\"TronWallet allowance\", \"red-500\", \"Error in allowance: %o\", error);\n if (strict) {\n throw error;\n }\n // Return default values on error\n return {\n contract: null,\n allowance: \"0\",\n needApprove: true,\n };\n }\n }\n\n async approve(params: any) {\n const {\n contractAddress,\n spender,\n amountWei,\n isApproveMax = false,\n isDetails = false,\n isWaitTxReceipt = true,\n } = params;\n\n await this.waitForTronWeb();\n\n const detailResult: any = {\n success: false,\n data: {},\n message: null,\n };\n\n try {\n // Determine approval amount\n let _amountWei = amountWei;\n if (isApproveMax) {\n // Max uint256 value: 2^256 - 1\n _amountWei = \"115792089237316195423570985008687907853269984665640564039457584007913129639935\";\n }\n\n // Build approve transaction using triggerSmartContract\n const functionSelector = 'approve(address,uint256)';\n const parameter = [\n { type: 'address', value: spender },\n { type: 'uint256', value: _amountWei }\n ];\n const tx = await this.tronWeb.transactionBuilder.triggerSmartContract(\n contractAddress,\n functionSelector,\n {},\n parameter\n );\n\n // Sign and send transaction\n const txHash = await this.sendTransaction({ tx });\n let txInfo: Record<string, unknown> | null = null;\n\n if (isWaitTxReceipt) {\n const pollingResult = await this.pollingTransactionStatus(txHash, {\n maxPolls: 120,\n pollInterval: 2000,\n });\n if (!pollingResult) {\n this.csl(\"TronWallet approve\", \"red-500\", \"Failed polling approve transaction status\");\n if (isDetails) {\n detailResult.message = \"Failed to get approve result\";\n return detailResult;\n }\n return false;\n }\n txInfo = await this.getTransactionResult(txHash);\n }\n\n if (isDetails) {\n const txReceipt = txInfo?.receipt as { result?: string } | undefined;\n detailResult.success = true;\n detailResult.data = {\n txHash,\n txInfo,\n receiptResult: txReceipt?.result,\n blockNumber: txInfo?.blockNumber,\n blockTimeStamp: txInfo?.blockTimeStamp,\n };\n return detailResult;\n }\n\n return txHash;\n } catch (error: any) {\n this.csl(\"TronWallet approve\", \"red-500\", \"Error approve: %o\", error);\n if (isDetails) {\n detailResult.message = error.message;\n return detailResult;\n }\n return false;\n }\n }\n\n toBytes32(addr: string): string {\n const hex = this.tronWeb.address.toHex(addr).slice(2);\n return \"0x\" + hex.padStart(64, \"0\");\n }\n\n async quoteOFT(params: any) {\n const {\n dry,\n abi,\n dstEid,\n recipient,\n amountWei,\n slippageTolerance,\n payInLzToken,\n fromToken,\n toToken,\n prices,\n originLayerzeroAddress,\n destinationLayerzeroAddress,\n excludeFees,\n refundTo,\n multiHopComposer,\n isMultiHopComposer,\n isOriginLegacy,\n isDestinationLegacy,\n originLayerzero,\n destinationLayerzero,\n } = params;\n\n const { Options } = await import(\"@layerzerolabs/lz-v2-utilities\");\n\n const result: any = {\n needApprove: false,\n approveSpender: originLayerzeroAddress,\n sendParam: void 0,\n quoteParam: {\n ...params,\n originLayerzeroAddress: originLayerzeroAddress,\n destinationLayerzeroAddress: destinationLayerzeroAddress,\n },\n fees: {},\n totalFeesUsd: void 0,\n estimateSourceGas: void 0,\n totalEstimateSourceGas: 0n,\n estimateSourceGasUsd: void 0,\n estimateTime: 0, // seconds - dynamically calculated using LayerZero formula\n outputAmount: numberRemoveEndZero(Big(amountWei || 0).div(10 ** params.fromToken.decimals).toFixed(params.fromToken.decimals, 0)),\n };\n\n const execTime = new ExecTime({ type: \"USDT0 Tron\", logStyle: \"indigo-300\", isDebug: OpenAPI.DEBUG });\n await this.waitForTronWeb();\n execTime.log(\"waitForTronWeb\");\n\n execTime.breakpoint();\n const oftContract = await this.tronWeb.contract(abi, originLayerzeroAddress);\n execTime.log(\"tronWeb.contract originLayerzeroAddress\");\n\n execTime.breakpoint();\n const userAddress = refundTo || this.tronWeb.defaultAddress.base58;\n const approvalRequired = isOriginLegacy ? originLayerzero.oftLegacyApprovalRequired : originLayerzero.oftApprovalRequired;\n execTime.log(\"approvalRequired\");\n\n const lzReceiveOptionGas = isDestinationLegacy ? destinationLayerzero.lzReceiveOptionGasLegacy : destinationLayerzero.lzReceiveOptionGas;\n let lzReceiveOptionValue = 0;\n\n execTime.breakpoint();\n const destATA = await getDestinationAssociatedTokenAddress({\n recipient,\n toToken,\n });\n execTime.log(\"getDestinationAssociatedTokenAddress\");\n if (destATA.needCreateTokenAccount) {\n lzReceiveOptionValue = LZ_RECEIVE_VALUE[toToken.chainName] || 0;\n }\n\n let unMultiHopExtraOptions = Options.newOptions().toHex();\n if (!isMultiHopComposer && lzReceiveOptionValue) {\n unMultiHopExtraOptions = Options.newOptions().addExecutorLzReceiveOption(lzReceiveOptionGas, lzReceiveOptionValue).toHex();\n }\n\n // 2. quote send\n const sendParam: any = [\n // dstEid\n dstEid,\n // to\n // \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n addressToBytes32(toToken.chainType, recipient),\n // amountLD\n amountWei,\n // minAmountLD\n \"0\",\n // extraOptions\n unMultiHopExtraOptions,\n // composeMsg\n \"0x\",\n // oftCmd\n \"0x\",\n ];\n\n if (isMultiHopComposer) {\n // multiHopComposer: Arbitrum legacy mesh MultiHopComposer, eid = 30110\n sendParam[0] = multiHopComposer.eid; // dstEid\n sendParam[1] = addressToBytes32(\"evm\", multiHopComposer.oftMultiHopComposer); // to\n }\n\n // 0.03% fee for Legacy Mesh transfers only (native USDT0 transfers are free)\n if (isOriginLegacy || isDestinationLegacy) {\n result.fees.legacyMeshFeeUsd = numberRemoveEndZero(Big(amountWei || 0).div(10 ** fromToken.decimals).times(USDT0_LEGACY_MESH_TRANSFTER_FEE).toFixed(fromToken.decimals));\n result.outputAmount = numberRemoveEndZero(Big(Big(amountWei || 0).div(10 ** params.fromToken.decimals)).minus(result.fees.legacyMeshFeeUsd || 0).toFixed(params.fromToken.decimals, 0));\n }\n\n if (!dry) {\n execTime.breakpoint();\n const oftData = await oftContract.quoteOFT(sendParam).call();\n execTime.log(\"quoteOFT\");\n const [, , oftReceipt] = oftData;\n // The slippage is calculated based on the user-defined value and the user-input amount\n sendParam[3] = Big(amountWei).times(Big(1).minus(Big(slippageTolerance || 0).div(100))).toFixed(0);\n // The actual received amount is based on the contract return value\n result.outputAmount = numberRemoveEndZero(numberRemoveEndZero(Big(oftReceipt[1].toString()).div(10 ** params.toToken.decimals).toFixed(params.toToken.decimals, 0)));\n }\n\n // Check if the output amount exceeds the slippage tolerance\n // If it exceeds, return an error message\n this.csl(\"TronWallet quoteOFT\", \"red-600\", \"result.outputAmount: %o\", result.outputAmount);\n this.csl(\"TronWallet quoteOFT\", \"red-600\", \"slippageTolerance: %o\", slippageTolerance + \"%\");\n this.csl(\"TronWallet quoteOFT\", \"red-600\", \"Minimum received amount: %o\", Big(amountWei).div(10 ** fromToken.decimals).times(Big(1).minus(Big(slippageTolerance || 0).div(100))).toFixed(6, 0));\n if (Big(result.outputAmount).lt(Big(amountWei).div(10 ** fromToken.decimals).times(Big(1).minus(Big(slippageTolerance || 0).div(100))))) {\n result.errMsg = \"Slippage limit exceeded\";\n return result;\n }\n\n if (isMultiHopComposer) {\n let multiHopExtraOptions = Options.newOptions().toHex();\n if (lzReceiveOptionValue) {\n multiHopExtraOptions = Options.newOptions().addExecutorLzReceiveOption(lzReceiveOptionGas, lzReceiveOptionValue).toHex();\n }\n\n const composeMsgSendParam = {\n dstEid,\n to: addressToBytes32(toToken.chainType, recipient),\n amountLD: sendParam[2],\n minAmountLD: sendParam[3],\n extraOptions: multiHopExtraOptions,\n composeMsg: \"0x\",\n oftCmd: \"0x\",\n };\n execTime.breakpoint();\n const hopMsgFee = await getHopMsgFee({\n sendParam: composeMsgSendParam,\n toToken,\n });\n execTime.log(\"getHopMsgFee\");\n\n sendParam[4] = Options.newOptions()\n .addExecutorComposeOption(0, originLayerzero.composeOptionGas || 800000, hopMsgFee)\n .toHex();\n const abiCoder = ethers.AbiCoder.defaultAbiCoder();\n sendParam[5] = abiCoder.encode(\n [\"tuple(uint32 dstEid, bytes32 to, uint256 amountLD, uint256 minAmountLD, bytes extraOptions, bytes composeMsg, bytes oftCmd)\"],\n [Object.values(composeMsgSendParam)]\n );\n }\n\n execTime.breakpoint();\n const mergedCalls = [\n oftContract.quoteSend(sendParam, payInLzToken).call(),\n ];\n if (approvalRequired) {\n mergedCalls.push(\n this.allowance({\n dry,\n contractAddress: fromToken.contractAddress,\n spender: originLayerzeroAddress,\n address: userAddress,\n amountWei,\n })\n );\n }\n const [msgFee, allowanceResult] = await Promise.all(mergedCalls);\n if (approvalRequired) {\n result.needApprove = allowanceResult.needApprove;\n }\n execTime.log(\"quoteSend & allowance\", \"allowanceResult: %o\", allowanceResult);\n\n let nativeMsgFee: BigInt = msgFee[0][\"nativeFee\"];\n this.csl(\"Tron quoteOFT\", \"red-600\", \"nativeFee: %o\", nativeMsgFee);\n if (nativeMsgFee) {\n nativeMsgFee = BigInt(Big(nativeMsgFee.toString()).times(Number(NATIVE_MSG_FEE_BUFFER) / 100).toFixed(0));\n }\n this.csl(\"Tron quoteOFT\", \"red-600\", \"nativeFee after buffer: %o\", nativeMsgFee);\n result.totalEstimateSourceGas = nativeMsgFee;\n\n this.csl(\"TronWallet quoteOFT\", \"teal-400\", \"MsgFee: %o\", msgFee);\n\n result.sendParam = {\n param: [\n // sendParam\n sendParam,\n // feeParam\n [\n // nativeFee\n nativeMsgFee.toString(),\n // lzTokenFee\n msgFee[0][\"lzTokenFee\"].toString(),\n ],\n // refundAddress\n refundTo,\n ],\n options: { callValue: nativeMsgFee.toString() },\n };\n\n // this.csl(\"TronWallet quoteOFT\", \"teal-400\", \"Params: %o\", result.sendParam);\n\n // 3. estimate gas\n const nativeFeeUsd = Big(nativeMsgFee?.toString() || 0).div(10 ** fromToken.nativeToken.decimals).times(getPrice(prices, fromToken.nativeToken.symbol));\n result.fees.nativeFee = numberRemoveEndZero(Big(nativeMsgFee?.toString() || 0).div(10 ** fromToken.nativeToken.decimals).toFixed(fromToken.nativeToken.decimals));\n result.fees.nativeFeeUsd = numberRemoveEndZero(Big(nativeFeeUsd).toFixed(20));\n result.fees.lzTokenFeeUsd = numberRemoveEndZero(Big(msgFee[0][\"lzTokenFee\"]?.toString() || 0).div(10 ** fromToken.decimals).toFixed(20));\n\n const transactionParams = [\n originLayerzeroAddress,\n \"send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)\",\n result.sendParam.options,\n [\n {\n type: \"tuple(uint32,bytes32,uint256,uint256,bytes,bytes,bytes)\",\n value: result.sendParam.param[0]\n },\n {\n type: \"tuple(uint256,uint256)\",\n value: result.sendParam.param[1]\n },\n {\n type: \"address\",\n value: result.sendParam.param[2]\n }\n ],\n this.tronWeb.defaultAddress.base58 || refundTo\n ];\n\n if (!dry) {\n execTime.breakpoint();\n const tx = await this.tronWeb.transactionBuilder.triggerSmartContract(...transactionParams);\n execTime.log(\"transactionBuilder.triggerSmartContract\");\n result.sendParam.tx = tx;\n }\n\n execTime.breakpoint();\n const ett = await this.estimateTransaction({\n dry,\n transactionParams,\n fromToken,\n prices,\n defaultEnergyUsed: 300000,\n defaultRawDataHexLength: 1000,\n });\n execTime.log(\"estimateTransaction\");\n result.fees.estimateGasUsd = ett.estimateSourceGasUsd;\n result.estimateSourceGas = ett.estimateSourceGas;\n result.totalEstimateSourceGas += ett.estimateSourceGas;\n result.estimateSourceGasUsd = ett.estimateSourceGasUsd;\n\n if (result.needApprove) {\n execTime.breakpoint();\n const estApproveGas = await this.estimateApprove({\n dry,\n amountWei,\n spender: result.approveSpender,\n fromToken,\n prices,\n });\n result.estimateApproveGas = estApproveGas.estimateSourceGas;\n execTime.log(\"estimateApprove\");\n }\n\n // calculate total fees\n for (const feeKey in result.fees) {\n if (excludeFees.includes(feeKey) || !/Usd$/.test(feeKey)) {\n continue;\n }\n result.totalFeesUsd = Big(result.totalFeesUsd || 0).plus(result.fees[feeKey] || 0);\n }\n result.totalFeesUsd = numberRemoveEndZero(Big(result.totalFeesUsd).toFixed(20));\n\n result.sendParam.transactionParams = transactionParams;\n\n execTime.log(\"quoteOFT\");\n\n return result;\n }\n\n async sendTransaction(params: any) {\n const {\n tx,\n } = params;\n\n const transaction = tx?.transaction;\n if (!transaction?.raw_data) {\n throw new Error(\"Invalid transaction\");\n }\n\n this.csl(\"Tron sendTransaction\", \"red-400\", \"transaction: %o\", transaction);\n\n const startTimestamp = Date.now();\n const expirationDuration = 5 * 60 * 1000;\n const expiration = startTimestamp + expirationDuration;\n let transactionWithExpiration = {\n ...transaction,\n raw_data: {\n ...transaction.raw_data,\n expiration,\n },\n };\n\n try {\n await this.waitForTronWeb();\n transactionWithExpiration = await this.tronWeb.transactionBuilder.newTxID(transactionWithExpiration, { txLocal: true });\n } catch (error) {\n console.warn(\"Failed to refresh transaction ID after extending expiration:\", error);\n }\n\n this.csl(\"Tron sendTransaction\", \"red-400\", \"override transaction: %o\", transactionWithExpiration);\n\n const result = await this.signAndSendTransaction(transactionWithExpiration);\n\n this.csl(\"Tron sendTransaction\", \"red-400\", \"Transaction sent with result: %o\", result);\n\n if (typeof result === \"object\") {\n const code = result.code ? String(result.code) : \"\";\n const message = result.message ? String(result.message) : \"\";\n const combined = `${code} ${message}`.toUpperCase();\n if (combined.includes(\"TRANSACTION_EXPIRATION_ERROR\")\n || combined.includes(\"TRANSACTION_EXPIRED\")\n || combined.includes(\"EXPIRED\")\n ) {\n throw new Error(\"Transaction expired. Try again.\");\n }\n }\n\n this.csl(\"Tron sendTransaction\", \"red-400\", \"success: %o\", result);\n\n if (typeof result === \"string\") {\n return result;\n }\n\n return result?.txid || result?.txID || transactionWithExpiration.txID;\n }\n\n /**\n * Unified quote method that routes to specific quote methods based on type\n * @param type Service type from Service\n * @param params Parameters for the quote\n */\n async quote(type: Service, params: any) {\n switch (type) {\n case Service.Usdt0:\n return await this.quoteOFT(params);\n case Service.OneClick:\n return await this.quoteOneClickProxy(params);\n default:\n throw new Error(`Unsupported quote type: ${type}`);\n }\n }\n\n /**\n * Unified send method that routes to specific send methods based on type\n * @param type Send type from SendType enum\n * @param params Parameters for the send transaction\n */\n async send(type: SendType, params: any) {\n switch (type) {\n case SendType.SEND:\n return await this.sendTransaction(params);\n case SendType.TRANSFER:\n return await this.transfer(params);\n default:\n throw new Error(`Unsupported send type: ${type}`);\n }\n }\n\n async quoteOneClickProxy(params: any) {\n const {\n dry,\n proxyAddress,\n abi,\n fromToken,\n refundTo,\n depositAddress,\n amountWei,\n prices,\n } = params;\n\n const result: any = { fees: {} };\n\n const execTime = new ExecTime({ type: \"Oneclick Tron\", logStyle: \"indigo-400\", isDebug: OpenAPI.DEBUG });\n await this.waitForTronWeb();\n execTime.log(\"waitForTronWeb\");\n const userAddress = refundTo || this.tronWeb.defaultAddress.base58;\n\n execTime.breakpoint();\n const allowance = await this.allowance({\n dry,\n contractAddress: fromToken.contractAddress,\n address: userAddress,\n spender: proxyAddress,\n amountWei: amountWei,\n });\n result.needApprove = allowance.needApprove;\n result.approveSpender = proxyAddress;\n execTime.log(\"allowance\");\n\n const proxyParam: any = [\n // tokenAddress\n fromToken.contractAddress,\n // recipient\n depositAddress,\n // amount\n amountWei,\n ];\n result.sendParam = {\n param: proxyParam,\n };\n\n const transactionParams = [\n proxyAddress,\n \"proxyTransfer(address,address,uint256)\",\n {},\n [\n {\n type: \"address\",\n value: result.sendParam.param[0] // tokenAddress\n },\n {\n type: \"address\",\n value: result.sendParam.param[1] // recipient\n },\n {\n type: \"uint256\",\n value: result.sendParam.param[2] // amount\n }\n ],\n this.tronWeb.defaultAddress.base58 || refundTo\n ];\n\n execTime.breakpoint();\n const tx = await this.tronWeb.transactionBuilder.triggerSmartContract(...transactionParams);\n execTime.log(\"transactionBuilder.triggerSmartContract\");\n result.sendParam.tx = tx;\n\n execTime.breakpoint();\n const ett = await this.estimateTransaction({\n dry,\n transactionParams,\n fromToken,\n prices,\n defaultEnergyUsed: 200000,\n defaultRawDataHexLength: 500,\n });\n execTime.log(\"estimateTransaction\");\n result.fees.estimateGasUsd = ett.estimateSourceGasUsd;\n result.estimateSourceGas = ett.estimateSourceGas;\n result.totalEstimateSourceGas = ett.estimateSourceGas;\n result.estimateSourceGasUsd = ett.estimateSourceGasUsd;\n\n if (result.needApprove) {\n execTime.breakpoint();\n const estApproveGas = await this.estimateApprove({\n dry,\n amountWei,\n spender: result.approveSpender,\n fromToken,\n prices,\n });\n result.estimateApproveGas = estApproveGas.estimateSourceGas;\n execTime.log(\"estimateApprove\");\n }\n\n result.sendParam.transactionParams = transactionParams;\n\n execTime.logTotal(\"quoteOneClickPorxy\");\n\n return result;\n }\n\n async getAccountResources(params: any) {\n const { account } = params;\n\n const result: any = {\n energy: 0,\n bandwidth: 0,\n success: false,\n error: \"TronWeb is not initialized or the wallet is not connected\",\n };\n\n await this.waitForTronWeb();\n\n if (!this.tronWeb || !account) {\n return result;\n }\n\n try {\n let availableEnergy;\n let availableBandwidth;\n\n try {\n if (this.tronWeb.trx.getAccountResources) {\n const resources: any = await this.tronWeb.trx.getAccountResources(account);\n this.csl(\"TronWallet getAccountResources\", \"teal-400\", \"resources: %o\", resources);\n if (resources) {\n // Get available energy (EnergyLimit - EnergyUsed)\n availableEnergy = (resources.EnergyLimit || 0) - (resources.EnergyUsed || 0);\n // Get available bandwidth (NetLimit - NetUsed)\n availableBandwidth = (resources.freeNetLimit || 0) - (resources.freeNetUsed || 0);\n }\n }\n } catch (resourcesErr) {\n console.warn(\"getAccountResources API is not available, try other way:\", resourcesErr);\n }\n\n if (availableEnergy === void 0 && availableBandwidth === void 0) {\n const accountInfo: any = await this.tronWeb.trx.getAccount(account);\n\n if (accountInfo.account_resource) {\n const accountResource = accountInfo.account_resource;\n availableEnergy = (accountResource.EnergyLimit || 0) - (accountResource.EnergyUsed || 0);\n availableBandwidth = (accountResource.NetLimit || 0) - (accountResource.NetUsed || 0);\n } else if (accountInfo.energy !== undefined) {\n availableEnergy = accountInfo.energy || 0;\n }\n\n // Try to get bandwidth information\n if (accountInfo.bandwidth !== undefined) {\n if (typeof accountInfo.bandwidth === \"number\") {\n availableBandwidth = accountInfo.bandwidth;\n } else if (accountInfo.bandwidth) {\n availableBandwidth = accountInfo.bandwidth.available || accountInfo.bandwidth.freeNetUsage || 0;\n }\n }\n }\n\n result.energy = Math.max(0, availableEnergy);\n result.bandwidth = Math.max(0, availableBandwidth);\n result.success = true;\n result.error = null;\n } catch (error) {\n console.error(\"Failed to get account resources:\", error);\n }\n\n return result;\n }\n}\n\nexport { TronWallet };\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/tron.ts"],"names":["DefaultAddresses","TronWeb","getChainRpcUrl","Csl","OpenAPI","Big","numberRemoveEndZero","getPrice","DATA_HEX_PROTOBUF_EXTRA","SIGNATURE_SIZE","ExecTime","getDestinationAssociatedTokenAddress","LZ_RECEIVE_VALUE","addressToBytes32","USDT0_LEGACY_MESH_TRANSFTER_FEE","getHopMsgFee","ethers","NATIVE_MSG_FEE_BUFFER","Service","SendType"],"mappings":"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","file":"index.js","sourcesContent":["import {\n numberRemoveEndZero,\n getPrice,\n SendType,\n Service,\n DefaultAddresses,\n getChainRpcUrl,\n Csl,\n OpenAPI,\n ExecTime,\n} from '@stableflow/core';\nimport {\n addressToBytes32,\n getHopMsgFee,\n DATA_HEX_PROTOBUF_EXTRA,\n LZ_RECEIVE_VALUE,\n SIGNATURE_SIZE,\n USDT0_LEGACY_MESH_TRANSFTER_FEE,\n} from '@stableflow/bridges';\nimport { NATIVE_MSG_FEE_BUFFER } from '@stableflow/utils-evm';\nimport { getDestinationAssociatedTokenAddress } from '@stableflow/utils-solana';\nimport { Options } from \"@layerzerolabs/lz-v2-utilities\";\nimport { ethers } from \"ethers\";\nimport Big from \"big.js\";\nimport { TronWeb } from \"tronweb\";\n\nconst DefaultTronWalletAddress = DefaultAddresses[\"tron\"];\nconst getCustomTronWeb = () => {\n return new TronWeb({\n fullHost: getChainRpcUrl(\"tron\").rpcUrl,\n headers: {},\n privateKey: \"\",\n });\n};\n\nexport default class TronWallet {\n private signAndSendTransaction: any;\n private address: string;\n private tronWeb: any;\n private csl;\n\n constructor(options: any) {\n this.signAndSendTransaction = options.signAndSendTransaction;\n this.address = options.address;\n\n const customTronWeb = getCustomTronWeb();\n customTronWeb.setAddress(this.address || DefaultTronWalletAddress);\n this.tronWeb = customTronWeb;\n\n const cs = new Csl(OpenAPI.DEBUG);\n this.csl = cs.log;\n }\n\n async waitForTronWeb() {\n return new Promise((resolve) => {\n if (this.tronWeb) {\n const address = this.tronWeb.defaultAddress.base58 || DefaultTronWalletAddress;\n const customTronWeb = getCustomTronWeb();\n customTronWeb.setAddress(address);\n this.tronWeb = customTronWeb;\n resolve(this.tronWeb);\n return;\n }\n\n const checkTronWeb = () => {\n if ((window as any).tronWeb) {\n this.tronWeb = (window as any).tronWeb;\n const address = this.tronWeb.defaultAddress.base58 || DefaultTronWalletAddress;\n const customTronWeb = getCustomTronWeb();\n customTronWeb.setAddress(address);\n this.tronWeb = customTronWeb;\n resolve(this.tronWeb);\n } else {\n setTimeout(checkTronWeb, 100);\n }\n };\n\n checkTronWeb();\n\n setTimeout(() => {\n const customTronWeb = getCustomTronWeb();\n customTronWeb.setAddress(DefaultTronWalletAddress);\n this.tronWeb = customTronWeb;\n resolve(this.tronWeb);\n this.csl(\"TronWallet waitForTronWeb\", \"red-500\", \"TronWeb initialization timeout\");\n }, 10000);\n });\n }\n\n async transfer(data: {\n originAsset: string;\n depositAddress: string;\n amount: string;\n }) {\n const { originAsset, depositAddress, amount } = data;\n\n await this.waitForTronWeb();\n\n if (originAsset === \"TRX\" || originAsset === \"trx\") {\n return await this.transferTRX(depositAddress, amount);\n }\n\n // Transfer TRC20 token (USDT, USDC, etc.)\n return await this.transferToken(originAsset, depositAddress, amount);\n }\n\n async transferTRX(to: string, amount: string) {\n await this.waitForTronWeb();\n\n const transaction = await this.tronWeb.transactionBuilder.sendTrx(\n to,\n this.tronWeb.toSun(amount)\n );\n\n return this.sendTransaction({ tx: { transaction } });\n }\n\n async transferToken(contractAddress: string, to: string, amount: string) {\n await this.waitForTronWeb();\n\n const functionSelector = 'transfer(address,uint256)';\n const parameter = [{ type: 'address', value: to }, { type: 'uint256', value: amount }];\n const tx = await this.tronWeb.transactionBuilder.triggerSmartContract(contractAddress, functionSelector, {}, parameter);\n\n return this.sendTransaction({ tx });\n\n // // Get contract instance\n // const contract = await this.tronWeb.contract().at(contractAddress);\n\n // // Call transfer function\n // const transaction = await contract.transfer(to, amount).send({\n // feeLimit: 100_000_000\n // });\n\n // return transaction;\n }\n\n async getBalance(token: any, account: string, options?: { isCatchError?: boolean; }) {\n await this.waitForTronWeb();\n\n if (token.symbol === \"TRX\" || token.symbol === \"trx\" || token.symbol === \"native\") {\n return await this.getTRXBalance(account, options);\n }\n\n return await this.getTokenBalance(token.contractAddress, account, options);\n }\n\n async getTRXBalance(account: string, options?: { isCatchError?: boolean; }) {\n const { isCatchError = false } = options || {};\n\n await this.waitForTronWeb();\n\n try {\n const balance = await this.tronWeb.trx.getBalance(account);\n return balance.toString();\n } catch (error) {\n this.csl(\"Tron getTRXBalance\", \"red-500\", \"Get TRX balance failed: %o\", error);\n if (isCatchError) {\n throw error;\n }\n return \"0\";\n }\n }\n\n async getTokenBalance(contractAddress: string, account: string, options?: { isCatchError?: boolean; }) {\n const { isCatchError = false } = options || {};\n\n await this.waitForTronWeb();\n\n try {\n const contract = await this.tronWeb.contract().at(contractAddress);\n const balance = await contract.balanceOf(account).call();\n\n // Convert from smallest unit to token unit (assuming 6 decimals)\n return balance.toString();\n } catch (error) {\n this.csl(\"Tron getTokenBalance\", \"red-500\", \"Get token balance failed: %o\", error);\n if (isCatchError) {\n throw error;\n }\n return \"0\";\n }\n }\n\n async balanceOf(token: any, account: string, options?: { isCatchError?: boolean; }) {\n return await this.getBalance(token, account, options);\n }\n\n /**\n * Estimate gas limit for transfer transaction\n * @param data Transfer data\n * @returns Gas limit estimate (bandwidth or energy), gas price, and estimated gas cost\n */\n async estimateTransferGas(data: {\n fromToken: any;\n depositAddress: string;\n amount: string;\n }): Promise<{\n gasLimit: bigint;\n gasPrice: bigint;\n estimateGas: bigint;\n }> {\n const { fromToken } = data;\n const originAsset = fromToken.contractAddress;\n\n // Tron uses bandwidth for TRX transfers and energy for smart contract calls\n // TRX transfer: ~268 bandwidth\n // TRC20 transfer: ~30000 energy (estimated)\n let gasLimit: bigint;\n\n if (originAsset === \"TRX\" || originAsset === \"trx\") {\n // TRX transfer uses bandwidth (typically 268)\n gasLimit = 268n;\n } else {\n // TRC20 token transfer uses energy (typically 30000-35000)\n gasLimit = 30000n;\n }\n\n // Increase by 20% to provide buffer\n gasLimit = (gasLimit * 120n) / 100n;\n\n // Get current energy price from Tron (in sun)\n // For bandwidth, it's free if you have bandwidth\n // For energy, the price varies, typically 420 sun per energy unit\n let gasPrice: bigint = 100n;\n // try {\n // const chainParameters = await this.tronWeb.trx.getChainParameters();\n // const energyPrice = chainParameters?.find((p: any) => p.key === \"getEnergyFee\")?.value || 420;\n // gasPrice = BigInt(energyPrice);\n // } catch (error) {\n // // Default energy price: 420 sun per energy unit\n // gasPrice = 420n;\n // }\n\n // Calculate estimated gas cost: gasLimit * gasPrice\n const estimateGas = gasLimit * gasPrice;\n\n return {\n gasLimit,\n gasPrice,\n estimateGas\n };\n }\n\n async getEstimateGas(params: any) {\n const { gasLimit, price, nativeToken } = params;\n\n const energyPrice = BigInt(100);\n const estimateGas = Big(gasLimit.toString()).times(energyPrice.toString());\n const estimateGasAmount = Big(estimateGas).div(10 ** nativeToken.decimals);\n const estimateGasUsd = Big(estimateGasAmount).times(price || 1);\n\n return {\n gasPrice: energyPrice,\n usd: numberRemoveEndZero(Big(estimateGasUsd).toFixed(20)),\n wei: BigInt(estimateGas.toFixed(0)),\n amount: numberRemoveEndZero(Big(estimateGasAmount).toFixed(nativeToken.decimals)),\n };\n }\n\n async estimateTransaction(params: any) {\n const {\n dry,\n transactionParams,\n fromToken,\n prices,\n defaultEnergyUsed,\n defaultRawDataHexLength,\n buffer,\n } = params;\n\n const nativeTokenPrice = getPrice(prices, fromToken.nativeToken.symbol);\n\n let energyUsed = defaultEnergyUsed || 200000;\n let rawDataHexLength = defaultRawDataHexLength || 1000;\n try {\n const transaction = await this.tronWeb.transactionBuilder.triggerConstantContract(...transactionParams);\n energyUsed = transaction.energy_used || 200000;\n rawDataHexLength = transaction.transaction.raw_data_hex.length || 1000;\n } catch (error) {\n this.csl(\"Usdt0 Tron\", \"red-500\", \"estimateTransaction triggerConstantContract error: %o, action: %o\", error, transactionParams?.[1]);\n }\n const bandwidthAmount = Big(Big(rawDataHexLength).div(2).plus(DATA_HEX_PROTOBUF_EXTRA).plus(SIGNATURE_SIZE)).times(1e-3);\n const bandwidthUsed = Big(bandwidthAmount).div(1e2).times(10 ** fromToken.nativeToken.decimals);\n let totalUsed = Big(energyUsed).plus(bandwidthUsed);\n\n if (buffer) {\n totalUsed = Big(totalUsed).times(Big(1).plus(buffer));\n }\n\n const { usd, wei } = await this.getEstimateGas({\n gasLimit: totalUsed.toFixed(0),\n price: nativeTokenPrice,\n nativeToken: fromToken.nativeToken,\n });\n\n const result = {\n estimateSourceGasLimit: energyUsed,\n estimateSourceGas: wei,\n estimateSourceGasUsd: usd,\n };\n\n return result;\n }\n\n async estimateApprove(params: any) {\n const {\n dry,\n spender,\n amountWei,\n fromToken,\n prices,\n } = params;\n\n const approveParams = [\n fromToken.contractAddress,\n \"approve(address,uint256)\",\n {},\n [\n { type: \"address\", value: spender },\n { type: \"uint256\", value: amountWei }\n ]\n ];\n return this.estimateTransaction({\n dry,\n transactionParams: approveParams,\n fromToken,\n prices,\n defaultEnergyUsed: 100000,\n defaultRawDataHexLength: 500,\n // +10%\n buffer: 0.1,\n });\n }\n\n async pollingTransactionStatus(txHash: string, options?: {\n maxPolls?: number;\n pollInterval?: number;\n isTRX?: boolean;\n }) {\n await this.waitForTronWeb();\n\n const { maxPolls = 60, pollInterval = 2000, isTRX } = options || {};\n let pollCount = 0;\n\n return new Promise((resolve) => {\n const poll = async () => {\n pollCount++;\n this.csl(\"TronWallet pollingTransactionStatus\", \"teal-400\", \"polling transaction status (%s), %d times\", txHash, pollCount);\n\n try {\n const txInfo = await this.tronWeb.trx.getTransactionInfo(txHash);\n this.csl(\"TronWallet pollingTransactionStatus\", \"teal-400\", \"transaction info (%s): %o\", txHash, txInfo);\n\n // if the transaction info exists and has receipt, the transaction has been on-chain\n if (txInfo && txInfo.receipt) {\n if (isTRX) {\n resolve(true);\n return;\n }\n\n const result = txInfo.receipt.result;\n\n if (result === \"SUCCESS\") {\n this.csl(\"TronWallet pollingTransactionStatus\", \"teal-400\", \"transaction success (%s)\", txHash);\n resolve(true);\n return;\n } else if (result === \"FAILED\" || result === \"REVERT\") {\n this.csl(\"TronWallet pollingTransactionStatus\", \"red-500\", \"transaction failed (%s), result: %s\", txHash, result);\n resolve(false);\n return;\n } else {\n // other status, continue polling\n this.csl(\"TronWallet pollingTransactionStatus\", \"teal-400\", \"unknown transaction status (%s), result: %s, continue polling...\", txHash, result);\n }\n } else {\n // transaction info exists but no receipt, maybe still being packed, continue polling\n this.csl(\"TronWallet pollingTransactionStatus\", \"teal-400\", \"transaction not confirmed (%s), continue polling...\", txHash);\n }\n } catch (error: any) {\n // if the transaction does not exist (maybe still being packed), continue polling\n // common error messages include \"not found\" or \"does not exist\"\n const errorMessage = error?.message || String(error);\n if (\n errorMessage.includes(\"not found\") ||\n errorMessage.includes(\"does not exist\") ||\n errorMessage.includes(\"not exist\")\n ) {\n this.csl(\"TronWallet pollingTransactionStatus\", \"teal-400\", \"transaction not on-chain (%s), continue polling...\", txHash);\n } else {\n // other error, log but continue polling\n console.warn(`query transaction status error (${txHash}): %o`, errorMessage);\n }\n }\n\n // check if the maximum polling times is reached\n if (pollCount >= maxPolls) {\n console.error(`polling timeout (${txHash}), maximum polling times reached: ${maxPolls}`);\n resolve(false);\n return;\n }\n\n // continue polling\n setTimeout(poll, pollInterval);\n };\n\n // start polling\n poll();\n });\n }\n\n async checkTransactionStatus(txHash: string) {\n await this.waitForTronWeb();\n\n try {\n const txInfo = await this.tronWeb.trx.getTransactionInfo(txHash);\n\n if (txInfo && txInfo.receipt) {\n return txInfo.receipt.result === \"SUCCESS\";\n }\n\n return false;\n } catch (error) {\n return false;\n }\n }\n\n async getTransactionResult(txHash: string) {\n await this.waitForTronWeb();\n\n try {\n const txInfo = await this.tronWeb.trx.getTransactionInfo(txHash);\n return txInfo;\n } catch (error) {\n return {};\n }\n }\n\n async allowance(params: any) {\n const {\n dry,\n contractAddress,\n spender,\n address,\n amountWei,\n strict = false,\n } = params;\n\n // Get contract instance\n const contract = await this.tronWeb.contract().at(contractAddress);\n\n if (dry) {\n return {\n contract,\n allowance: \"0\",\n needApprove: false,\n };\n }\n\n await this.waitForTronWeb();\n\n try {\n // Get allowance\n let allowance = \"0\";\n try {\n const allowanceResult = await contract.allowance(address, spender).call();\n allowance = allowanceResult.toString();\n } catch (error) {\n this.csl(\"TronWallet allowance\", \"red-500\", \"Error getting allowance: %o\", error);\n if (strict) {\n throw error;\n }\n }\n\n return {\n contract,\n allowance,\n needApprove: Big(amountWei || 0).gt(allowance || 0),\n };\n } catch (error) {\n this.csl(\"TronWallet allowance\", \"red-500\", \"Error in allowance: %o\", error);\n if (strict) {\n throw error;\n }\n // Return default values on error\n return {\n contract: null,\n allowance: \"0\",\n needApprove: true,\n };\n }\n }\n\n async approve(params: any) {\n const {\n contractAddress,\n spender,\n amountWei,\n isApproveMax = false,\n isDetails = false,\n isWaitTxReceipt = true,\n } = params;\n\n await this.waitForTronWeb();\n\n const detailResult: any = {\n success: false,\n data: {},\n message: null,\n };\n\n try {\n // Determine approval amount\n let _amountWei = amountWei;\n if (isApproveMax) {\n // Max uint256 value: 2^256 - 1\n _amountWei = \"115792089237316195423570985008687907853269984665640564039457584007913129639935\";\n }\n\n // Build approve transaction using triggerSmartContract\n const functionSelector = 'approve(address,uint256)';\n const parameter = [\n { type: 'address', value: spender },\n { type: 'uint256', value: _amountWei }\n ];\n const tx = await this.tronWeb.transactionBuilder.triggerSmartContract(\n contractAddress,\n functionSelector,\n {},\n parameter\n );\n\n // Sign and send transaction\n const txHash = await this.sendTransaction({ tx });\n let txInfo: Record<string, unknown> | null = null;\n\n if (isWaitTxReceipt) {\n const pollingResult = await this.pollingTransactionStatus(txHash, {\n maxPolls: 120,\n pollInterval: 2000,\n });\n if (!pollingResult) {\n this.csl(\"TronWallet approve\", \"red-500\", \"Failed polling approve transaction status\");\n if (isDetails) {\n detailResult.message = \"Failed to get approve result\";\n return detailResult;\n }\n return false;\n }\n txInfo = await this.getTransactionResult(txHash);\n }\n\n if (isDetails) {\n const txReceipt = txInfo?.receipt as { result?: string } | undefined;\n detailResult.success = true;\n detailResult.data = {\n txHash,\n txInfo,\n receiptResult: txReceipt?.result,\n blockNumber: txInfo?.blockNumber,\n blockTimeStamp: txInfo?.blockTimeStamp,\n };\n return detailResult;\n }\n\n return txHash;\n } catch (error: any) {\n this.csl(\"TronWallet approve\", \"red-500\", \"Error approve: %o\", error);\n if (isDetails) {\n detailResult.message = error.message;\n return detailResult;\n }\n return false;\n }\n }\n\n toBytes32(addr: string): string {\n const hex = this.tronWeb.address.toHex(addr).slice(2);\n return \"0x\" + hex.padStart(64, \"0\");\n }\n\n async quoteOFT(params: any) {\n const {\n dry,\n abi,\n dstEid,\n recipient,\n amountWei,\n slippageTolerance,\n payInLzToken,\n fromToken,\n toToken,\n prices,\n originLayerzeroAddress,\n destinationLayerzeroAddress,\n excludeFees,\n refundTo,\n multiHopComposer,\n isMultiHopComposer,\n isOriginLegacy,\n isDestinationLegacy,\n originLayerzero,\n destinationLayerzero,\n } = params;\n\n const { Options } = await import(\"@layerzerolabs/lz-v2-utilities\");\n\n const result: any = {\n needApprove: false,\n approveSpender: originLayerzeroAddress,\n sendParam: void 0,\n quoteParam: {\n ...params,\n originLayerzeroAddress: originLayerzeroAddress,\n destinationLayerzeroAddress: destinationLayerzeroAddress,\n },\n fees: {},\n totalFeesUsd: void 0,\n estimateSourceGas: void 0,\n totalEstimateSourceGas: 0n,\n estimateSourceGasUsd: void 0,\n estimateTime: 0, // seconds - dynamically calculated using LayerZero formula\n outputAmount: numberRemoveEndZero(Big(amountWei || 0).div(10 ** params.fromToken.decimals).toFixed(params.fromToken.decimals, 0)),\n };\n\n const execTime = new ExecTime({ type: \"USDT0 Tron\", logStyle: \"indigo-300\", isDebug: OpenAPI.DEBUG });\n await this.waitForTronWeb();\n execTime.log(\"waitForTronWeb\");\n\n execTime.breakpoint();\n const oftContract = await this.tronWeb.contract(abi, originLayerzeroAddress);\n execTime.log(\"tronWeb.contract originLayerzeroAddress\");\n\n execTime.breakpoint();\n const userAddress = refundTo || this.tronWeb.defaultAddress.base58;\n const approvalRequired = isOriginLegacy ? originLayerzero.oftLegacyApprovalRequired : originLayerzero.oftApprovalRequired;\n execTime.log(\"approvalRequired\");\n\n const lzReceiveOptionGas = isDestinationLegacy ? destinationLayerzero.lzReceiveOptionGasLegacy : destinationLayerzero.lzReceiveOptionGas;\n let lzReceiveOptionValue = 0;\n\n execTime.breakpoint();\n const destATA = await getDestinationAssociatedTokenAddress({\n recipient,\n toToken,\n });\n execTime.log(\"getDestinationAssociatedTokenAddress\");\n if (destATA.needCreateTokenAccount) {\n lzReceiveOptionValue = LZ_RECEIVE_VALUE[toToken.chainName] || 0;\n }\n\n let unMultiHopExtraOptions = Options.newOptions().toHex();\n if (!isMultiHopComposer && lzReceiveOptionValue) {\n unMultiHopExtraOptions = Options.newOptions().addExecutorLzReceiveOption(lzReceiveOptionGas, lzReceiveOptionValue).toHex();\n }\n\n // 2. quote send\n const sendParam: any = [\n // dstEid\n dstEid,\n // to\n // \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n addressToBytes32(toToken.chainType, recipient),\n // amountLD\n amountWei,\n // minAmountLD\n \"0\",\n // extraOptions\n unMultiHopExtraOptions,\n // composeMsg\n \"0x\",\n // oftCmd\n \"0x\",\n ];\n\n if (isMultiHopComposer) {\n // multiHopComposer: Arbitrum legacy mesh MultiHopComposer, eid = 30110\n sendParam[0] = multiHopComposer.eid; // dstEid\n sendParam[1] = addressToBytes32(\"evm\", multiHopComposer.oftMultiHopComposer); // to\n }\n\n // 0.03% fee for Legacy Mesh transfers only (native USDT0 transfers are free)\n if (isOriginLegacy || isDestinationLegacy) {\n result.fees.legacyMeshFeeUsd = numberRemoveEndZero(Big(amountWei || 0).div(10 ** fromToken.decimals).times(USDT0_LEGACY_MESH_TRANSFTER_FEE).toFixed(fromToken.decimals));\n result.outputAmount = numberRemoveEndZero(Big(Big(amountWei || 0).div(10 ** params.fromToken.decimals)).minus(result.fees.legacyMeshFeeUsd || 0).toFixed(params.fromToken.decimals, 0));\n }\n\n if (!dry) {\n execTime.breakpoint();\n const oftData = await oftContract.quoteOFT(sendParam).call();\n execTime.log(\"quoteOFT\");\n const [, , oftReceipt] = oftData;\n // The slippage is calculated based on the user-defined value and the user-input amount\n sendParam[3] = Big(amountWei).times(Big(1).minus(Big(slippageTolerance || 0).div(100))).toFixed(0);\n // The actual received amount is based on the contract return value\n result.outputAmount = numberRemoveEndZero(Big(oftReceipt[1].toString()).div(10 ** params.toToken.decimals).toFixed(params.toToken.decimals, 0));\n }\n\n // Check if the output amount exceeds the slippage tolerance\n // If it exceeds, return an error message\n this.csl(\"TronWallet quoteOFT\", \"red-600\", \"result.outputAmount: %o\", result.outputAmount);\n this.csl(\"TronWallet quoteOFT\", \"red-600\", \"slippageTolerance: %o\", slippageTolerance + \"%\");\n this.csl(\"TronWallet quoteOFT\", \"red-600\", \"Minimum received amount: %o\", Big(amountWei).div(10 ** fromToken.decimals).times(Big(1).minus(Big(slippageTolerance || 0).div(100))).toFixed(6, 0));\n if (Big(result.outputAmount).lt(Big(amountWei).div(10 ** fromToken.decimals).times(Big(1).minus(Big(slippageTolerance || 0).div(100))))) {\n result.errMsg = \"Slippage limit exceeded\";\n return result;\n }\n\n if (isMultiHopComposer) {\n let multiHopExtraOptions = Options.newOptions().toHex();\n if (lzReceiveOptionValue) {\n multiHopExtraOptions = Options.newOptions().addExecutorLzReceiveOption(lzReceiveOptionGas, lzReceiveOptionValue).toHex();\n }\n\n const composeMsgSendParam = {\n dstEid,\n to: addressToBytes32(toToken.chainType, recipient),\n amountLD: sendParam[2],\n minAmountLD: sendParam[3],\n extraOptions: multiHopExtraOptions,\n composeMsg: \"0x\",\n oftCmd: \"0x\",\n };\n execTime.breakpoint();\n const hopMsgFee = await getHopMsgFee({\n sendParam: composeMsgSendParam,\n toToken,\n });\n execTime.log(\"getHopMsgFee\");\n\n sendParam[4] = Options.newOptions()\n .addExecutorComposeOption(0, originLayerzero.composeOptionGas || 800000, hopMsgFee)\n .toHex();\n const abiCoder = ethers.AbiCoder.defaultAbiCoder();\n sendParam[5] = abiCoder.encode(\n [\"tuple(uint32 dstEid, bytes32 to, uint256 amountLD, uint256 minAmountLD, bytes extraOptions, bytes composeMsg, bytes oftCmd)\"],\n [Object.values(composeMsgSendParam)]\n );\n }\n\n execTime.breakpoint();\n const mergedCalls = [\n oftContract.quoteSend(sendParam, payInLzToken).call(),\n ];\n if (approvalRequired) {\n mergedCalls.push(\n this.allowance({\n dry,\n contractAddress: fromToken.contractAddress,\n spender: originLayerzeroAddress,\n address: userAddress,\n amountWei,\n })\n );\n }\n const [msgFee, allowanceResult] = await Promise.all(mergedCalls);\n if (approvalRequired) {\n result.needApprove = allowanceResult.needApprove;\n }\n execTime.log(\"quoteSend & allowance\", \"allowanceResult: %o\", allowanceResult);\n\n let nativeMsgFee: BigInt = msgFee[0][\"nativeFee\"];\n this.csl(\"Tron quoteOFT\", \"red-600\", \"nativeFee: %o\", nativeMsgFee);\n if (nativeMsgFee) {\n nativeMsgFee = BigInt(Big(nativeMsgFee.toString()).times(Number(NATIVE_MSG_FEE_BUFFER) / 100).toFixed(0));\n }\n this.csl(\"Tron quoteOFT\", \"red-600\", \"nativeFee after buffer: %o\", nativeMsgFee);\n result.totalEstimateSourceGas = nativeMsgFee;\n\n this.csl(\"TronWallet quoteOFT\", \"teal-400\", \"MsgFee: %o\", msgFee);\n\n result.sendParam = {\n param: [\n // sendParam\n sendParam,\n // feeParam\n [\n // nativeFee\n nativeMsgFee.toString(),\n // lzTokenFee\n msgFee[0][\"lzTokenFee\"].toString(),\n ],\n // refundAddress\n refundTo,\n ],\n options: { callValue: nativeMsgFee.toString() },\n };\n\n // this.csl(\"TronWallet quoteOFT\", \"teal-400\", \"Params: %o\", result.sendParam);\n\n // 3. estimate gas\n const nativeFeeUsd = Big(nativeMsgFee?.toString() || 0).div(10 ** fromToken.nativeToken.decimals).times(getPrice(prices, fromToken.nativeToken.symbol));\n result.fees.nativeFee = numberRemoveEndZero(Big(nativeMsgFee?.toString() || 0).div(10 ** fromToken.nativeToken.decimals).toFixed(fromToken.nativeToken.decimals));\n result.fees.nativeFeeUsd = numberRemoveEndZero(Big(nativeFeeUsd).toFixed(20));\n result.fees.lzTokenFeeUsd = numberRemoveEndZero(Big(msgFee[0][\"lzTokenFee\"]?.toString() || 0).div(10 ** fromToken.decimals).toFixed(20));\n\n const transactionParams = [\n originLayerzeroAddress,\n \"send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)\",\n result.sendParam.options,\n [\n {\n type: \"tuple(uint32,bytes32,uint256,uint256,bytes,bytes,bytes)\",\n value: result.sendParam.param[0]\n },\n {\n type: \"tuple(uint256,uint256)\",\n value: result.sendParam.param[1]\n },\n {\n type: \"address\",\n value: result.sendParam.param[2]\n }\n ],\n this.tronWeb.defaultAddress.base58 || refundTo\n ];\n\n if (!dry) {\n execTime.breakpoint();\n const tx = await this.tronWeb.transactionBuilder.triggerSmartContract(...transactionParams);\n execTime.log(\"transactionBuilder.triggerSmartContract\");\n result.sendParam.tx = tx;\n }\n\n execTime.breakpoint();\n const ett = await this.estimateTransaction({\n dry,\n transactionParams,\n fromToken,\n prices,\n defaultEnergyUsed: 300000,\n defaultRawDataHexLength: 1000,\n });\n execTime.log(\"estimateTransaction\");\n result.fees.estimateGasUsd = ett.estimateSourceGasUsd;\n result.estimateSourceGas = ett.estimateSourceGas;\n result.totalEstimateSourceGas += ett.estimateSourceGas;\n result.estimateSourceGasUsd = ett.estimateSourceGasUsd;\n\n if (result.needApprove) {\n execTime.breakpoint();\n const estApproveGas = await this.estimateApprove({\n dry,\n amountWei,\n spender: result.approveSpender,\n fromToken,\n prices,\n });\n result.estimateApproveGas = estApproveGas.estimateSourceGas;\n execTime.log(\"estimateApprove\");\n }\n\n // calculate total fees\n for (const feeKey in result.fees) {\n if (excludeFees.includes(feeKey) || !/Usd$/.test(feeKey)) {\n continue;\n }\n result.totalFeesUsd = Big(result.totalFeesUsd || 0).plus(result.fees[feeKey] || 0);\n }\n result.totalFeesUsd = numberRemoveEndZero(Big(result.totalFeesUsd).toFixed(20));\n\n result.sendParam.transactionParams = transactionParams;\n\n execTime.log(\"quoteOFT\");\n\n return result;\n }\n\n async sendTransaction(params: any) {\n const {\n tx,\n } = params;\n\n const transaction = tx?.transaction;\n if (!transaction?.raw_data) {\n throw new Error(\"Invalid transaction\");\n }\n\n this.csl(\"Tron sendTransaction\", \"red-400\", \"transaction: %o\", transaction);\n\n const startTimestamp = Date.now();\n const expirationDuration = 5 * 60 * 1000;\n const expiration = startTimestamp + expirationDuration;\n let transactionWithExpiration = {\n ...transaction,\n raw_data: {\n ...transaction.raw_data,\n expiration,\n },\n };\n\n try {\n await this.waitForTronWeb();\n transactionWithExpiration = await this.tronWeb.transactionBuilder.newTxID(transactionWithExpiration, { txLocal: true });\n } catch (error) {\n console.warn(\"Failed to refresh transaction ID after extending expiration:\", error);\n }\n\n this.csl(\"Tron sendTransaction\", \"red-400\", \"override transaction: %o\", transactionWithExpiration);\n\n const result = await this.signAndSendTransaction(transactionWithExpiration);\n\n this.csl(\"Tron sendTransaction\", \"red-400\", \"Transaction sent with result: %o\", result);\n\n if (typeof result === \"object\") {\n const code = result.code ? String(result.code) : \"\";\n const message = result.message ? String(result.message) : \"\";\n const combined = `${code} ${message}`.toUpperCase();\n if (combined.includes(\"TRANSACTION_EXPIRATION_ERROR\")\n || combined.includes(\"TRANSACTION_EXPIRED\")\n || combined.includes(\"EXPIRED\")\n ) {\n throw new Error(\"Transaction expired. Try again.\");\n }\n }\n\n this.csl(\"Tron sendTransaction\", \"red-400\", \"success: %o\", result);\n\n if (typeof result === \"string\") {\n return result;\n }\n\n return result?.txid || result?.txID || transactionWithExpiration.txID;\n }\n\n /**\n * Unified quote method that routes to specific quote methods based on type\n * @param type Service type from Service\n * @param params Parameters for the quote\n */\n async quote(type: Service, params: any) {\n switch (type) {\n case Service.Usdt0:\n return await this.quoteOFT(params);\n case Service.OneClick:\n return await this.quoteOneClickProxy(params);\n default:\n throw new Error(`Unsupported quote type: ${type}`);\n }\n }\n\n /**\n * Unified send method that routes to specific send methods based on type\n * @param type Send type from SendType enum\n * @param params Parameters for the send transaction\n */\n async send(type: SendType, params: any) {\n switch (type) {\n case SendType.SEND:\n return await this.sendTransaction(params);\n case SendType.TRANSFER:\n return await this.transfer(params);\n default:\n throw new Error(`Unsupported send type: ${type}`);\n }\n }\n\n async quoteOneClickProxy(params: any) {\n const {\n dry,\n proxyAddress,\n abi,\n fromToken,\n refundTo,\n depositAddress,\n amountWei,\n prices,\n } = params;\n\n const result: any = { fees: {} };\n\n const execTime = new ExecTime({ type: \"Oneclick Tron\", logStyle: \"indigo-400\", isDebug: OpenAPI.DEBUG });\n await this.waitForTronWeb();\n execTime.log(\"waitForTronWeb\");\n const userAddress = refundTo || this.tronWeb.defaultAddress.base58;\n\n execTime.breakpoint();\n const allowance = await this.allowance({\n dry,\n contractAddress: fromToken.contractAddress,\n address: userAddress,\n spender: proxyAddress,\n amountWei: amountWei,\n });\n result.needApprove = allowance.needApprove;\n result.approveSpender = proxyAddress;\n execTime.log(\"allowance\");\n\n const proxyParam: any = [\n // tokenAddress\n fromToken.contractAddress,\n // recipient\n depositAddress,\n // amount\n amountWei,\n ];\n result.sendParam = {\n param: proxyParam,\n };\n\n const transactionParams = [\n proxyAddress,\n \"proxyTransfer(address,address,uint256)\",\n {},\n [\n {\n type: \"address\",\n value: result.sendParam.param[0] // tokenAddress\n },\n {\n type: \"address\",\n value: result.sendParam.param[1] // recipient\n },\n {\n type: \"uint256\",\n value: result.sendParam.param[2] // amount\n }\n ],\n this.tronWeb.defaultAddress.base58 || refundTo\n ];\n\n execTime.breakpoint();\n const tx = await this.tronWeb.transactionBuilder.triggerSmartContract(...transactionParams);\n execTime.log(\"transactionBuilder.triggerSmartContract\");\n result.sendParam.tx = tx;\n\n execTime.breakpoint();\n const ett = await this.estimateTransaction({\n dry,\n transactionParams,\n fromToken,\n prices,\n defaultEnergyUsed: 200000,\n defaultRawDataHexLength: 500,\n });\n execTime.log(\"estimateTransaction\");\n result.fees.estimateGasUsd = ett.estimateSourceGasUsd;\n result.estimateSourceGas = ett.estimateSourceGas;\n result.totalEstimateSourceGas = ett.estimateSourceGas;\n result.estimateSourceGasUsd = ett.estimateSourceGasUsd;\n\n if (result.needApprove) {\n execTime.breakpoint();\n const estApproveGas = await this.estimateApprove({\n dry,\n amountWei,\n spender: result.approveSpender,\n fromToken,\n prices,\n });\n result.estimateApproveGas = estApproveGas.estimateSourceGas;\n execTime.log(\"estimateApprove\");\n }\n\n result.sendParam.transactionParams = transactionParams;\n\n execTime.logTotal(\"quoteOneClickPorxy\");\n\n return result;\n }\n\n async getAccountResources(params: any) {\n const { account } = params;\n\n const result: any = {\n energy: 0,\n bandwidth: 0,\n success: false,\n error: \"TronWeb is not initialized or the wallet is not connected\",\n };\n\n await this.waitForTronWeb();\n\n if (!this.tronWeb || !account) {\n return result;\n }\n\n try {\n let availableEnergy;\n let availableBandwidth;\n\n try {\n if (this.tronWeb.trx.getAccountResources) {\n const resources: any = await this.tronWeb.trx.getAccountResources(account);\n this.csl(\"TronWallet getAccountResources\", \"teal-400\", \"resources: %o\", resources);\n if (resources) {\n // Get available energy (EnergyLimit - EnergyUsed)\n availableEnergy = (resources.EnergyLimit || 0) - (resources.EnergyUsed || 0);\n // Get available bandwidth (NetLimit - NetUsed)\n availableBandwidth = (resources.freeNetLimit || 0) - (resources.freeNetUsed || 0);\n }\n }\n } catch (resourcesErr) {\n console.warn(\"getAccountResources API is not available, try other way:\", resourcesErr);\n }\n\n if (availableEnergy === void 0 && availableBandwidth === void 0) {\n const accountInfo: any = await this.tronWeb.trx.getAccount(account);\n\n if (accountInfo.account_resource) {\n const accountResource = accountInfo.account_resource;\n availableEnergy = (accountResource.EnergyLimit || 0) - (accountResource.EnergyUsed || 0);\n availableBandwidth = (accountResource.NetLimit || 0) - (accountResource.NetUsed || 0);\n } else if (accountInfo.energy !== undefined) {\n availableEnergy = accountInfo.energy || 0;\n }\n\n // Try to get bandwidth information\n if (accountInfo.bandwidth !== undefined) {\n if (typeof accountInfo.bandwidth === \"number\") {\n availableBandwidth = accountInfo.bandwidth;\n } else if (accountInfo.bandwidth) {\n availableBandwidth = accountInfo.bandwidth.available || accountInfo.bandwidth.freeNetUsage || 0;\n }\n }\n }\n\n result.energy = Math.max(0, availableEnergy);\n result.bandwidth = Math.max(0, availableBandwidth);\n result.success = true;\n result.error = null;\n } catch (error) {\n console.error(\"Failed to get account resources:\", error);\n }\n\n return result;\n }\n}\n\nexport { TronWallet };\n"]}
|
package/dist/index.mjs
CHANGED
|
@@ -509,7 +509,7 @@ var TronWallet = class {
|
|
|
509
509
|
execTime.log("quoteOFT");
|
|
510
510
|
const [, , oftReceipt] = oftData;
|
|
511
511
|
sendParam[3] = Big(amountWei).times(Big(1).minus(Big(slippageTolerance || 0).div(100))).toFixed(0);
|
|
512
|
-
result.outputAmount = numberRemoveEndZero(
|
|
512
|
+
result.outputAmount = numberRemoveEndZero(Big(oftReceipt[1].toString()).div(10 ** params.toToken.decimals).toFixed(params.toToken.decimals, 0));
|
|
513
513
|
}
|
|
514
514
|
this.csl("TronWallet quoteOFT", "red-600", "result.outputAmount: %o", result.outputAmount);
|
|
515
515
|
this.csl("TronWallet quoteOFT", "red-600", "slippageTolerance: %o", slippageTolerance + "%");
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tron.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import {\n numberRemoveEndZero,\n getPrice,\n SendType,\n Service,\n DefaultAddresses,\n getChainRpcUrl,\n Csl,\n OpenAPI,\n ExecTime,\n} from '@stableflow/core';\nimport {\n addressToBytes32,\n getHopMsgFee,\n DATA_HEX_PROTOBUF_EXTRA,\n LZ_RECEIVE_VALUE,\n SIGNATURE_SIZE,\n USDT0_LEGACY_MESH_TRANSFTER_FEE,\n} from '@stableflow/bridges';\nimport { NATIVE_MSG_FEE_BUFFER } from '@stableflow/utils-evm';\nimport { getDestinationAssociatedTokenAddress } from '@stableflow/utils-solana';\nimport { Options } from \"@layerzerolabs/lz-v2-utilities\";\nimport { ethers } from \"ethers\";\nimport Big from \"big.js\";\nimport { TronWeb } from \"tronweb\";\n\nconst DefaultTronWalletAddress = DefaultAddresses[\"tron\"];\nconst getCustomTronWeb = () => {\n return new TronWeb({\n fullHost: getChainRpcUrl(\"tron\").rpcUrl,\n headers: {},\n privateKey: \"\",\n });\n};\n\nexport default class TronWallet {\n private signAndSendTransaction: any;\n private address: string;\n private tronWeb: any;\n private csl;\n\n constructor(options: any) {\n this.signAndSendTransaction = options.signAndSendTransaction;\n this.address = options.address;\n\n const customTronWeb = getCustomTronWeb();\n customTronWeb.setAddress(this.address || DefaultTronWalletAddress);\n this.tronWeb = customTronWeb;\n\n const cs = new Csl(OpenAPI.DEBUG);\n this.csl = cs.log;\n }\n\n async waitForTronWeb() {\n return new Promise((resolve) => {\n if (this.tronWeb) {\n const address = this.tronWeb.defaultAddress.base58 || DefaultTronWalletAddress;\n const customTronWeb = getCustomTronWeb();\n customTronWeb.setAddress(address);\n this.tronWeb = customTronWeb;\n resolve(this.tronWeb);\n return;\n }\n\n const checkTronWeb = () => {\n if ((window as any).tronWeb) {\n this.tronWeb = (window as any).tronWeb;\n const address = this.tronWeb.defaultAddress.base58 || DefaultTronWalletAddress;\n const customTronWeb = getCustomTronWeb();\n customTronWeb.setAddress(address);\n this.tronWeb = customTronWeb;\n resolve(this.tronWeb);\n } else {\n setTimeout(checkTronWeb, 100);\n }\n };\n\n checkTronWeb();\n\n setTimeout(() => {\n const customTronWeb = getCustomTronWeb();\n customTronWeb.setAddress(DefaultTronWalletAddress);\n this.tronWeb = customTronWeb;\n resolve(this.tronWeb);\n this.csl(\"TronWallet waitForTronWeb\", \"red-500\", \"TronWeb initialization timeout\");\n }, 10000);\n });\n }\n\n async transfer(data: {\n originAsset: string;\n depositAddress: string;\n amount: string;\n }) {\n const { originAsset, depositAddress, amount } = data;\n\n await this.waitForTronWeb();\n\n if (originAsset === \"TRX\" || originAsset === \"trx\") {\n return await this.transferTRX(depositAddress, amount);\n }\n\n // Transfer TRC20 token (USDT, USDC, etc.)\n return await this.transferToken(originAsset, depositAddress, amount);\n }\n\n async transferTRX(to: string, amount: string) {\n await this.waitForTronWeb();\n\n const transaction = await this.tronWeb.transactionBuilder.sendTrx(\n to,\n this.tronWeb.toSun(amount)\n );\n\n return this.sendTransaction({ tx: { transaction } });\n }\n\n async transferToken(contractAddress: string, to: string, amount: string) {\n await this.waitForTronWeb();\n\n const functionSelector = 'transfer(address,uint256)';\n const parameter = [{ type: 'address', value: to }, { type: 'uint256', value: amount }];\n const tx = await this.tronWeb.transactionBuilder.triggerSmartContract(contractAddress, functionSelector, {}, parameter);\n\n return this.sendTransaction({ tx });\n\n // // Get contract instance\n // const contract = await this.tronWeb.contract().at(contractAddress);\n\n // // Call transfer function\n // const transaction = await contract.transfer(to, amount).send({\n // feeLimit: 100_000_000\n // });\n\n // return transaction;\n }\n\n async getBalance(token: any, account: string, options?: { isCatchError?: boolean; }) {\n await this.waitForTronWeb();\n\n if (token.symbol === \"TRX\" || token.symbol === \"trx\" || token.symbol === \"native\") {\n return await this.getTRXBalance(account, options);\n }\n\n return await this.getTokenBalance(token.contractAddress, account, options);\n }\n\n async getTRXBalance(account: string, options?: { isCatchError?: boolean; }) {\n const { isCatchError = false } = options || {};\n\n await this.waitForTronWeb();\n\n try {\n const balance = await this.tronWeb.trx.getBalance(account);\n return balance.toString();\n } catch (error) {\n this.csl(\"Tron getTRXBalance\", \"red-500\", \"Get TRX balance failed: %o\", error);\n if (isCatchError) {\n throw error;\n }\n return \"0\";\n }\n }\n\n async getTokenBalance(contractAddress: string, account: string, options?: { isCatchError?: boolean; }) {\n const { isCatchError = false } = options || {};\n\n await this.waitForTronWeb();\n\n try {\n const contract = await this.tronWeb.contract().at(contractAddress);\n const balance = await contract.balanceOf(account).call();\n\n // Convert from smallest unit to token unit (assuming 6 decimals)\n return balance.toString();\n } catch (error) {\n this.csl(\"Tron getTokenBalance\", \"red-500\", \"Get token balance failed: %o\", error);\n if (isCatchError) {\n throw error;\n }\n return \"0\";\n }\n }\n\n async balanceOf(token: any, account: string, options?: { isCatchError?: boolean; }) {\n return await this.getBalance(token, account, options);\n }\n\n /**\n * Estimate gas limit for transfer transaction\n * @param data Transfer data\n * @returns Gas limit estimate (bandwidth or energy), gas price, and estimated gas cost\n */\n async estimateTransferGas(data: {\n fromToken: any;\n depositAddress: string;\n amount: string;\n }): Promise<{\n gasLimit: bigint;\n gasPrice: bigint;\n estimateGas: bigint;\n }> {\n const { fromToken } = data;\n const originAsset = fromToken.contractAddress;\n\n // Tron uses bandwidth for TRX transfers and energy for smart contract calls\n // TRX transfer: ~268 bandwidth\n // TRC20 transfer: ~30000 energy (estimated)\n let gasLimit: bigint;\n\n if (originAsset === \"TRX\" || originAsset === \"trx\") {\n // TRX transfer uses bandwidth (typically 268)\n gasLimit = 268n;\n } else {\n // TRC20 token transfer uses energy (typically 30000-35000)\n gasLimit = 30000n;\n }\n\n // Increase by 20% to provide buffer\n gasLimit = (gasLimit * 120n) / 100n;\n\n // Get current energy price from Tron (in sun)\n // For bandwidth, it's free if you have bandwidth\n // For energy, the price varies, typically 420 sun per energy unit\n let gasPrice: bigint = 100n;\n // try {\n // const chainParameters = await this.tronWeb.trx.getChainParameters();\n // const energyPrice = chainParameters?.find((p: any) => p.key === \"getEnergyFee\")?.value || 420;\n // gasPrice = BigInt(energyPrice);\n // } catch (error) {\n // // Default energy price: 420 sun per energy unit\n // gasPrice = 420n;\n // }\n\n // Calculate estimated gas cost: gasLimit * gasPrice\n const estimateGas = gasLimit * gasPrice;\n\n return {\n gasLimit,\n gasPrice,\n estimateGas\n };\n }\n\n async getEstimateGas(params: any) {\n const { gasLimit, price, nativeToken } = params;\n\n const energyPrice = BigInt(100);\n const estimateGas = Big(gasLimit.toString()).times(energyPrice.toString());\n const estimateGasAmount = Big(estimateGas).div(10 ** nativeToken.decimals);\n const estimateGasUsd = Big(estimateGasAmount).times(price || 1);\n\n return {\n gasPrice: energyPrice,\n usd: numberRemoveEndZero(Big(estimateGasUsd).toFixed(20)),\n wei: BigInt(estimateGas.toFixed(0)),\n amount: numberRemoveEndZero(Big(estimateGasAmount).toFixed(nativeToken.decimals)),\n };\n }\n\n async estimateTransaction(params: any) {\n const {\n dry,\n transactionParams,\n fromToken,\n prices,\n defaultEnergyUsed,\n defaultRawDataHexLength,\n buffer,\n } = params;\n\n const nativeTokenPrice = getPrice(prices, fromToken.nativeToken.symbol);\n\n let energyUsed = defaultEnergyUsed || 200000;\n let rawDataHexLength = defaultRawDataHexLength || 1000;\n try {\n const transaction = await this.tronWeb.transactionBuilder.triggerConstantContract(...transactionParams);\n energyUsed = transaction.energy_used || 200000;\n rawDataHexLength = transaction.transaction.raw_data_hex.length || 1000;\n } catch (error) {\n this.csl(\"Usdt0 Tron\", \"red-500\", \"estimateTransaction triggerConstantContract error: %o, action: %o\", error, transactionParams?.[1]);\n }\n const bandwidthAmount = Big(Big(rawDataHexLength).div(2).plus(DATA_HEX_PROTOBUF_EXTRA).plus(SIGNATURE_SIZE)).times(1e-3);\n const bandwidthUsed = Big(bandwidthAmount).div(1e2).times(10 ** fromToken.nativeToken.decimals);\n let totalUsed = Big(energyUsed).plus(bandwidthUsed);\n\n if (buffer) {\n totalUsed = Big(totalUsed).times(Big(1).plus(buffer));\n }\n\n const { usd, wei } = await this.getEstimateGas({\n gasLimit: totalUsed.toFixed(0),\n price: nativeTokenPrice,\n nativeToken: fromToken.nativeToken,\n });\n\n const result = {\n estimateSourceGasLimit: energyUsed,\n estimateSourceGas: wei,\n estimateSourceGasUsd: usd,\n };\n\n return result;\n }\n\n async estimateApprove(params: any) {\n const {\n dry,\n spender,\n amountWei,\n fromToken,\n prices,\n } = params;\n\n const approveParams = [\n fromToken.contractAddress,\n \"approve(address,uint256)\",\n {},\n [\n { type: \"address\", value: spender },\n { type: \"uint256\", value: amountWei }\n ]\n ];\n return this.estimateTransaction({\n dry,\n transactionParams: approveParams,\n fromToken,\n prices,\n defaultEnergyUsed: 100000,\n defaultRawDataHexLength: 500,\n // +10%\n buffer: 0.1,\n });\n }\n\n async pollingTransactionStatus(txHash: string, options?: {\n maxPolls?: number;\n pollInterval?: number;\n isTRX?: boolean;\n }) {\n await this.waitForTronWeb();\n\n const { maxPolls = 60, pollInterval = 2000, isTRX } = options || {};\n let pollCount = 0;\n\n return new Promise((resolve) => {\n const poll = async () => {\n pollCount++;\n this.csl(\"TronWallet pollingTransactionStatus\", \"teal-400\", \"polling transaction status (%s), %d times\", txHash, pollCount);\n\n try {\n const txInfo = await this.tronWeb.trx.getTransactionInfo(txHash);\n this.csl(\"TronWallet pollingTransactionStatus\", \"teal-400\", \"transaction info (%s): %o\", txHash, txInfo);\n\n // if the transaction info exists and has receipt, the transaction has been on-chain\n if (txInfo && txInfo.receipt) {\n if (isTRX) {\n resolve(true);\n return;\n }\n\n const result = txInfo.receipt.result;\n\n if (result === \"SUCCESS\") {\n this.csl(\"TronWallet pollingTransactionStatus\", \"teal-400\", \"transaction success (%s)\", txHash);\n resolve(true);\n return;\n } else if (result === \"FAILED\" || result === \"REVERT\") {\n this.csl(\"TronWallet pollingTransactionStatus\", \"red-500\", \"transaction failed (%s), result: %s\", txHash, result);\n resolve(false);\n return;\n } else {\n // other status, continue polling\n this.csl(\"TronWallet pollingTransactionStatus\", \"teal-400\", \"unknown transaction status (%s), result: %s, continue polling...\", txHash, result);\n }\n } else {\n // transaction info exists but no receipt, maybe still being packed, continue polling\n this.csl(\"TronWallet pollingTransactionStatus\", \"teal-400\", \"transaction not confirmed (%s), continue polling...\", txHash);\n }\n } catch (error: any) {\n // if the transaction does not exist (maybe still being packed), continue polling\n // common error messages include \"not found\" or \"does not exist\"\n const errorMessage = error?.message || String(error);\n if (\n errorMessage.includes(\"not found\") ||\n errorMessage.includes(\"does not exist\") ||\n errorMessage.includes(\"not exist\")\n ) {\n this.csl(\"TronWallet pollingTransactionStatus\", \"teal-400\", \"transaction not on-chain (%s), continue polling...\", txHash);\n } else {\n // other error, log but continue polling\n console.warn(`query transaction status error (${txHash}): %o`, errorMessage);\n }\n }\n\n // check if the maximum polling times is reached\n if (pollCount >= maxPolls) {\n console.error(`polling timeout (${txHash}), maximum polling times reached: ${maxPolls}`);\n resolve(false);\n return;\n }\n\n // continue polling\n setTimeout(poll, pollInterval);\n };\n\n // start polling\n poll();\n });\n }\n\n async checkTransactionStatus(txHash: string) {\n await this.waitForTronWeb();\n\n try {\n const txInfo = await this.tronWeb.trx.getTransactionInfo(txHash);\n\n if (txInfo && txInfo.receipt) {\n return txInfo.receipt.result === \"SUCCESS\";\n }\n\n return false;\n } catch (error) {\n return false;\n }\n }\n\n async getTransactionResult(txHash: string) {\n await this.waitForTronWeb();\n\n try {\n const txInfo = await this.tronWeb.trx.getTransactionInfo(txHash);\n return txInfo;\n } catch (error) {\n return {};\n }\n }\n\n async allowance(params: any) {\n const {\n dry,\n contractAddress,\n spender,\n address,\n amountWei,\n strict = false,\n } = params;\n\n // Get contract instance\n const contract = await this.tronWeb.contract().at(contractAddress);\n\n if (dry) {\n return {\n contract,\n allowance: \"0\",\n needApprove: false,\n };\n }\n\n await this.waitForTronWeb();\n\n try {\n // Get allowance\n let allowance = \"0\";\n try {\n const allowanceResult = await contract.allowance(address, spender).call();\n allowance = allowanceResult.toString();\n } catch (error) {\n this.csl(\"TronWallet allowance\", \"red-500\", \"Error getting allowance: %o\", error);\n if (strict) {\n throw error;\n }\n }\n\n return {\n contract,\n allowance,\n needApprove: Big(amountWei || 0).gt(allowance || 0),\n };\n } catch (error) {\n this.csl(\"TronWallet allowance\", \"red-500\", \"Error in allowance: %o\", error);\n if (strict) {\n throw error;\n }\n // Return default values on error\n return {\n contract: null,\n allowance: \"0\",\n needApprove: true,\n };\n }\n }\n\n async approve(params: any) {\n const {\n contractAddress,\n spender,\n amountWei,\n isApproveMax = false,\n isDetails = false,\n isWaitTxReceipt = true,\n } = params;\n\n await this.waitForTronWeb();\n\n const detailResult: any = {\n success: false,\n data: {},\n message: null,\n };\n\n try {\n // Determine approval amount\n let _amountWei = amountWei;\n if (isApproveMax) {\n // Max uint256 value: 2^256 - 1\n _amountWei = \"115792089237316195423570985008687907853269984665640564039457584007913129639935\";\n }\n\n // Build approve transaction using triggerSmartContract\n const functionSelector = 'approve(address,uint256)';\n const parameter = [\n { type: 'address', value: spender },\n { type: 'uint256', value: _amountWei }\n ];\n const tx = await this.tronWeb.transactionBuilder.triggerSmartContract(\n contractAddress,\n functionSelector,\n {},\n parameter\n );\n\n // Sign and send transaction\n const txHash = await this.sendTransaction({ tx });\n let txInfo: Record<string, unknown> | null = null;\n\n if (isWaitTxReceipt) {\n const pollingResult = await this.pollingTransactionStatus(txHash, {\n maxPolls: 120,\n pollInterval: 2000,\n });\n if (!pollingResult) {\n this.csl(\"TronWallet approve\", \"red-500\", \"Failed polling approve transaction status\");\n if (isDetails) {\n detailResult.message = \"Failed to get approve result\";\n return detailResult;\n }\n return false;\n }\n txInfo = await this.getTransactionResult(txHash);\n }\n\n if (isDetails) {\n const txReceipt = txInfo?.receipt as { result?: string } | undefined;\n detailResult.success = true;\n detailResult.data = {\n txHash,\n txInfo,\n receiptResult: txReceipt?.result,\n blockNumber: txInfo?.blockNumber,\n blockTimeStamp: txInfo?.blockTimeStamp,\n };\n return detailResult;\n }\n\n return txHash;\n } catch (error: any) {\n this.csl(\"TronWallet approve\", \"red-500\", \"Error approve: %o\", error);\n if (isDetails) {\n detailResult.message = error.message;\n return detailResult;\n }\n return false;\n }\n }\n\n toBytes32(addr: string): string {\n const hex = this.tronWeb.address.toHex(addr).slice(2);\n return \"0x\" + hex.padStart(64, \"0\");\n }\n\n async quoteOFT(params: any) {\n const {\n dry,\n abi,\n dstEid,\n recipient,\n amountWei,\n slippageTolerance,\n payInLzToken,\n fromToken,\n toToken,\n prices,\n originLayerzeroAddress,\n destinationLayerzeroAddress,\n excludeFees,\n refundTo,\n multiHopComposer,\n isMultiHopComposer,\n isOriginLegacy,\n isDestinationLegacy,\n originLayerzero,\n destinationLayerzero,\n } = params;\n\n const { Options } = await import(\"@layerzerolabs/lz-v2-utilities\");\n\n const result: any = {\n needApprove: false,\n approveSpender: originLayerzeroAddress,\n sendParam: void 0,\n quoteParam: {\n ...params,\n originLayerzeroAddress: originLayerzeroAddress,\n destinationLayerzeroAddress: destinationLayerzeroAddress,\n },\n fees: {},\n totalFeesUsd: void 0,\n estimateSourceGas: void 0,\n totalEstimateSourceGas: 0n,\n estimateSourceGasUsd: void 0,\n estimateTime: 0, // seconds - dynamically calculated using LayerZero formula\n outputAmount: numberRemoveEndZero(Big(amountWei || 0).div(10 ** params.fromToken.decimals).toFixed(params.fromToken.decimals, 0)),\n };\n\n const execTime = new ExecTime({ type: \"USDT0 Tron\", logStyle: \"indigo-300\", isDebug: OpenAPI.DEBUG });\n await this.waitForTronWeb();\n execTime.log(\"waitForTronWeb\");\n\n execTime.breakpoint();\n const oftContract = await this.tronWeb.contract(abi, originLayerzeroAddress);\n execTime.log(\"tronWeb.contract originLayerzeroAddress\");\n\n execTime.breakpoint();\n const userAddress = refundTo || this.tronWeb.defaultAddress.base58;\n const approvalRequired = isOriginLegacy ? originLayerzero.oftLegacyApprovalRequired : originLayerzero.oftApprovalRequired;\n execTime.log(\"approvalRequired\");\n\n const lzReceiveOptionGas = isDestinationLegacy ? destinationLayerzero.lzReceiveOptionGasLegacy : destinationLayerzero.lzReceiveOptionGas;\n let lzReceiveOptionValue = 0;\n\n execTime.breakpoint();\n const destATA = await getDestinationAssociatedTokenAddress({\n recipient,\n toToken,\n });\n execTime.log(\"getDestinationAssociatedTokenAddress\");\n if (destATA.needCreateTokenAccount) {\n lzReceiveOptionValue = LZ_RECEIVE_VALUE[toToken.chainName] || 0;\n }\n\n let unMultiHopExtraOptions = Options.newOptions().toHex();\n if (!isMultiHopComposer && lzReceiveOptionValue) {\n unMultiHopExtraOptions = Options.newOptions().addExecutorLzReceiveOption(lzReceiveOptionGas, lzReceiveOptionValue).toHex();\n }\n\n // 2. quote send\n const sendParam: any = [\n // dstEid\n dstEid,\n // to\n // \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n addressToBytes32(toToken.chainType, recipient),\n // amountLD\n amountWei,\n // minAmountLD\n \"0\",\n // extraOptions\n unMultiHopExtraOptions,\n // composeMsg\n \"0x\",\n // oftCmd\n \"0x\",\n ];\n\n if (isMultiHopComposer) {\n // multiHopComposer: Arbitrum legacy mesh MultiHopComposer, eid = 30110\n sendParam[0] = multiHopComposer.eid; // dstEid\n sendParam[1] = addressToBytes32(\"evm\", multiHopComposer.oftMultiHopComposer); // to\n }\n\n // 0.03% fee for Legacy Mesh transfers only (native USDT0 transfers are free)\n if (isOriginLegacy || isDestinationLegacy) {\n result.fees.legacyMeshFeeUsd = numberRemoveEndZero(Big(amountWei || 0).div(10 ** fromToken.decimals).times(USDT0_LEGACY_MESH_TRANSFTER_FEE).toFixed(fromToken.decimals));\n result.outputAmount = numberRemoveEndZero(Big(Big(amountWei || 0).div(10 ** params.fromToken.decimals)).minus(result.fees.legacyMeshFeeUsd || 0).toFixed(params.fromToken.decimals, 0));\n }\n\n if (!dry) {\n execTime.breakpoint();\n const oftData = await oftContract.quoteOFT(sendParam).call();\n execTime.log(\"quoteOFT\");\n const [, , oftReceipt] = oftData;\n // The slippage is calculated based on the user-defined value and the user-input amount\n sendParam[3] = Big(amountWei).times(Big(1).minus(Big(slippageTolerance || 0).div(100))).toFixed(0);\n // The actual received amount is based on the contract return value\n result.outputAmount = numberRemoveEndZero(numberRemoveEndZero(Big(oftReceipt[1].toString()).div(10 ** params.toToken.decimals).toFixed(params.toToken.decimals, 0)));\n }\n\n // Check if the output amount exceeds the slippage tolerance\n // If it exceeds, return an error message\n this.csl(\"TronWallet quoteOFT\", \"red-600\", \"result.outputAmount: %o\", result.outputAmount);\n this.csl(\"TronWallet quoteOFT\", \"red-600\", \"slippageTolerance: %o\", slippageTolerance + \"%\");\n this.csl(\"TronWallet quoteOFT\", \"red-600\", \"Minimum received amount: %o\", Big(amountWei).div(10 ** fromToken.decimals).times(Big(1).minus(Big(slippageTolerance || 0).div(100))).toFixed(6, 0));\n if (Big(result.outputAmount).lt(Big(amountWei).div(10 ** fromToken.decimals).times(Big(1).minus(Big(slippageTolerance || 0).div(100))))) {\n result.errMsg = \"Slippage limit exceeded\";\n return result;\n }\n\n if (isMultiHopComposer) {\n let multiHopExtraOptions = Options.newOptions().toHex();\n if (lzReceiveOptionValue) {\n multiHopExtraOptions = Options.newOptions().addExecutorLzReceiveOption(lzReceiveOptionGas, lzReceiveOptionValue).toHex();\n }\n\n const composeMsgSendParam = {\n dstEid,\n to: addressToBytes32(toToken.chainType, recipient),\n amountLD: sendParam[2],\n minAmountLD: sendParam[3],\n extraOptions: multiHopExtraOptions,\n composeMsg: \"0x\",\n oftCmd: \"0x\",\n };\n execTime.breakpoint();\n const hopMsgFee = await getHopMsgFee({\n sendParam: composeMsgSendParam,\n toToken,\n });\n execTime.log(\"getHopMsgFee\");\n\n sendParam[4] = Options.newOptions()\n .addExecutorComposeOption(0, originLayerzero.composeOptionGas || 800000, hopMsgFee)\n .toHex();\n const abiCoder = ethers.AbiCoder.defaultAbiCoder();\n sendParam[5] = abiCoder.encode(\n [\"tuple(uint32 dstEid, bytes32 to, uint256 amountLD, uint256 minAmountLD, bytes extraOptions, bytes composeMsg, bytes oftCmd)\"],\n [Object.values(composeMsgSendParam)]\n );\n }\n\n execTime.breakpoint();\n const mergedCalls = [\n oftContract.quoteSend(sendParam, payInLzToken).call(),\n ];\n if (approvalRequired) {\n mergedCalls.push(\n this.allowance({\n dry,\n contractAddress: fromToken.contractAddress,\n spender: originLayerzeroAddress,\n address: userAddress,\n amountWei,\n })\n );\n }\n const [msgFee, allowanceResult] = await Promise.all(mergedCalls);\n if (approvalRequired) {\n result.needApprove = allowanceResult.needApprove;\n }\n execTime.log(\"quoteSend & allowance\", \"allowanceResult: %o\", allowanceResult);\n\n let nativeMsgFee: BigInt = msgFee[0][\"nativeFee\"];\n this.csl(\"Tron quoteOFT\", \"red-600\", \"nativeFee: %o\", nativeMsgFee);\n if (nativeMsgFee) {\n nativeMsgFee = BigInt(Big(nativeMsgFee.toString()).times(Number(NATIVE_MSG_FEE_BUFFER) / 100).toFixed(0));\n }\n this.csl(\"Tron quoteOFT\", \"red-600\", \"nativeFee after buffer: %o\", nativeMsgFee);\n result.totalEstimateSourceGas = nativeMsgFee;\n\n this.csl(\"TronWallet quoteOFT\", \"teal-400\", \"MsgFee: %o\", msgFee);\n\n result.sendParam = {\n param: [\n // sendParam\n sendParam,\n // feeParam\n [\n // nativeFee\n nativeMsgFee.toString(),\n // lzTokenFee\n msgFee[0][\"lzTokenFee\"].toString(),\n ],\n // refundAddress\n refundTo,\n ],\n options: { callValue: nativeMsgFee.toString() },\n };\n\n // this.csl(\"TronWallet quoteOFT\", \"teal-400\", \"Params: %o\", result.sendParam);\n\n // 3. estimate gas\n const nativeFeeUsd = Big(nativeMsgFee?.toString() || 0).div(10 ** fromToken.nativeToken.decimals).times(getPrice(prices, fromToken.nativeToken.symbol));\n result.fees.nativeFee = numberRemoveEndZero(Big(nativeMsgFee?.toString() || 0).div(10 ** fromToken.nativeToken.decimals).toFixed(fromToken.nativeToken.decimals));\n result.fees.nativeFeeUsd = numberRemoveEndZero(Big(nativeFeeUsd).toFixed(20));\n result.fees.lzTokenFeeUsd = numberRemoveEndZero(Big(msgFee[0][\"lzTokenFee\"]?.toString() || 0).div(10 ** fromToken.decimals).toFixed(20));\n\n const transactionParams = [\n originLayerzeroAddress,\n \"send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)\",\n result.sendParam.options,\n [\n {\n type: \"tuple(uint32,bytes32,uint256,uint256,bytes,bytes,bytes)\",\n value: result.sendParam.param[0]\n },\n {\n type: \"tuple(uint256,uint256)\",\n value: result.sendParam.param[1]\n },\n {\n type: \"address\",\n value: result.sendParam.param[2]\n }\n ],\n this.tronWeb.defaultAddress.base58 || refundTo\n ];\n\n if (!dry) {\n execTime.breakpoint();\n const tx = await this.tronWeb.transactionBuilder.triggerSmartContract(...transactionParams);\n execTime.log(\"transactionBuilder.triggerSmartContract\");\n result.sendParam.tx = tx;\n }\n\n execTime.breakpoint();\n const ett = await this.estimateTransaction({\n dry,\n transactionParams,\n fromToken,\n prices,\n defaultEnergyUsed: 300000,\n defaultRawDataHexLength: 1000,\n });\n execTime.log(\"estimateTransaction\");\n result.fees.estimateGasUsd = ett.estimateSourceGasUsd;\n result.estimateSourceGas = ett.estimateSourceGas;\n result.totalEstimateSourceGas += ett.estimateSourceGas;\n result.estimateSourceGasUsd = ett.estimateSourceGasUsd;\n\n if (result.needApprove) {\n execTime.breakpoint();\n const estApproveGas = await this.estimateApprove({\n dry,\n amountWei,\n spender: result.approveSpender,\n fromToken,\n prices,\n });\n result.estimateApproveGas = estApproveGas.estimateSourceGas;\n execTime.log(\"estimateApprove\");\n }\n\n // calculate total fees\n for (const feeKey in result.fees) {\n if (excludeFees.includes(feeKey) || !/Usd$/.test(feeKey)) {\n continue;\n }\n result.totalFeesUsd = Big(result.totalFeesUsd || 0).plus(result.fees[feeKey] || 0);\n }\n result.totalFeesUsd = numberRemoveEndZero(Big(result.totalFeesUsd).toFixed(20));\n\n result.sendParam.transactionParams = transactionParams;\n\n execTime.log(\"quoteOFT\");\n\n return result;\n }\n\n async sendTransaction(params: any) {\n const {\n tx,\n } = params;\n\n const transaction = tx?.transaction;\n if (!transaction?.raw_data) {\n throw new Error(\"Invalid transaction\");\n }\n\n this.csl(\"Tron sendTransaction\", \"red-400\", \"transaction: %o\", transaction);\n\n const startTimestamp = Date.now();\n const expirationDuration = 5 * 60 * 1000;\n const expiration = startTimestamp + expirationDuration;\n let transactionWithExpiration = {\n ...transaction,\n raw_data: {\n ...transaction.raw_data,\n expiration,\n },\n };\n\n try {\n await this.waitForTronWeb();\n transactionWithExpiration = await this.tronWeb.transactionBuilder.newTxID(transactionWithExpiration, { txLocal: true });\n } catch (error) {\n console.warn(\"Failed to refresh transaction ID after extending expiration:\", error);\n }\n\n this.csl(\"Tron sendTransaction\", \"red-400\", \"override transaction: %o\", transactionWithExpiration);\n\n const result = await this.signAndSendTransaction(transactionWithExpiration);\n\n this.csl(\"Tron sendTransaction\", \"red-400\", \"Transaction sent with result: %o\", result);\n\n if (typeof result === \"object\") {\n const code = result.code ? String(result.code) : \"\";\n const message = result.message ? String(result.message) : \"\";\n const combined = `${code} ${message}`.toUpperCase();\n if (combined.includes(\"TRANSACTION_EXPIRATION_ERROR\")\n || combined.includes(\"TRANSACTION_EXPIRED\")\n || combined.includes(\"EXPIRED\")\n ) {\n throw new Error(\"Transaction expired. Try again.\");\n }\n }\n\n this.csl(\"Tron sendTransaction\", \"red-400\", \"success: %o\", result);\n\n if (typeof result === \"string\") {\n return result;\n }\n\n return result?.txid || result?.txID || transactionWithExpiration.txID;\n }\n\n /**\n * Unified quote method that routes to specific quote methods based on type\n * @param type Service type from Service\n * @param params Parameters for the quote\n */\n async quote(type: Service, params: any) {\n switch (type) {\n case Service.Usdt0:\n return await this.quoteOFT(params);\n case Service.OneClick:\n return await this.quoteOneClickProxy(params);\n default:\n throw new Error(`Unsupported quote type: ${type}`);\n }\n }\n\n /**\n * Unified send method that routes to specific send methods based on type\n * @param type Send type from SendType enum\n * @param params Parameters for the send transaction\n */\n async send(type: SendType, params: any) {\n switch (type) {\n case SendType.SEND:\n return await this.sendTransaction(params);\n case SendType.TRANSFER:\n return await this.transfer(params);\n default:\n throw new Error(`Unsupported send type: ${type}`);\n }\n }\n\n async quoteOneClickProxy(params: any) {\n const {\n dry,\n proxyAddress,\n abi,\n fromToken,\n refundTo,\n depositAddress,\n amountWei,\n prices,\n } = params;\n\n const result: any = { fees: {} };\n\n const execTime = new ExecTime({ type: \"Oneclick Tron\", logStyle: \"indigo-400\", isDebug: OpenAPI.DEBUG });\n await this.waitForTronWeb();\n execTime.log(\"waitForTronWeb\");\n const userAddress = refundTo || this.tronWeb.defaultAddress.base58;\n\n execTime.breakpoint();\n const allowance = await this.allowance({\n dry,\n contractAddress: fromToken.contractAddress,\n address: userAddress,\n spender: proxyAddress,\n amountWei: amountWei,\n });\n result.needApprove = allowance.needApprove;\n result.approveSpender = proxyAddress;\n execTime.log(\"allowance\");\n\n const proxyParam: any = [\n // tokenAddress\n fromToken.contractAddress,\n // recipient\n depositAddress,\n // amount\n amountWei,\n ];\n result.sendParam = {\n param: proxyParam,\n };\n\n const transactionParams = [\n proxyAddress,\n \"proxyTransfer(address,address,uint256)\",\n {},\n [\n {\n type: \"address\",\n value: result.sendParam.param[0] // tokenAddress\n },\n {\n type: \"address\",\n value: result.sendParam.param[1] // recipient\n },\n {\n type: \"uint256\",\n value: result.sendParam.param[2] // amount\n }\n ],\n this.tronWeb.defaultAddress.base58 || refundTo\n ];\n\n execTime.breakpoint();\n const tx = await this.tronWeb.transactionBuilder.triggerSmartContract(...transactionParams);\n execTime.log(\"transactionBuilder.triggerSmartContract\");\n result.sendParam.tx = tx;\n\n execTime.breakpoint();\n const ett = await this.estimateTransaction({\n dry,\n transactionParams,\n fromToken,\n prices,\n defaultEnergyUsed: 200000,\n defaultRawDataHexLength: 500,\n });\n execTime.log(\"estimateTransaction\");\n result.fees.estimateGasUsd = ett.estimateSourceGasUsd;\n result.estimateSourceGas = ett.estimateSourceGas;\n result.totalEstimateSourceGas = ett.estimateSourceGas;\n result.estimateSourceGasUsd = ett.estimateSourceGasUsd;\n\n if (result.needApprove) {\n execTime.breakpoint();\n const estApproveGas = await this.estimateApprove({\n dry,\n amountWei,\n spender: result.approveSpender,\n fromToken,\n prices,\n });\n result.estimateApproveGas = estApproveGas.estimateSourceGas;\n execTime.log(\"estimateApprove\");\n }\n\n result.sendParam.transactionParams = transactionParams;\n\n execTime.logTotal(\"quoteOneClickPorxy\");\n\n return result;\n }\n\n async getAccountResources(params: any) {\n const { account } = params;\n\n const result: any = {\n energy: 0,\n bandwidth: 0,\n success: false,\n error: \"TronWeb is not initialized or the wallet is not connected\",\n };\n\n await this.waitForTronWeb();\n\n if (!this.tronWeb || !account) {\n return result;\n }\n\n try {\n let availableEnergy;\n let availableBandwidth;\n\n try {\n if (this.tronWeb.trx.getAccountResources) {\n const resources: any = await this.tronWeb.trx.getAccountResources(account);\n this.csl(\"TronWallet getAccountResources\", \"teal-400\", \"resources: %o\", resources);\n if (resources) {\n // Get available energy (EnergyLimit - EnergyUsed)\n availableEnergy = (resources.EnergyLimit || 0) - (resources.EnergyUsed || 0);\n // Get available bandwidth (NetLimit - NetUsed)\n availableBandwidth = (resources.freeNetLimit || 0) - (resources.freeNetUsed || 0);\n }\n }\n } catch (resourcesErr) {\n console.warn(\"getAccountResources API is not available, try other way:\", resourcesErr);\n }\n\n if (availableEnergy === void 0 && availableBandwidth === void 0) {\n const accountInfo: any = await this.tronWeb.trx.getAccount(account);\n\n if (accountInfo.account_resource) {\n const accountResource = accountInfo.account_resource;\n availableEnergy = (accountResource.EnergyLimit || 0) - (accountResource.EnergyUsed || 0);\n availableBandwidth = (accountResource.NetLimit || 0) - (accountResource.NetUsed || 0);\n } else if (accountInfo.energy !== undefined) {\n availableEnergy = accountInfo.energy || 0;\n }\n\n // Try to get bandwidth information\n if (accountInfo.bandwidth !== undefined) {\n if (typeof accountInfo.bandwidth === \"number\") {\n availableBandwidth = accountInfo.bandwidth;\n } else if (accountInfo.bandwidth) {\n availableBandwidth = accountInfo.bandwidth.available || accountInfo.bandwidth.freeNetUsage || 0;\n }\n }\n }\n\n result.energy = Math.max(0, availableEnergy);\n result.bandwidth = Math.max(0, availableBandwidth);\n result.success = true;\n result.error = null;\n } catch (error) {\n console.error(\"Failed to get account resources:\", error);\n }\n\n return result;\n }\n}\n\nexport { TronWallet };\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/tron.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import {\n numberRemoveEndZero,\n getPrice,\n SendType,\n Service,\n DefaultAddresses,\n getChainRpcUrl,\n Csl,\n OpenAPI,\n ExecTime,\n} from '@stableflow/core';\nimport {\n addressToBytes32,\n getHopMsgFee,\n DATA_HEX_PROTOBUF_EXTRA,\n LZ_RECEIVE_VALUE,\n SIGNATURE_SIZE,\n USDT0_LEGACY_MESH_TRANSFTER_FEE,\n} from '@stableflow/bridges';\nimport { NATIVE_MSG_FEE_BUFFER } from '@stableflow/utils-evm';\nimport { getDestinationAssociatedTokenAddress } from '@stableflow/utils-solana';\nimport { Options } from \"@layerzerolabs/lz-v2-utilities\";\nimport { ethers } from \"ethers\";\nimport Big from \"big.js\";\nimport { TronWeb } from \"tronweb\";\n\nconst DefaultTronWalletAddress = DefaultAddresses[\"tron\"];\nconst getCustomTronWeb = () => {\n return new TronWeb({\n fullHost: getChainRpcUrl(\"tron\").rpcUrl,\n headers: {},\n privateKey: \"\",\n });\n};\n\nexport default class TronWallet {\n private signAndSendTransaction: any;\n private address: string;\n private tronWeb: any;\n private csl;\n\n constructor(options: any) {\n this.signAndSendTransaction = options.signAndSendTransaction;\n this.address = options.address;\n\n const customTronWeb = getCustomTronWeb();\n customTronWeb.setAddress(this.address || DefaultTronWalletAddress);\n this.tronWeb = customTronWeb;\n\n const cs = new Csl(OpenAPI.DEBUG);\n this.csl = cs.log;\n }\n\n async waitForTronWeb() {\n return new Promise((resolve) => {\n if (this.tronWeb) {\n const address = this.tronWeb.defaultAddress.base58 || DefaultTronWalletAddress;\n const customTronWeb = getCustomTronWeb();\n customTronWeb.setAddress(address);\n this.tronWeb = customTronWeb;\n resolve(this.tronWeb);\n return;\n }\n\n const checkTronWeb = () => {\n if ((window as any).tronWeb) {\n this.tronWeb = (window as any).tronWeb;\n const address = this.tronWeb.defaultAddress.base58 || DefaultTronWalletAddress;\n const customTronWeb = getCustomTronWeb();\n customTronWeb.setAddress(address);\n this.tronWeb = customTronWeb;\n resolve(this.tronWeb);\n } else {\n setTimeout(checkTronWeb, 100);\n }\n };\n\n checkTronWeb();\n\n setTimeout(() => {\n const customTronWeb = getCustomTronWeb();\n customTronWeb.setAddress(DefaultTronWalletAddress);\n this.tronWeb = customTronWeb;\n resolve(this.tronWeb);\n this.csl(\"TronWallet waitForTronWeb\", \"red-500\", \"TronWeb initialization timeout\");\n }, 10000);\n });\n }\n\n async transfer(data: {\n originAsset: string;\n depositAddress: string;\n amount: string;\n }) {\n const { originAsset, depositAddress, amount } = data;\n\n await this.waitForTronWeb();\n\n if (originAsset === \"TRX\" || originAsset === \"trx\") {\n return await this.transferTRX(depositAddress, amount);\n }\n\n // Transfer TRC20 token (USDT, USDC, etc.)\n return await this.transferToken(originAsset, depositAddress, amount);\n }\n\n async transferTRX(to: string, amount: string) {\n await this.waitForTronWeb();\n\n const transaction = await this.tronWeb.transactionBuilder.sendTrx(\n to,\n this.tronWeb.toSun(amount)\n );\n\n return this.sendTransaction({ tx: { transaction } });\n }\n\n async transferToken(contractAddress: string, to: string, amount: string) {\n await this.waitForTronWeb();\n\n const functionSelector = 'transfer(address,uint256)';\n const parameter = [{ type: 'address', value: to }, { type: 'uint256', value: amount }];\n const tx = await this.tronWeb.transactionBuilder.triggerSmartContract(contractAddress, functionSelector, {}, parameter);\n\n return this.sendTransaction({ tx });\n\n // // Get contract instance\n // const contract = await this.tronWeb.contract().at(contractAddress);\n\n // // Call transfer function\n // const transaction = await contract.transfer(to, amount).send({\n // feeLimit: 100_000_000\n // });\n\n // return transaction;\n }\n\n async getBalance(token: any, account: string, options?: { isCatchError?: boolean; }) {\n await this.waitForTronWeb();\n\n if (token.symbol === \"TRX\" || token.symbol === \"trx\" || token.symbol === \"native\") {\n return await this.getTRXBalance(account, options);\n }\n\n return await this.getTokenBalance(token.contractAddress, account, options);\n }\n\n async getTRXBalance(account: string, options?: { isCatchError?: boolean; }) {\n const { isCatchError = false } = options || {};\n\n await this.waitForTronWeb();\n\n try {\n const balance = await this.tronWeb.trx.getBalance(account);\n return balance.toString();\n } catch (error) {\n this.csl(\"Tron getTRXBalance\", \"red-500\", \"Get TRX balance failed: %o\", error);\n if (isCatchError) {\n throw error;\n }\n return \"0\";\n }\n }\n\n async getTokenBalance(contractAddress: string, account: string, options?: { isCatchError?: boolean; }) {\n const { isCatchError = false } = options || {};\n\n await this.waitForTronWeb();\n\n try {\n const contract = await this.tronWeb.contract().at(contractAddress);\n const balance = await contract.balanceOf(account).call();\n\n // Convert from smallest unit to token unit (assuming 6 decimals)\n return balance.toString();\n } catch (error) {\n this.csl(\"Tron getTokenBalance\", \"red-500\", \"Get token balance failed: %o\", error);\n if (isCatchError) {\n throw error;\n }\n return \"0\";\n }\n }\n\n async balanceOf(token: any, account: string, options?: { isCatchError?: boolean; }) {\n return await this.getBalance(token, account, options);\n }\n\n /**\n * Estimate gas limit for transfer transaction\n * @param data Transfer data\n * @returns Gas limit estimate (bandwidth or energy), gas price, and estimated gas cost\n */\n async estimateTransferGas(data: {\n fromToken: any;\n depositAddress: string;\n amount: string;\n }): Promise<{\n gasLimit: bigint;\n gasPrice: bigint;\n estimateGas: bigint;\n }> {\n const { fromToken } = data;\n const originAsset = fromToken.contractAddress;\n\n // Tron uses bandwidth for TRX transfers and energy for smart contract calls\n // TRX transfer: ~268 bandwidth\n // TRC20 transfer: ~30000 energy (estimated)\n let gasLimit: bigint;\n\n if (originAsset === \"TRX\" || originAsset === \"trx\") {\n // TRX transfer uses bandwidth (typically 268)\n gasLimit = 268n;\n } else {\n // TRC20 token transfer uses energy (typically 30000-35000)\n gasLimit = 30000n;\n }\n\n // Increase by 20% to provide buffer\n gasLimit = (gasLimit * 120n) / 100n;\n\n // Get current energy price from Tron (in sun)\n // For bandwidth, it's free if you have bandwidth\n // For energy, the price varies, typically 420 sun per energy unit\n let gasPrice: bigint = 100n;\n // try {\n // const chainParameters = await this.tronWeb.trx.getChainParameters();\n // const energyPrice = chainParameters?.find((p: any) => p.key === \"getEnergyFee\")?.value || 420;\n // gasPrice = BigInt(energyPrice);\n // } catch (error) {\n // // Default energy price: 420 sun per energy unit\n // gasPrice = 420n;\n // }\n\n // Calculate estimated gas cost: gasLimit * gasPrice\n const estimateGas = gasLimit * gasPrice;\n\n return {\n gasLimit,\n gasPrice,\n estimateGas\n };\n }\n\n async getEstimateGas(params: any) {\n const { gasLimit, price, nativeToken } = params;\n\n const energyPrice = BigInt(100);\n const estimateGas = Big(gasLimit.toString()).times(energyPrice.toString());\n const estimateGasAmount = Big(estimateGas).div(10 ** nativeToken.decimals);\n const estimateGasUsd = Big(estimateGasAmount).times(price || 1);\n\n return {\n gasPrice: energyPrice,\n usd: numberRemoveEndZero(Big(estimateGasUsd).toFixed(20)),\n wei: BigInt(estimateGas.toFixed(0)),\n amount: numberRemoveEndZero(Big(estimateGasAmount).toFixed(nativeToken.decimals)),\n };\n }\n\n async estimateTransaction(params: any) {\n const {\n dry,\n transactionParams,\n fromToken,\n prices,\n defaultEnergyUsed,\n defaultRawDataHexLength,\n buffer,\n } = params;\n\n const nativeTokenPrice = getPrice(prices, fromToken.nativeToken.symbol);\n\n let energyUsed = defaultEnergyUsed || 200000;\n let rawDataHexLength = defaultRawDataHexLength || 1000;\n try {\n const transaction = await this.tronWeb.transactionBuilder.triggerConstantContract(...transactionParams);\n energyUsed = transaction.energy_used || 200000;\n rawDataHexLength = transaction.transaction.raw_data_hex.length || 1000;\n } catch (error) {\n this.csl(\"Usdt0 Tron\", \"red-500\", \"estimateTransaction triggerConstantContract error: %o, action: %o\", error, transactionParams?.[1]);\n }\n const bandwidthAmount = Big(Big(rawDataHexLength).div(2).plus(DATA_HEX_PROTOBUF_EXTRA).plus(SIGNATURE_SIZE)).times(1e-3);\n const bandwidthUsed = Big(bandwidthAmount).div(1e2).times(10 ** fromToken.nativeToken.decimals);\n let totalUsed = Big(energyUsed).plus(bandwidthUsed);\n\n if (buffer) {\n totalUsed = Big(totalUsed).times(Big(1).plus(buffer));\n }\n\n const { usd, wei } = await this.getEstimateGas({\n gasLimit: totalUsed.toFixed(0),\n price: nativeTokenPrice,\n nativeToken: fromToken.nativeToken,\n });\n\n const result = {\n estimateSourceGasLimit: energyUsed,\n estimateSourceGas: wei,\n estimateSourceGasUsd: usd,\n };\n\n return result;\n }\n\n async estimateApprove(params: any) {\n const {\n dry,\n spender,\n amountWei,\n fromToken,\n prices,\n } = params;\n\n const approveParams = [\n fromToken.contractAddress,\n \"approve(address,uint256)\",\n {},\n [\n { type: \"address\", value: spender },\n { type: \"uint256\", value: amountWei }\n ]\n ];\n return this.estimateTransaction({\n dry,\n transactionParams: approveParams,\n fromToken,\n prices,\n defaultEnergyUsed: 100000,\n defaultRawDataHexLength: 500,\n // +10%\n buffer: 0.1,\n });\n }\n\n async pollingTransactionStatus(txHash: string, options?: {\n maxPolls?: number;\n pollInterval?: number;\n isTRX?: boolean;\n }) {\n await this.waitForTronWeb();\n\n const { maxPolls = 60, pollInterval = 2000, isTRX } = options || {};\n let pollCount = 0;\n\n return new Promise((resolve) => {\n const poll = async () => {\n pollCount++;\n this.csl(\"TronWallet pollingTransactionStatus\", \"teal-400\", \"polling transaction status (%s), %d times\", txHash, pollCount);\n\n try {\n const txInfo = await this.tronWeb.trx.getTransactionInfo(txHash);\n this.csl(\"TronWallet pollingTransactionStatus\", \"teal-400\", \"transaction info (%s): %o\", txHash, txInfo);\n\n // if the transaction info exists and has receipt, the transaction has been on-chain\n if (txInfo && txInfo.receipt) {\n if (isTRX) {\n resolve(true);\n return;\n }\n\n const result = txInfo.receipt.result;\n\n if (result === \"SUCCESS\") {\n this.csl(\"TronWallet pollingTransactionStatus\", \"teal-400\", \"transaction success (%s)\", txHash);\n resolve(true);\n return;\n } else if (result === \"FAILED\" || result === \"REVERT\") {\n this.csl(\"TronWallet pollingTransactionStatus\", \"red-500\", \"transaction failed (%s), result: %s\", txHash, result);\n resolve(false);\n return;\n } else {\n // other status, continue polling\n this.csl(\"TronWallet pollingTransactionStatus\", \"teal-400\", \"unknown transaction status (%s), result: %s, continue polling...\", txHash, result);\n }\n } else {\n // transaction info exists but no receipt, maybe still being packed, continue polling\n this.csl(\"TronWallet pollingTransactionStatus\", \"teal-400\", \"transaction not confirmed (%s), continue polling...\", txHash);\n }\n } catch (error: any) {\n // if the transaction does not exist (maybe still being packed), continue polling\n // common error messages include \"not found\" or \"does not exist\"\n const errorMessage = error?.message || String(error);\n if (\n errorMessage.includes(\"not found\") ||\n errorMessage.includes(\"does not exist\") ||\n errorMessage.includes(\"not exist\")\n ) {\n this.csl(\"TronWallet pollingTransactionStatus\", \"teal-400\", \"transaction not on-chain (%s), continue polling...\", txHash);\n } else {\n // other error, log but continue polling\n console.warn(`query transaction status error (${txHash}): %o`, errorMessage);\n }\n }\n\n // check if the maximum polling times is reached\n if (pollCount >= maxPolls) {\n console.error(`polling timeout (${txHash}), maximum polling times reached: ${maxPolls}`);\n resolve(false);\n return;\n }\n\n // continue polling\n setTimeout(poll, pollInterval);\n };\n\n // start polling\n poll();\n });\n }\n\n async checkTransactionStatus(txHash: string) {\n await this.waitForTronWeb();\n\n try {\n const txInfo = await this.tronWeb.trx.getTransactionInfo(txHash);\n\n if (txInfo && txInfo.receipt) {\n return txInfo.receipt.result === \"SUCCESS\";\n }\n\n return false;\n } catch (error) {\n return false;\n }\n }\n\n async getTransactionResult(txHash: string) {\n await this.waitForTronWeb();\n\n try {\n const txInfo = await this.tronWeb.trx.getTransactionInfo(txHash);\n return txInfo;\n } catch (error) {\n return {};\n }\n }\n\n async allowance(params: any) {\n const {\n dry,\n contractAddress,\n spender,\n address,\n amountWei,\n strict = false,\n } = params;\n\n // Get contract instance\n const contract = await this.tronWeb.contract().at(contractAddress);\n\n if (dry) {\n return {\n contract,\n allowance: \"0\",\n needApprove: false,\n };\n }\n\n await this.waitForTronWeb();\n\n try {\n // Get allowance\n let allowance = \"0\";\n try {\n const allowanceResult = await contract.allowance(address, spender).call();\n allowance = allowanceResult.toString();\n } catch (error) {\n this.csl(\"TronWallet allowance\", \"red-500\", \"Error getting allowance: %o\", error);\n if (strict) {\n throw error;\n }\n }\n\n return {\n contract,\n allowance,\n needApprove: Big(amountWei || 0).gt(allowance || 0),\n };\n } catch (error) {\n this.csl(\"TronWallet allowance\", \"red-500\", \"Error in allowance: %o\", error);\n if (strict) {\n throw error;\n }\n // Return default values on error\n return {\n contract: null,\n allowance: \"0\",\n needApprove: true,\n };\n }\n }\n\n async approve(params: any) {\n const {\n contractAddress,\n spender,\n amountWei,\n isApproveMax = false,\n isDetails = false,\n isWaitTxReceipt = true,\n } = params;\n\n await this.waitForTronWeb();\n\n const detailResult: any = {\n success: false,\n data: {},\n message: null,\n };\n\n try {\n // Determine approval amount\n let _amountWei = amountWei;\n if (isApproveMax) {\n // Max uint256 value: 2^256 - 1\n _amountWei = \"115792089237316195423570985008687907853269984665640564039457584007913129639935\";\n }\n\n // Build approve transaction using triggerSmartContract\n const functionSelector = 'approve(address,uint256)';\n const parameter = [\n { type: 'address', value: spender },\n { type: 'uint256', value: _amountWei }\n ];\n const tx = await this.tronWeb.transactionBuilder.triggerSmartContract(\n contractAddress,\n functionSelector,\n {},\n parameter\n );\n\n // Sign and send transaction\n const txHash = await this.sendTransaction({ tx });\n let txInfo: Record<string, unknown> | null = null;\n\n if (isWaitTxReceipt) {\n const pollingResult = await this.pollingTransactionStatus(txHash, {\n maxPolls: 120,\n pollInterval: 2000,\n });\n if (!pollingResult) {\n this.csl(\"TronWallet approve\", \"red-500\", \"Failed polling approve transaction status\");\n if (isDetails) {\n detailResult.message = \"Failed to get approve result\";\n return detailResult;\n }\n return false;\n }\n txInfo = await this.getTransactionResult(txHash);\n }\n\n if (isDetails) {\n const txReceipt = txInfo?.receipt as { result?: string } | undefined;\n detailResult.success = true;\n detailResult.data = {\n txHash,\n txInfo,\n receiptResult: txReceipt?.result,\n blockNumber: txInfo?.blockNumber,\n blockTimeStamp: txInfo?.blockTimeStamp,\n };\n return detailResult;\n }\n\n return txHash;\n } catch (error: any) {\n this.csl(\"TronWallet approve\", \"red-500\", \"Error approve: %o\", error);\n if (isDetails) {\n detailResult.message = error.message;\n return detailResult;\n }\n return false;\n }\n }\n\n toBytes32(addr: string): string {\n const hex = this.tronWeb.address.toHex(addr).slice(2);\n return \"0x\" + hex.padStart(64, \"0\");\n }\n\n async quoteOFT(params: any) {\n const {\n dry,\n abi,\n dstEid,\n recipient,\n amountWei,\n slippageTolerance,\n payInLzToken,\n fromToken,\n toToken,\n prices,\n originLayerzeroAddress,\n destinationLayerzeroAddress,\n excludeFees,\n refundTo,\n multiHopComposer,\n isMultiHopComposer,\n isOriginLegacy,\n isDestinationLegacy,\n originLayerzero,\n destinationLayerzero,\n } = params;\n\n const { Options } = await import(\"@layerzerolabs/lz-v2-utilities\");\n\n const result: any = {\n needApprove: false,\n approveSpender: originLayerzeroAddress,\n sendParam: void 0,\n quoteParam: {\n ...params,\n originLayerzeroAddress: originLayerzeroAddress,\n destinationLayerzeroAddress: destinationLayerzeroAddress,\n },\n fees: {},\n totalFeesUsd: void 0,\n estimateSourceGas: void 0,\n totalEstimateSourceGas: 0n,\n estimateSourceGasUsd: void 0,\n estimateTime: 0, // seconds - dynamically calculated using LayerZero formula\n outputAmount: numberRemoveEndZero(Big(amountWei || 0).div(10 ** params.fromToken.decimals).toFixed(params.fromToken.decimals, 0)),\n };\n\n const execTime = new ExecTime({ type: \"USDT0 Tron\", logStyle: \"indigo-300\", isDebug: OpenAPI.DEBUG });\n await this.waitForTronWeb();\n execTime.log(\"waitForTronWeb\");\n\n execTime.breakpoint();\n const oftContract = await this.tronWeb.contract(abi, originLayerzeroAddress);\n execTime.log(\"tronWeb.contract originLayerzeroAddress\");\n\n execTime.breakpoint();\n const userAddress = refundTo || this.tronWeb.defaultAddress.base58;\n const approvalRequired = isOriginLegacy ? originLayerzero.oftLegacyApprovalRequired : originLayerzero.oftApprovalRequired;\n execTime.log(\"approvalRequired\");\n\n const lzReceiveOptionGas = isDestinationLegacy ? destinationLayerzero.lzReceiveOptionGasLegacy : destinationLayerzero.lzReceiveOptionGas;\n let lzReceiveOptionValue = 0;\n\n execTime.breakpoint();\n const destATA = await getDestinationAssociatedTokenAddress({\n recipient,\n toToken,\n });\n execTime.log(\"getDestinationAssociatedTokenAddress\");\n if (destATA.needCreateTokenAccount) {\n lzReceiveOptionValue = LZ_RECEIVE_VALUE[toToken.chainName] || 0;\n }\n\n let unMultiHopExtraOptions = Options.newOptions().toHex();\n if (!isMultiHopComposer && lzReceiveOptionValue) {\n unMultiHopExtraOptions = Options.newOptions().addExecutorLzReceiveOption(lzReceiveOptionGas, lzReceiveOptionValue).toHex();\n }\n\n // 2. quote send\n const sendParam: any = [\n // dstEid\n dstEid,\n // to\n // \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n addressToBytes32(toToken.chainType, recipient),\n // amountLD\n amountWei,\n // minAmountLD\n \"0\",\n // extraOptions\n unMultiHopExtraOptions,\n // composeMsg\n \"0x\",\n // oftCmd\n \"0x\",\n ];\n\n if (isMultiHopComposer) {\n // multiHopComposer: Arbitrum legacy mesh MultiHopComposer, eid = 30110\n sendParam[0] = multiHopComposer.eid; // dstEid\n sendParam[1] = addressToBytes32(\"evm\", multiHopComposer.oftMultiHopComposer); // to\n }\n\n // 0.03% fee for Legacy Mesh transfers only (native USDT0 transfers are free)\n if (isOriginLegacy || isDestinationLegacy) {\n result.fees.legacyMeshFeeUsd = numberRemoveEndZero(Big(amountWei || 0).div(10 ** fromToken.decimals).times(USDT0_LEGACY_MESH_TRANSFTER_FEE).toFixed(fromToken.decimals));\n result.outputAmount = numberRemoveEndZero(Big(Big(amountWei || 0).div(10 ** params.fromToken.decimals)).minus(result.fees.legacyMeshFeeUsd || 0).toFixed(params.fromToken.decimals, 0));\n }\n\n if (!dry) {\n execTime.breakpoint();\n const oftData = await oftContract.quoteOFT(sendParam).call();\n execTime.log(\"quoteOFT\");\n const [, , oftReceipt] = oftData;\n // The slippage is calculated based on the user-defined value and the user-input amount\n sendParam[3] = Big(amountWei).times(Big(1).minus(Big(slippageTolerance || 0).div(100))).toFixed(0);\n // The actual received amount is based on the contract return value\n result.outputAmount = numberRemoveEndZero(Big(oftReceipt[1].toString()).div(10 ** params.toToken.decimals).toFixed(params.toToken.decimals, 0));\n }\n\n // Check if the output amount exceeds the slippage tolerance\n // If it exceeds, return an error message\n this.csl(\"TronWallet quoteOFT\", \"red-600\", \"result.outputAmount: %o\", result.outputAmount);\n this.csl(\"TronWallet quoteOFT\", \"red-600\", \"slippageTolerance: %o\", slippageTolerance + \"%\");\n this.csl(\"TronWallet quoteOFT\", \"red-600\", \"Minimum received amount: %o\", Big(amountWei).div(10 ** fromToken.decimals).times(Big(1).minus(Big(slippageTolerance || 0).div(100))).toFixed(6, 0));\n if (Big(result.outputAmount).lt(Big(amountWei).div(10 ** fromToken.decimals).times(Big(1).minus(Big(slippageTolerance || 0).div(100))))) {\n result.errMsg = \"Slippage limit exceeded\";\n return result;\n }\n\n if (isMultiHopComposer) {\n let multiHopExtraOptions = Options.newOptions().toHex();\n if (lzReceiveOptionValue) {\n multiHopExtraOptions = Options.newOptions().addExecutorLzReceiveOption(lzReceiveOptionGas, lzReceiveOptionValue).toHex();\n }\n\n const composeMsgSendParam = {\n dstEid,\n to: addressToBytes32(toToken.chainType, recipient),\n amountLD: sendParam[2],\n minAmountLD: sendParam[3],\n extraOptions: multiHopExtraOptions,\n composeMsg: \"0x\",\n oftCmd: \"0x\",\n };\n execTime.breakpoint();\n const hopMsgFee = await getHopMsgFee({\n sendParam: composeMsgSendParam,\n toToken,\n });\n execTime.log(\"getHopMsgFee\");\n\n sendParam[4] = Options.newOptions()\n .addExecutorComposeOption(0, originLayerzero.composeOptionGas || 800000, hopMsgFee)\n .toHex();\n const abiCoder = ethers.AbiCoder.defaultAbiCoder();\n sendParam[5] = abiCoder.encode(\n [\"tuple(uint32 dstEid, bytes32 to, uint256 amountLD, uint256 minAmountLD, bytes extraOptions, bytes composeMsg, bytes oftCmd)\"],\n [Object.values(composeMsgSendParam)]\n );\n }\n\n execTime.breakpoint();\n const mergedCalls = [\n oftContract.quoteSend(sendParam, payInLzToken).call(),\n ];\n if (approvalRequired) {\n mergedCalls.push(\n this.allowance({\n dry,\n contractAddress: fromToken.contractAddress,\n spender: originLayerzeroAddress,\n address: userAddress,\n amountWei,\n })\n );\n }\n const [msgFee, allowanceResult] = await Promise.all(mergedCalls);\n if (approvalRequired) {\n result.needApprove = allowanceResult.needApprove;\n }\n execTime.log(\"quoteSend & allowance\", \"allowanceResult: %o\", allowanceResult);\n\n let nativeMsgFee: BigInt = msgFee[0][\"nativeFee\"];\n this.csl(\"Tron quoteOFT\", \"red-600\", \"nativeFee: %o\", nativeMsgFee);\n if (nativeMsgFee) {\n nativeMsgFee = BigInt(Big(nativeMsgFee.toString()).times(Number(NATIVE_MSG_FEE_BUFFER) / 100).toFixed(0));\n }\n this.csl(\"Tron quoteOFT\", \"red-600\", \"nativeFee after buffer: %o\", nativeMsgFee);\n result.totalEstimateSourceGas = nativeMsgFee;\n\n this.csl(\"TronWallet quoteOFT\", \"teal-400\", \"MsgFee: %o\", msgFee);\n\n result.sendParam = {\n param: [\n // sendParam\n sendParam,\n // feeParam\n [\n // nativeFee\n nativeMsgFee.toString(),\n // lzTokenFee\n msgFee[0][\"lzTokenFee\"].toString(),\n ],\n // refundAddress\n refundTo,\n ],\n options: { callValue: nativeMsgFee.toString() },\n };\n\n // this.csl(\"TronWallet quoteOFT\", \"teal-400\", \"Params: %o\", result.sendParam);\n\n // 3. estimate gas\n const nativeFeeUsd = Big(nativeMsgFee?.toString() || 0).div(10 ** fromToken.nativeToken.decimals).times(getPrice(prices, fromToken.nativeToken.symbol));\n result.fees.nativeFee = numberRemoveEndZero(Big(nativeMsgFee?.toString() || 0).div(10 ** fromToken.nativeToken.decimals).toFixed(fromToken.nativeToken.decimals));\n result.fees.nativeFeeUsd = numberRemoveEndZero(Big(nativeFeeUsd).toFixed(20));\n result.fees.lzTokenFeeUsd = numberRemoveEndZero(Big(msgFee[0][\"lzTokenFee\"]?.toString() || 0).div(10 ** fromToken.decimals).toFixed(20));\n\n const transactionParams = [\n originLayerzeroAddress,\n \"send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)\",\n result.sendParam.options,\n [\n {\n type: \"tuple(uint32,bytes32,uint256,uint256,bytes,bytes,bytes)\",\n value: result.sendParam.param[0]\n },\n {\n type: \"tuple(uint256,uint256)\",\n value: result.sendParam.param[1]\n },\n {\n type: \"address\",\n value: result.sendParam.param[2]\n }\n ],\n this.tronWeb.defaultAddress.base58 || refundTo\n ];\n\n if (!dry) {\n execTime.breakpoint();\n const tx = await this.tronWeb.transactionBuilder.triggerSmartContract(...transactionParams);\n execTime.log(\"transactionBuilder.triggerSmartContract\");\n result.sendParam.tx = tx;\n }\n\n execTime.breakpoint();\n const ett = await this.estimateTransaction({\n dry,\n transactionParams,\n fromToken,\n prices,\n defaultEnergyUsed: 300000,\n defaultRawDataHexLength: 1000,\n });\n execTime.log(\"estimateTransaction\");\n result.fees.estimateGasUsd = ett.estimateSourceGasUsd;\n result.estimateSourceGas = ett.estimateSourceGas;\n result.totalEstimateSourceGas += ett.estimateSourceGas;\n result.estimateSourceGasUsd = ett.estimateSourceGasUsd;\n\n if (result.needApprove) {\n execTime.breakpoint();\n const estApproveGas = await this.estimateApprove({\n dry,\n amountWei,\n spender: result.approveSpender,\n fromToken,\n prices,\n });\n result.estimateApproveGas = estApproveGas.estimateSourceGas;\n execTime.log(\"estimateApprove\");\n }\n\n // calculate total fees\n for (const feeKey in result.fees) {\n if (excludeFees.includes(feeKey) || !/Usd$/.test(feeKey)) {\n continue;\n }\n result.totalFeesUsd = Big(result.totalFeesUsd || 0).plus(result.fees[feeKey] || 0);\n }\n result.totalFeesUsd = numberRemoveEndZero(Big(result.totalFeesUsd).toFixed(20));\n\n result.sendParam.transactionParams = transactionParams;\n\n execTime.log(\"quoteOFT\");\n\n return result;\n }\n\n async sendTransaction(params: any) {\n const {\n tx,\n } = params;\n\n const transaction = tx?.transaction;\n if (!transaction?.raw_data) {\n throw new Error(\"Invalid transaction\");\n }\n\n this.csl(\"Tron sendTransaction\", \"red-400\", \"transaction: %o\", transaction);\n\n const startTimestamp = Date.now();\n const expirationDuration = 5 * 60 * 1000;\n const expiration = startTimestamp + expirationDuration;\n let transactionWithExpiration = {\n ...transaction,\n raw_data: {\n ...transaction.raw_data,\n expiration,\n },\n };\n\n try {\n await this.waitForTronWeb();\n transactionWithExpiration = await this.tronWeb.transactionBuilder.newTxID(transactionWithExpiration, { txLocal: true });\n } catch (error) {\n console.warn(\"Failed to refresh transaction ID after extending expiration:\", error);\n }\n\n this.csl(\"Tron sendTransaction\", \"red-400\", \"override transaction: %o\", transactionWithExpiration);\n\n const result = await this.signAndSendTransaction(transactionWithExpiration);\n\n this.csl(\"Tron sendTransaction\", \"red-400\", \"Transaction sent with result: %o\", result);\n\n if (typeof result === \"object\") {\n const code = result.code ? String(result.code) : \"\";\n const message = result.message ? String(result.message) : \"\";\n const combined = `${code} ${message}`.toUpperCase();\n if (combined.includes(\"TRANSACTION_EXPIRATION_ERROR\")\n || combined.includes(\"TRANSACTION_EXPIRED\")\n || combined.includes(\"EXPIRED\")\n ) {\n throw new Error(\"Transaction expired. Try again.\");\n }\n }\n\n this.csl(\"Tron sendTransaction\", \"red-400\", \"success: %o\", result);\n\n if (typeof result === \"string\") {\n return result;\n }\n\n return result?.txid || result?.txID || transactionWithExpiration.txID;\n }\n\n /**\n * Unified quote method that routes to specific quote methods based on type\n * @param type Service type from Service\n * @param params Parameters for the quote\n */\n async quote(type: Service, params: any) {\n switch (type) {\n case Service.Usdt0:\n return await this.quoteOFT(params);\n case Service.OneClick:\n return await this.quoteOneClickProxy(params);\n default:\n throw new Error(`Unsupported quote type: ${type}`);\n }\n }\n\n /**\n * Unified send method that routes to specific send methods based on type\n * @param type Send type from SendType enum\n * @param params Parameters for the send transaction\n */\n async send(type: SendType, params: any) {\n switch (type) {\n case SendType.SEND:\n return await this.sendTransaction(params);\n case SendType.TRANSFER:\n return await this.transfer(params);\n default:\n throw new Error(`Unsupported send type: ${type}`);\n }\n }\n\n async quoteOneClickProxy(params: any) {\n const {\n dry,\n proxyAddress,\n abi,\n fromToken,\n refundTo,\n depositAddress,\n amountWei,\n prices,\n } = params;\n\n const result: any = { fees: {} };\n\n const execTime = new ExecTime({ type: \"Oneclick Tron\", logStyle: \"indigo-400\", isDebug: OpenAPI.DEBUG });\n await this.waitForTronWeb();\n execTime.log(\"waitForTronWeb\");\n const userAddress = refundTo || this.tronWeb.defaultAddress.base58;\n\n execTime.breakpoint();\n const allowance = await this.allowance({\n dry,\n contractAddress: fromToken.contractAddress,\n address: userAddress,\n spender: proxyAddress,\n amountWei: amountWei,\n });\n result.needApprove = allowance.needApprove;\n result.approveSpender = proxyAddress;\n execTime.log(\"allowance\");\n\n const proxyParam: any = [\n // tokenAddress\n fromToken.contractAddress,\n // recipient\n depositAddress,\n // amount\n amountWei,\n ];\n result.sendParam = {\n param: proxyParam,\n };\n\n const transactionParams = [\n proxyAddress,\n \"proxyTransfer(address,address,uint256)\",\n {},\n [\n {\n type: \"address\",\n value: result.sendParam.param[0] // tokenAddress\n },\n {\n type: \"address\",\n value: result.sendParam.param[1] // recipient\n },\n {\n type: \"uint256\",\n value: result.sendParam.param[2] // amount\n }\n ],\n this.tronWeb.defaultAddress.base58 || refundTo\n ];\n\n execTime.breakpoint();\n const tx = await this.tronWeb.transactionBuilder.triggerSmartContract(...transactionParams);\n execTime.log(\"transactionBuilder.triggerSmartContract\");\n result.sendParam.tx = tx;\n\n execTime.breakpoint();\n const ett = await this.estimateTransaction({\n dry,\n transactionParams,\n fromToken,\n prices,\n defaultEnergyUsed: 200000,\n defaultRawDataHexLength: 500,\n });\n execTime.log(\"estimateTransaction\");\n result.fees.estimateGasUsd = ett.estimateSourceGasUsd;\n result.estimateSourceGas = ett.estimateSourceGas;\n result.totalEstimateSourceGas = ett.estimateSourceGas;\n result.estimateSourceGasUsd = ett.estimateSourceGasUsd;\n\n if (result.needApprove) {\n execTime.breakpoint();\n const estApproveGas = await this.estimateApprove({\n dry,\n amountWei,\n spender: result.approveSpender,\n fromToken,\n prices,\n });\n result.estimateApproveGas = estApproveGas.estimateSourceGas;\n execTime.log(\"estimateApprove\");\n }\n\n result.sendParam.transactionParams = transactionParams;\n\n execTime.logTotal(\"quoteOneClickPorxy\");\n\n return result;\n }\n\n async getAccountResources(params: any) {\n const { account } = params;\n\n const result: any = {\n energy: 0,\n bandwidth: 0,\n success: false,\n error: \"TronWeb is not initialized or the wallet is not connected\",\n };\n\n await this.waitForTronWeb();\n\n if (!this.tronWeb || !account) {\n return result;\n }\n\n try {\n let availableEnergy;\n let availableBandwidth;\n\n try {\n if (this.tronWeb.trx.getAccountResources) {\n const resources: any = await this.tronWeb.trx.getAccountResources(account);\n this.csl(\"TronWallet getAccountResources\", \"teal-400\", \"resources: %o\", resources);\n if (resources) {\n // Get available energy (EnergyLimit - EnergyUsed)\n availableEnergy = (resources.EnergyLimit || 0) - (resources.EnergyUsed || 0);\n // Get available bandwidth (NetLimit - NetUsed)\n availableBandwidth = (resources.freeNetLimit || 0) - (resources.freeNetUsed || 0);\n }\n }\n } catch (resourcesErr) {\n console.warn(\"getAccountResources API is not available, try other way:\", resourcesErr);\n }\n\n if (availableEnergy === void 0 && availableBandwidth === void 0) {\n const accountInfo: any = await this.tronWeb.trx.getAccount(account);\n\n if (accountInfo.account_resource) {\n const accountResource = accountInfo.account_resource;\n availableEnergy = (accountResource.EnergyLimit || 0) - (accountResource.EnergyUsed || 0);\n availableBandwidth = (accountResource.NetLimit || 0) - (accountResource.NetUsed || 0);\n } else if (accountInfo.energy !== undefined) {\n availableEnergy = accountInfo.energy || 0;\n }\n\n // Try to get bandwidth information\n if (accountInfo.bandwidth !== undefined) {\n if (typeof accountInfo.bandwidth === \"number\") {\n availableBandwidth = accountInfo.bandwidth;\n } else if (accountInfo.bandwidth) {\n availableBandwidth = accountInfo.bandwidth.available || accountInfo.bandwidth.freeNetUsage || 0;\n }\n }\n }\n\n result.energy = Math.max(0, availableEnergy);\n result.bandwidth = Math.max(0, availableBandwidth);\n result.success = true;\n result.error = null;\n } catch (error) {\n console.error(\"Failed to get account resources:\", error);\n }\n\n return result;\n }\n}\n\nexport { TronWallet };\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stableflow/wallet-tron",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.3-rc-fca5606ac4-20260703",
|
|
4
4
|
"description": "Tron wallet adapter for StableFlow SDK",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -24,10 +24,10 @@
|
|
|
24
24
|
"dependencies": {
|
|
25
25
|
"big.js": "^7.0.1",
|
|
26
26
|
"ethers": "^6.16.0",
|
|
27
|
-
"@stableflow/bridges": "3.0.
|
|
28
|
-
"@stableflow/
|
|
29
|
-
"@stableflow/
|
|
30
|
-
"@stableflow/utils-solana": "3.0.
|
|
27
|
+
"@stableflow/bridges": "3.0.3-rc-fca5606ac4-20260703",
|
|
28
|
+
"@stableflow/core": "3.0.3-rc-fca5606ac4-20260703",
|
|
29
|
+
"@stableflow/utils-evm": "3.0.3-rc-fca5606ac4-20260703",
|
|
30
|
+
"@stableflow/utils-solana": "3.0.3-rc-fca5606ac4-20260703"
|
|
31
31
|
},
|
|
32
32
|
"peerDependencies": {
|
|
33
33
|
"@layerzerolabs/lz-v2-utilities": "^3.0.151",
|