wative 1.1.16 → 1.1.17

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.
Files changed (64) hide show
  1. package/lib/account.d.ts +14 -0
  2. package/lib/account.d.ts.map +1 -0
  3. package/lib/assets.d.ts +11 -0
  4. package/lib/assets.d.ts.map +1 -0
  5. package/lib/chain.d.ts +6 -0
  6. package/lib/chain.d.ts.map +1 -0
  7. package/lib/config.d.ts +23 -0
  8. package/lib/config.d.ts.map +1 -0
  9. package/lib/daemon-watcher.js +181 -0
  10. package/lib/home_page.d.ts +4 -0
  11. package/lib/home_page.d.ts.map +1 -0
  12. package/lib/index.d.ts +2 -0
  13. package/lib/index.d.ts.map +1 -0
  14. package/lib/index.esm.js +1 -1
  15. package/lib/index.umd.js +1 -1
  16. package/lib/network.d.ts +28 -0
  17. package/lib/network.d.ts.map +1 -0
  18. package/lib/ssh/client.d.ts +120 -0
  19. package/lib/ssh/client.d.ts.map +1 -0
  20. package/lib/ssh/client_example.d.ts +19 -0
  21. package/lib/ssh/client_example.d.ts.map +1 -0
  22. package/lib/ssh/client_test.d.ts +27 -0
  23. package/lib/ssh/client_test.d.ts.map +1 -0
  24. package/lib/ssh/config_manager.d.ts +55 -0
  25. package/lib/ssh/config_manager.d.ts.map +1 -0
  26. package/lib/ssh/config_template.d.ts +52 -0
  27. package/lib/ssh/config_template.d.ts.map +1 -0
  28. package/lib/ssh/index.d.ts +7 -0
  29. package/lib/ssh/index.d.ts.map +1 -0
  30. package/lib/ssh/remote_server_example.d.ts +16 -0
  31. package/lib/ssh/remote_server_example.d.ts.map +1 -0
  32. package/lib/ssh/service_manager.d.ts +119 -0
  33. package/lib/ssh/service_manager.d.ts.map +1 -0
  34. package/lib/ssh/types.d.ts +45 -0
  35. package/lib/ssh/types.d.ts.map +1 -0
  36. package/lib/ssh/utils.d.ts +11 -0
  37. package/lib/ssh/utils.d.ts.map +1 -0
  38. package/lib/ssh/wative_server.d.ts +26 -0
  39. package/lib/ssh/wative_server.d.ts.map +1 -0
  40. package/lib/tools.d.ts +6 -0
  41. package/lib/tools.d.ts.map +1 -0
  42. package/lib/tx_gas_utils.d.ts +18 -0
  43. package/lib/tx_gas_utils.d.ts.map +1 -0
  44. package/lib/utils.d.ts +49 -0
  45. package/lib/utils.d.ts.map +1 -0
  46. package/lib/wative.d.ts +2 -0
  47. package/lib/wative.d.ts.map +1 -0
  48. package/lib/wative.esm.js +1 -1
  49. package/lib/wative.umd.js +1 -1
  50. package/lib/web3.d.ts +59 -0
  51. package/lib/web3.d.ts.map +1 -0
  52. package/package.json +9 -5
  53. package/src/daemon-watcher.js +181 -0
  54. package/src/ssh/client.rs +221 -0
  55. package/src/ssh/client.ts +389 -0
  56. package/src/ssh/config_manager.ts +317 -0
  57. package/src/ssh/index.ts +49 -36
  58. package/src/ssh/service_manager.ts +684 -0
  59. package/src/ssh/types.ts +35 -1
  60. package/src/ssh/wative_server.ts +1 -2
  61. package/src/wative.ts +560 -122
  62. package/bin/wative-ssh.sh +0 -44
  63. package/lib/wative-ssh.esm.js +0 -1
  64. package/lib/wative-ssh.umd.js +0 -1
package/lib/index.esm.js CHANGED
@@ -1 +1 @@
1
- import*as e from"fs";import*as t from"path";import*as n from"figlet";import r from"inquirer";import a from"web3";import{Connection as s,PublicKey as o,Transaction as c,ComputeBudgetProgram as i,SystemProgram as u}from"@solana/web3.js";import{getAssociatedTokenAddressSync as l,getMint as d,createTransferInstruction as p,createAssociatedTokenAccountInstruction as h}from"@solana/spl-token";import{Metaplex as f}from"@metaplex-foundation/js";import{BigNumber as m}from"bignumber.js";function v(e,t,n,r){return new(n||(n=Promise))(function(a,s){function o(e){try{i(r.next(e))}catch(e){s(e)}}function c(e){try{i(r.throw(e))}catch(e){s(e)}}function i(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(o,c)}i((r=r.apply(e,t||[])).next())})}function g(e,t){var n,r,a,s={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return o.next=c(0),o.throw=c(1),o.return=c(2),"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function c(c){return function(i){return function(c){if(n)throw new TypeError("Generator is already executing.");for(;o&&(o=0,c[0]&&(s=0)),s;)try{if(n=1,r&&(a=2&c[0]?r.return:c[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,c[1])).done)return a;switch(r=0,a&&(c=[2&c[0],a.value]),c[0]){case 0:case 1:a=c;break;case 4:return s.label++,{value:c[1],done:!1};case 5:s.label++,r=c[1],c=[0];continue;case 7:c=s.ops.pop(),s.trys.pop();continue;default:if(!(a=s.trys,(a=a.length>0&&a[a.length-1])||6!==c[0]&&2!==c[0])){s=0;continue}if(3===c[0]&&(!a||c[1]>a[0]&&c[1]<a[3])){s.label=c[1];break}if(6===c[0]&&s.label<a[1]){s.label=a[1],a=c;break}if(a&&s.label<a[2]){s.label=a[2],s.ops.push(c);break}a[2]&&s.ops.pop(),s.trys.pop();continue}c=t.call(e,s)}catch(e){c=[6,e],r=0}finally{n=a=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}([c,i])}}}"function"==typeof SuppressedError&&SuppressedError;var w={},b=function(e){return v(void 0,void 0,void 0,function(){var t;return g(this,function(n){switch(n.label){case 0:return t=new a(e),[4,jt(t.eth.getChainId,[])];case 1:return[2,n.sent()]}})})},y=function(e,t){return v(void 0,void 0,void 0,function(){var n;return g(this,function(r){switch(r.label){case 0:return n=new a(t),[4,jt(n.eth.getBalance,[e])];case 1:return[2,r.sent()]}})})},k=function(e,t){return v(void 0,void 0,void 0,function(){var n;return g(this,function(r){switch(r.label){case 0:return n=new s(t),[4,jt(n.getBalance.bind(n),[new o(e)])];case 1:return[2,r.sent()]}})})},S=function(e,t){return v(void 0,void 0,void 0,function(){var n,r,s,o,c;return g(this,function(i){switch(i.label){case 0:return n=new a(t),r=new n.eth.Contract([{constant:!0,inputs:[],name:"symbol",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"name",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"}],e),[4,jt(r.methods.symbol().call.bind(r),[])];case 1:return s=i.sent(),[4,jt(r.methods.name().call.bind(r),[])];case 2:return o=i.sent(),[4,jt(r.methods.decimals().call.bind(r),[])];case 3:return c=i.sent(),s.status&&o.status&&c.status?[2,{status:!0,output:{symbol:s.output,name:o.output,decimals:c.output}}]:[2,{status:!1,output:"Failed to get token info"}]}})})},x=function(e,t){return v(void 0,void 0,void 0,function(){var n,r,a,c,i,u,l;return g(this,function(p){switch(p.label){case 0:return n=new s(t),r=f.make(n),a=new o(e),[4,jt(d,[n,a])];case 1:if(c=p.sent(),i={status:!0,output:{symbol:"",name:"",decimals:""}},!c.status)return[2,{status:!1,output:"Failed to get token decimals"}];i.output.decimals=c.output.decimals,p.label=2;case 2:return p.trys.push([2,6,,7]),u=r.nfts().pdas().metadata({mint:a}),[4,n.getAccountInfo(u)];case 3:return p.sent()?[4,r.nfts().findByMint({mintAddress:a})]:[3,5];case 4:l=p.sent(),i.output.name=l.name,i.output.symbol=l.symbol,p.label=5;case 5:return[3,7];case 6:return p.sent(),[2,{status:!1,output:"Failed to get token name"}];case 7:return[2,i]}})})},N=function(e,t,n){return v(void 0,void 0,void 0,function(){var r,s,o;return g(this,function(c){switch(c.label){case 0:return r=new a(n),s=new r.eth.Contract([{constant:!0,inputs:[{name:"who",type:"address"}],name:"balanceOf",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"}],t),[4,jt(s.methods.balanceOf(e).call.bind(s),[])];case 1:return(o=c.sent()).status?[2,{status:!0,output:o.output}]:[2,{status:!1,output:"Failed to get token balance"}]}})})},O=function(e,t,n){return v(void 0,void 0,void 0,function(){var r,a,c;return g(this,function(i){switch(i.label){case 0:return r=new s(n),a=l(new o(t),new o(e)),[4,jt(r.getTokenAccountBalance.bind(r),[a])];case 1:return(c=i.sent()).status?[2,{status:!0,output:c.output.value.amount}]:c.output.includes("could not find account")?[2,{status:!0,output:"0"}]:[2,{status:!1,output:"Failed to get token balance"}]}})})},F=function(e){return v(void 0,void 0,void 0,function(){var t,n,r,a;return g(this,function(o){switch(o.label){case 0:return t=new s(e),[4,jt(t.getRecentPrioritizationFees.bind(t),[])];case 1:return(n=o.sent()).status?(r=n.output,a=r.map(function(e){return e.prioritizationFee}).sort(),[2,{status:!0,output:a.length>0?Math.ceil(a.reduce(function(e,t){return e+t})/a.length):1e3}]):[2,{status:!1,output:"Failed to get recent prioritization fees"}]}})})},P=function(e,t){return v(void 0,void 0,void 0,function(){var n,r;return g(this,function(a){switch(a.label){case 0:return n=new s(t),[4,jt(n.getAccountInfo.bind(n),[new o(e.toString())])];case 1:return(r=a.sent()).status?[2,{status:!0,output:r.output}]:[2,{status:!1,output:"Failed to get account info"}]}})})},A=function(e,t,n,r,a){return v(void 0,void 0,void 0,function(){var s,o,c,i,u;return g(this,function(l){switch(l.label){case 0:n in w?s=w[n][t]||{}:(w[n]={},s={}),o=0,c=e,l.label=1;case 1:return o<c.length?(i=c[o])?i in s?[3,12]:(u=void 0,"0"!==t?[3,6]:a?[4,y(i,r)]:[3,3]):[3,12]:[3,13];case 2:return u=l.sent(),[3,5];case 3:return[4,k(i,r)];case 4:u=l.sent(),l.label=5;case 5:return[3,10];case 6:return a?[4,N(i,t,r)]:[3,8];case 7:return u=l.sent(),[3,10];case 8:return[4,O(i,t,r)];case 9:u=l.sent(),l.label=10;case 10:return u.status&&(s[i]=u.output),[4,Jt(200)];case 11:l.sent(),l.label=12;case 12:return o++,[3,1];case 13:return w[n][t]=s,[2,w]}})})},_=function(e,t,n){for(var r=0;r<t.length;r++)for(var a=t[r],s=0;s<n.length;s++){var o=n[s];try{delete w[e][o][a]}catch(e){}}},T=["abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse","access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act","action","actor","actress","actual","adapt","add","addict","address","adjust","admit","adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent","agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert","alien","all","alley","allow","almost","alone","alpha","already","also","alter","always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger","angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique","anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic","area","arena","argue","arm","armed","armor","army","around","arrange","arrest","arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset","assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction","audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake","aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge","bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain","barrel","base","basic","basket","battle","beach","bean","beauty","because","become","beef","before","begin","behave","behind","believe","below","belt","bench","benefit","best","betray","better","between","beyond","bicycle","bid","bike","bind","biology","bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless","blind","blood","blossom","blouse","blue","blur","blush","board","boat","body","boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss","bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread","breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze","broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb","bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy","butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call","calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas","canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry","cart","case","cash","casino","castle","casual","cat","catalog","catch","category","cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century","cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase","chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child","chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle","citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk","clever","click","client","cliff","climb","clinic","clip","clock","clog","close","cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut","code","coffee","coil","coin","collect","color","column","combine","come","comfort","comic","common","company","concert","conduct","confirm","congress","connect","consider","control","convince","cook","cool","copper","copy","coral","core","corn","correct","cost","cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle","craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek","crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial","cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup","cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad","damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal","debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense","define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny","depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk","despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond","diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur","direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance","divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain","donate","donkey","donor","door","dose","double","dove","draft","dragon","drama","drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop","drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf","dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo","ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow","elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody","embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless","endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough","enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip","era","erase","erode","erosion","error","erupt","escape","essay","essence","estate","eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange","excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit","exotic","expand","expect","expire","explain","expose","express","extend","extra","eye","eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame","family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father","fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female","fence","festival","fetch","fever","few","fiber","fiction","field","figure","file","film","filter","final","find","fine","finger","finish","fire","firm","first","fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor","flee","flight","flip","float","flock","floor","flower","fluid","flush","fly","foam","focus","fog","foil","fold","follow","food","foot","force","forest","forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile","frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen","fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy","gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp","gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture","ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance","glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue","goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown","grab","grace","grain","grant","grape","grass","gravity","great","green","grid","grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt","guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy","harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health","heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden","high","hill","hint","hip","hire","history","hobby","hockey","hold","hole","holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital","host","hotel","hour","hover","hub","huge","human","humble","humor","hundred","hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea","identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune","impact","impose","improve","impulse","inch","include","income","increase","index","indicate","indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury","inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install","intact","interest","into","invest","invite","involve","iron","island","isolate","issue","item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel","job","join","joke","journey","joy","judge","juice","jump","jungle","junior","junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney","kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife","knock","know","lab","label","labor","ladder","lady","lake","lamp","language","laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit","layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal","legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level","liar","liberty","library","license","life","lift","light","like","limb","limit","link","lion","liquid","list","little","live","lizard","load","loan","lobster","local","lock","logic","lonely","long","loop","lottery","loud","lounge","love","loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad","magic","magnet","maid","mail","main","major","make","mammal","man","manage","mandate","mango","mansion","manual","maple","marble","march","margin","marine","market","marriage","mask","mass","master","match","material","math","matrix","matter","maximum","maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt","member","memory","mention","menu","mercy","merge","merit","merry","mesh","message","metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor","minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile","model","modify","mom","moment","monitor","monkey","monster","month","moon","moral","more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie","much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual","myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature","near","neck","need","negative","neglect","neither","nephew","nerve","nest","net","network","neutral","never","news","next","nice","night","noble","noise","nominee","noodle","normal","north","nose","notable","note","nothing","notice","novel","now","nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe","obtain","obvious","occur","ocean","october","odor","off","offer","office","often","oil","okay","old","olive","olympic","omit","once","one","onion","online","only","open","opera","opinion","oppose","option","orange","orbit","orchard","order","ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output","outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact","paddle","page","pair","palace","palm","panda","panel","panic","panther","paper","parade","parent","park","parrot","party","pass","patch","path","patient","patrol","pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen","penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo","phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot","pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate","play","please","pledge","pluck","plug","plunge","poem","poet","point","polar","pole","police","pond","pony","pool","popular","portion","position","possible","post","potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare","present","pretty","prevent","price","pride","primary","print","priority","prison","private","prize","problem","process","produce","profit","program","project","promote","proof","property","prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin","punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle","pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit","raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp","ranch","random","range","rapid","rare","rate","rather","raven","raw","razor","ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle","reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release","relief","rely","remain","remember","remind","remove","render","renew","rent","reopen","repair","repeat","replace","report","require","rescue","resemble","resist","resource","response","result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib","ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot","ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket","romance","roof","rookie","room","rose","rotate","rough","round","route","royal","rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness","safe","sail","salad","salmon","salon","salt","salute","same","sample","sand","satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter","scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script","scrub","sea","search","season","seat","second","secret","section","security","seed","seek","segment","select","sell","seminar","senior","sense","sentence","series","service","session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell","sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop","short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side","siege","sight","sign","silent","silk","silly","silver","similar","simple","since","sing","siren","sister","situate","six","size","skate","sketch","ski","skill","skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight","slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth","snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda","soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry","sort","soul","sound","soup","source","south","space","spare","spatial","spawn","speak","special","speed","spell","spend","sphere","spice","spider","spike","spin","spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring","spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp","stand","start","state","stay","steak","steel","stem","step","stereo","stick","still","sting","stock","stomach","stone","stool","story","stove","strategy","street","strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway","success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny","sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey","suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim","swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag","tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi","teach","team","tell","ten","tenant","tennis","tent","term","test","text","thank","that","theme","then","theory","there","they","thing","this","thought","three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber","time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler","toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool","tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist","toward","tower","town","toy","track","trade","traffic","tragic","train","transfer","trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick","trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust","truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle","twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella","unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform","unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade","uphold","upon","upper","upset","urban","urge","usage","use","used","useful","useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van","vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue","verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory","video","view","village","vintage","violin","virtual","virus","visa","visit","visual","vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage","wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash","wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather","web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat","wheel","when","where","whip","whisper","wide","width","wife","wild","will","win","window","wine","wing","wink","winner","winter","wire","wisdom","wise","wish","witness","wolf","woman","wonder","wood","wool","word","work","world","worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year","yellow","you","young","youth","zebra","zero","zone","zoo"],C=[{name:"Ethereum Mainnet",chainId:1,rpcUrl:"https://eth.llamarpc.com",nativeCurrency:{name:"ETH",symbol:"ETH",decimals:18},multicallAddress:"0xeefBa1e63905eF1D7ACbA5a8513c70307C1cE441"},{name:"Solana Mainnet",chainId:901,rpcUrl:"https://api.mainnet-beta.solana.com",nativeCurrency:{name:"SOL",symbol:"SOL",decimals:9}}],I=["901","902","903"],L=function(e){return I.includes(e)?9:18},B=function(e){return I.includes(e)?"solana":"evm"},j=require("bn.js").BN,R=require("ethereumjs-util").stripHexPrefix,z=require("bignumber.js").BigNumber;function J(e){return new j(R(e.toString("hex")),16)}var U=function(e){return e.match(/^-?0x/u)?e:e.match(/^-?0X/u)?e.replace("0X","0x"):e.startsWith("-")?e.replace("-","-0x"):"0x".concat(e)};function q(e){return U(e.toString(16))}var E=function(){function e(e){this.query=new a(a.givenProvider||e).eth}return e.prototype.analyzeGasUsage=function(e){return v(this,void 0,void 0,function(){var t,n,r,a,s,o;return g(this,function(c){switch(c.label){case 0:return[4,this.query.getBlock("latest",!1)];case 1:t=c.sent(),n=J(t.gasLimit),i=n,u=20,l=new j(19),d=new j(u),r=i.mul(l).div(d),a=q(r),c.label=2;case 2:return c.trys.push([2,4,,5]),[4,this.estimateTxGas(e)];case 3:return a=c.sent(),[3,5];case 4:return o=c.sent(),s={reason:o.message,errorKey:o.errorKey,debug:{blockNumber:t.number,blockGasLimit:t.gasLimit}},[3,5];case 5:return[2,{blockGasLimit:t.gasLimit,estimatedGasHex:a,simulationFails:s}]}var i,u,l,d})})},e.prototype.estimateTxGas=function(e){return v(this,void 0,void 0,function(){var t;return g(this,function(n){switch(n.label){case 0:return[4,this.query.estimateGas(e)];case 1:return t=n.sent(),[2,t=new z(t.toString()).multipliedBy(1.3).toFixed(0)]}})})},e.prototype.addGasBuffer=function(e,t,n){void 0===n&&(n=1.3);var r=J(e),a=J(t).muln(.9),s=r.muln(n);return r.gt(a)?q(r):s.lt(a)?q(s):q(a)},e.prototype.getBufferedGasLimit=function(e,t){return v(this,void 0,void 0,function(){var n,r,a,s;return g(this,function(o){switch(o.label){case 0:return[4,this.analyzeGasUsage(e)];case 1:return n=o.sent(),r=n.blockGasLimit,a=n.estimatedGasHex,s=n.simulationFails,[2,{gasLimit:this.addGasBuffer(U(a),r,t),simulationFails:s}]}})})},e.prototype.getGasPrice=function(){return v(this,void 0,void 0,function(){return g(this,function(e){switch(e.label){case 0:return[4,this.query.getGasPrice()];case 1:return[2,e.sent()]}})})},e.prototype.getTransactionCount=function(e){return v(this,void 0,void 0,function(){return g(this,function(t){switch(t.label){case 0:return[4,this.query.getTransactionCount(e)];case 1:return[2,t.sent()]}})})},e}(),M=require("chalk");require("wative-core").WativeCore;var D=function(e){return v(void 0,void 0,void 0,function(){var t,n,a,s,o,c,i,u,l,d;return g(this,function(p){switch(p.label){case 0:return t=[new r.Separator("————Tx Detail—————-"),"from: ".concat(e.from),"to: ".concat(e.to),"nonce: ".concat(e.nonce),"gasPrice: ".concat(e.gasPrice),"data: ".concat(e.data),"value: ".concat(e.value),"gas: ".concat(e.gas),new r.Separator("——————————————-"),"Send it now","Back"],[4,gt(t)];case 1:return n=p.sent(),1!==(a=t.indexOf(n))?[3,3]:(s=e,[4,at("from",vt)]);case 2:s.from=p.sent(),p.label=3;case 3:return 2!==a?[3,5]:(o=e,[4,at("to",vt)]);case 4:o.to=p.sent(),p.label=5;case 5:return 3!==a?[3,7]:(c=e,[4,at("nonce")]);case 6:c.nonce=p.sent(),p.label=7;case 7:return 4!==a?[3,9]:(i=e,[4,at("gasPrice")]);case 8:i.gasPrice=p.sent(),p.label=9;case 9:return 5!==a?[3,11]:(u=e,[4,Lt("data")]);case 10:u.data=p.sent(),p.label=11;case 11:return 6!==a?[3,13]:(l=e,[4,at("value")]);case 12:l.value=p.sent(),p.label=13;case 13:return 7!==a?[3,15]:(d=e,[4,at("gas")]);case 14:d.gas=p.sent(),p.label=15;case 15:return 9===a?[2,e]:10===a?[2,null]:[4,D(e)];case 16:return[2,p.sent()]}})})},G=function(e,t,n,r,s){return v(void 0,void 0,void 0,function(){var o,c,i,u,l,d,p,h,f,w,b,k,S,x,N,O,F,P,A,T,C,I,L,B,j;return g(this,function(R){switch(R.label){case 0:return[4,at("to",vt)];case 1:return o=R.sent(),[4,(c=new E(t)).getGasPrice()];case 2:return i=R.sent(),u=new m(i.toString()).dividedBy(1e9),l=u.toFixed(4,m.ROUND_FLOOR),[4,at("Gas price (".concat(l,"), agree or enter"),dt)];case 3:return d=R.sent(),p=new m(p=d||l).multipliedBy(1e9).toFixed(0),[4,(z=o,J=t,v(void 0,void 0,void 0,function(){var e,t;return g(this,function(n){switch(n.label){case 0:return e=new a(J),[4,jt(e.eth.getCode.bind(e),[z])];case 1:return(t=n.sent()).status?[2,{status:!0,output:t.output}]:[2,{status:!1,output:"Failed to get code"}]}})}))];case 4:return(h=R.sent()).status?(f="42161"===e||"421614"===e?"1700000":"21000","0x"!==h.output?[3,7]:(w="0x",[4,y(r,t)])):(console.log(M.red(h.output)),[2]);case 5:return(k=R.sent()).status?(S=new m(k.output),x=new m(p),N=S.minus(x.multipliedBy(Number(f))).toFixed(0,m.ROUND_FLOOR),O=new m(N).dividedBy(1e18).toFixed(4,m.ROUND_FLOOR),new m(O)<new m(0)?(console.log(M.red("Not enough balance")),[2]):[4,W(O,N,n,18)]):(console.log(M.red(k.output)),[2]);case 6:return b=R.sent(),[3,10];case 7:return[4,Lt("data",Bt)];case 8:return w=R.sent(),[4,at("value",lt)];case 9:b=R.sent(),R.label=10;case 10:return[4,c.getTransactionCount(r)];case 11:return F=R.sent(),[4,at("Nonce (".concat(F,"), agree or enter"))];case 12:return P=R.sent(),A=P||F.toString(),T={from:r,to:o,nonce:A,gasPrice:p,data:w,value:b},"0x"!==w?[3,13]:(T.gas=f,[3,18]);case 13:C=T.gasPrice,delete T.gasPrice,R.label=14;case 14:return R.trys.push([14,16,,17]),I=T,L="gas",[4,c.estimateTxGas(T)];case 15:return I[L]=R.sent().toString(),[3,17];case 16:return B=R.sent(),console.log(M.red("Error: "+B)),[2];case 17:T.gasPrice=C,R.label=18;case 18:return[4,D(T)];case 19:return(T=R.sent())?[4,s.account.signTransaction(r,T,t)]:[2];case 20:return(j=R.sent()).status?(console.log(M.green("Transaction hash: ".concat(j.output.transactionHash))),s.account.sendSignedTransaction(r,j.output.rawTransaction,t),_(e,[r,o],["0"]),[2]):(console.log(M.red(j.output)),[2])}var z,J})})},K=function(e,t,n,r,a){return v(void 0,void 0,void 0,function(){var l,d,p,h,f,w,b,y,S,x,N,O,P,A,T,C,I;return g(this,function(L){switch(L.label){case 0:return[4,at("to",vt)];case 1:return l=L.sent(),(d=(new c).add(u.transfer({fromPubkey:new o(r),toPubkey:new o(l),lamports:1e6}))).add(i.setComputeUnitLimit({units:2e5})),d.add(i.setComputeUnitPrice({microLamports:1e3})),d.feePayer=new o(r),[4,(B=t,v(void 0,void 0,void 0,function(){var e,t;return g(this,function(n){switch(n.label){case 0:return e=new s(B),[4,jt(e.getLatestBlockhash.bind(e),[{commitment:"finalized"}])];case 1:return(t=n.sent()).status?[2,{status:!0,output:t.output}]:[2,{status:!1,output:"Failed to get latest blockhash"}]}})}))];case 2:return(p=L.sent()).status?(d.recentBlockhash=p.output.blockhash,[4,a.account.simulateTransaction(r,t,d)]):(console.log(M.red(p.output)),[2]);case 3:return(h=L.sent()).status?h.output&&h.output.value&&0!==h.output.value.unitsConsumed&&!h.output.value.err?(f=new m(h.output.value.unitsConsumed.toString()).multipliedBy(1.2).toFixed(0,m.ROUND_CEIL),w=new m(f),[4,F(t)]):(console.log(M.red("Simulate error")),console.log("==================reason====================="),console.log(JSON.stringify(h.output,null,4)),console.log("=============================================="),[2]):(console.log(M.red(h.output)),[2]);case 4:return(b=L.sent()).status?(y=new m(b.output.toString()),S=w.multipliedBy(y).dividedBy(1e6).toFixed(0,m.ROUND_CEIL),[4,k(r,t)]):(console.log(M.red(b.output)),[2]);case 5:return(x=L.sent()).status?(N=new m(x.output),O=N.minus(5e3).minus(S),P=new m(O).dividedBy(1e9).toFixed(4,m.ROUND_FLOOR),new m(P)<new m(0)?(console.log(M.red("Not enough balance")),[2]):[4,W(P,O.toString(),n,9)]):(console.log(M.red(x.output)),[2]);case 6:return A=L.sent(),(T=new c).add(i.setComputeUnitLimit({units:Number(w)})),T.add(i.setComputeUnitPrice({microLamports:Number(y)})),T.add(u.transfer({fromPubkey:new o(r),toPubkey:new o(l),lamports:Number(A)})),T.feePayer=new o(r),T.recentBlockhash=p.output.blockhash,[4,a.account.signTransaction(r,T,t)];case 7:return(C=L.sent()).status?[4,a.account.sendSignedTransaction(r,C.output,t)]:(console.log(M.red(C.output)),[2]);case 8:return(I=L.sent()).status?(_(e,[r,l],["0"]),console.log(M.green("Transaction hash: ".concat(I.output))),[2]):(console.log(M.red(I.output)),[2])}var B})})},W=function(e,t,n,r){return v(void 0,void 0,void 0,function(){var a,s,o,c,i;return g(this,function(u){switch(u.label){case 0:return a=["> Input value","> Total Balance (".concat(e," ").concat(n,")")],[4,gt(a)];case 1:return s=u.sent(),o=a.indexOf(s),c="0",0!==o?[3,3]:[4,at("value",lt)];case 2:return i=u.sent(),c=new m(i).multipliedBy(Math.pow(10,r)).toFixed(0,m.ROUND_FLOOR),[3,4];case 3:1===o&&(c=t),u.label=4;case 4:return new m(c).isLessThanOrEqualTo(new m(t))?[2,c]:(console.log(M.red("Not enough balance")),[2,W(e,t,n,r)])}})})},$=function(e,t,n,r,s){return v(void 0,void 0,void 0,function(){var o,c,i,u,l,d,p,h,f,w,b,y,k,x,O,F,P,A,T,C,I,L,B,j,R,z,J,U,q,G,K,W;return g(this,function($){switch($.label){case 0:return[4,gt(["> Input token ticker","> Input token contract address"])];case 1:switch(o=$.sent(),o){case"> Input token ticker":return[3,2];case"> Input token contract address":return[3,10]}return[3,13];case 2:return[4,at("token ticker")];case 3:return u=$.sent(),[4,He(e,n,u)];case 4:if(0===(l=$.sent()).length)return console.log(M.red("Token not found")),[2];d=[],p=0,$.label=5;case 5:return p<l.length?[4,N(r,l[p].address,t)]:[3,8];case 6:if(!(h=$.sent()).status)return console.log(M.red(h.output)),[2];if(f=new m(h.output),w=f.dividedBy(Math.pow(10,Number(l[p].decimals))).toFixed(4,m.ROUND_FLOOR),1===l.length)return d.push("> 1. ".concat(u," Balance: ").concat(w)),[3,8];d.push("> ".concat(p+1,". ").concat(u," Balance: ").concat(w,"(").concat(l[p].address,")")),d.push(l[p].address),$.label=7;case 7:return p++,[3,5];case 8:return[4,gt(d)];case 9:return b=$.sent(),y=l[d.indexOf(b)],c=y.address,i=Number(y.decimals),[3,13];case 10:return[4,at("token contract address",vt)];case 11:return c=$.sent(),[4,S(c,t)];case 12:return(k=$.sent()).status?(i=Number(k.output.decimals),u=k.output.name,[3,13]):(console.log(M.red(k.output)),[2]);case 13:return[4,at("Receipt",vt)];case 14:return x=$.sent(),[4,N(r,c,t)];case 15:return(O=$.sent()).status?[4,(F=new E(t)).getGasPrice()]:(console.log(M.red(O.output)),[2]);case 16:return P=$.sent(),A=new m(P.toString()).dividedBy(1e9),T=A.toFixed(4,m.ROUND_FLOOR),[4,at("Gas price (".concat(T,"), agree or enter"),dt)];case 17:return C=$.sent(),I=new m(I=C||T).multipliedBy(1e9).toFixed(0),[4,Z(O.output,u,i)];case 18:return L=$.sent(),[4,(H=x,V=L,X=t,v(void 0,void 0,void 0,function(){return g(this,function(e){return[2,new a(X).eth.abi.encodeFunctionCall({constant:!1,inputs:[{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transfer",outputs:[],payable:!1,stateMutability:"nonpayable",type:"function"},[H,V])]})}))];case 19:return B=$.sent(),[4,F.getTransactionCount(r)];case 20:return j=$.sent(),[4,at("Nonce (".concat(j,"), agree or enter"))];case 21:return R=$.sent(),z=R||j.toString(),J={from:r,to:c,nonce:z,gasPrice:I,data:B,value:"0"},"0x"!==B?[3,22]:(J.gas="42161"===n||"421614"===n?"1700000":"21000",[3,27]);case 22:U=J.gasPrice,delete J.gasPrice,$.label=23;case 23:return $.trys.push([23,25,,26]),q=J,G="gas",[4,F.estimateTxGas(J)];case 24:return q[G]=$.sent().toString(),[3,26];case 25:return K=$.sent(),console.log(M.red("Failed to estimate gas, "+K.message)),[2];case 26:J.gasPrice=U,$.label=27;case 27:return[4,D(J)];case 28:return(J=$.sent())?[4,s.account.signTransaction(r,J,t)]:[2];case 29:return(W=$.sent()).status?(console.log(M.green("Transaction hash: ".concat(W.output.transactionHash))),s.account.sendSignedTransaction(r,W.output.rawTransaction,t),_(n,[r,x],["0",c]),[2]):(console.log(M.red(W.output)),[2])}var H,V,X})})},H=function(e,t,n,r,a){return v(void 0,void 0,void 0,function(){var s,u,d,f,v,w,b,y,k,S,N,A,T,C,I,L,B,j,R,z,J,U,q,E,D,G,K,W;return g(this,function(g){switch(g.label){case 0:return[4,gt(["> Input token ticker","> Input token contract address"])];case 1:switch(s=g.sent(),s){case"> Input token ticker":return[3,2];case"> Input token contract address":return[3,10]}return[3,13];case 2:return[4,at("token ticker")];case 3:return f=g.sent(),[4,He(e,n,f)];case 4:if(0===(v=g.sent()).length)return console.log(M.red("Token not found")),[2];w=[],b=0,g.label=5;case 5:return b<v.length?[4,O(r,v[b].address,t)]:[3,8];case 6:if(!(y=g.sent()).status)return console.log(M.red(y.output)),[2];if(k=new m(y.output),S=k.dividedBy(Math.pow(10,Number(v[b].decimals))).toFixed(4,m.ROUND_FLOOR),1===v.length)return w.push("> 1. ".concat(f," Balance: ").concat(S)),[3,8];w.push("> ".concat(b+1,". ").concat(f," Balance: ").concat(S,"(").concat(v[b].address,")")),w.push(v[b].address),g.label=7;case 7:return b++,[3,5];case 8:return[4,gt(w)];case 9:return N=g.sent(),A=v[w.indexOf(N)],u=A.address,d=Number(A.decimals),[3,13];case 10:return[4,at("token contract address",vt)];case 11:return u=g.sent(),[4,x(u,t)];case 12:return(T=g.sent()).status?(d=Number(T.output.decimals),f=T.output.name,[3,13]):(console.log(M.red(T.output)),[2]);case 13:return[4,at("Receipt",vt)];case 14:return C=g.sent(),[4,O(r,u,t)];case 15:return(I=g.sent()).status?[4,Z(I.output,f,d)]:(console.log(M.red(I.output)),[2]);case 16:return L=g.sent(),B=l(new o(u),new o(r),!0),[4,P(B.toString(),t)];case 17:return(j=g.sent()).status?j.output&&j.output.owner.toString()!==o.default?(R=l(new o(u),new o(C),!1),[4,P(R.toString(),t)]):(console.log(M.red("From token account not found")),[2]):(console.log(M.red(j.output)),[2]);case 18:return(z=g.sent()).status?(J=new c,U=new c,z.output&&z.output.owner.toString()!==o.default||(J.add(h(new o(r),new o(R),new o(C),new o(u))),U.add(h(new o(r),new o(R),new o(C),new o(u)))),J.add(p(B,R,new o(r),Number(L))),J.add(i.setComputeUnitLimit({units:2e5})),J.add(i.setComputeUnitPrice({microLamports:1e3})),J.feePayer=new o(r),[4,a.account.simulateTransaction(r,t,J)]):(console.log(M.red(z.output)),[2]);case 19:return(q=g.sent()).status?q.output&&q.output.value&&0!==q.output.value.unitsConsumed&&!q.output.value.err?(E=new m(q.output.value.unitsConsumed.toString()),E=new m(Math.ceil(1.2*Number(E))),[4,F(t)]):(console.log(M.red("Simulate error")),console.log("==================reason====================="),console.log(JSON.stringify(q.output,null,4)),console.log("=============================================="),[2]):(console.log(M.red(q.output)),[2]);case 20:return(D=g.sent()).status?(G=new m(D.output.toString()),U.add(p(B,R,new o(r),Number(L))),U.add(i.setComputeUnitLimit({units:Number(E)})),U.add(i.setComputeUnitPrice({microLamports:Number(G)})),J.feePayer=new o(r),[4,a.account.signTransaction(r,U,t)]):(console.log(M.red(D.output)),[2]);case 21:return(K=g.sent()).status?[4,a.account.sendSignedTransaction(r,K.output,t)]:(console.log(M.red(K.output)),[2]);case 22:return(W=g.sent()).status?(_(n,[r,C],["0",u]),console.log(M.green("Transaction hash: ".concat(W.output))),[2]):(console.log(M.red(W.output)),[2])}})})},Z=function(e,t,n){return v(void 0,void 0,void 0,function(){var r,a,s,o,c,i;return g(this,function(u){switch(u.label){case 0:return r=new m(e).dividedBy(Math.pow(10,n)).toFixed(4,m.ROUND_FLOOR),a=["> Input amount","> Total Balance (".concat(r," ").concat(t,")")],[4,gt(a)];case 1:return s=u.sent(),o=a.indexOf(s),c="0",0!==o?[3,3]:[4,at("amount",lt)];case 2:return i=u.sent(),c=new m(i).multipliedBy(Math.pow(10,n)).toFixed(0,m.ROUND_FLOOR),[3,4];case 3:1===o&&(c=e),u.label=4;case 4:return new m(c).isLessThanOrEqualTo(new m(e))?[2,c]:(console.log(M.red("Not enough balance")),[2,Z(e,t,n)])}})})},V=function(e,t,n,a){return v(void 0,void 0,void 0,function(){var s,o,c,i,u,l,d,p,h;return g(this,function(f){switch(f.label){case 0:return s=De(e,t,n),o=ze(e,s),c=Rt(n),o!==c&&("evm"===c&&(s="Ethereum Mainnet"),"solana"===c&&(s="Solana Mainnet"),o=ze(e,s)),"evm"!==o?[3,3]:[4,It("Network (".concat(s,"), want a change?"),!1)];case 1:return f.sent()?(i=Ge(e),[4,gt(i,"Select a network")]):[3,3];case 2:u=f.sent(),s=u,f.label=3;case 3:return[4,Me(n,e,s)];case 4:return(l=f.sent()).status?(d=Je(e,s),console.log(M.green(" ".concat(d.nativeCurrency.symbol," Balance: ").concat(l.output))),p=["> Send Raw Tx","> Send Token",new r.Separator("----------------------------------"),"> Back"],[4,gt(p)]):(console.log(M.red(l.output)),[2]);case 5:switch(h=f.sent(),h){case"> Send Raw Tx":return[3,6];case"> Send Token":return[3,11];case"> Back":return[3,16]}return[3,17];case 6:return"evm"!==c?[3,8]:[4,G(d.chainId.toString(),d.rpcUrl,d.nativeCurrency.symbol,n,a)];case 7:f.sent(),f.label=8;case 8:return"solana"!==c?[3,10]:[4,K(d.chainId.toString(),d.rpcUrl,d.nativeCurrency.symbol,n,a)];case 9:f.sent(),f.label=10;case 10:return[3,17];case 11:return"evm"!==c?[3,13]:[4,$(e,d.rpcUrl,d.chainId.toString(),n,a)];case 12:f.sent(),f.label=13;case 13:return"solana"!==c?[3,15]:[4,H(e,d.rpcUrl,d.chainId.toString(),n,a)];case 14:f.sent(),f.label=15;case 15:return[3,17];case 16:case 17:return[2]}})})},X=function(e,t,n,a){return v(void 0,void 0,void 0,function(){var s,o,c,i;return g(this,function(u){switch(u.label){case 0:return s=["> SendTx","> SignMessage",new r.Separator("----------------------------------"),"> Back"],[4,gt(s)];case 1:switch(o=u.sent(),o){case"> SendTx":return[3,2];case"> SignMessage":return[3,4];case"> Back":return[3,6]}return[3,7];case 2:return[4,V(e,t,n,a)];case 3:return u.sent(),[3,7];case 4:return[4,Lt("Input the message to sign")];case 5:return c=u.sent(),(i=a.account.signMessage(n,c)).status?(console.log(M.green("Signature: "+i.output)),[3,7]):(console.log(M.red(i.output)),[3,7]);case 6:return[2];case 7:return[4,X(e,t,n,a)];case 8:return u.sent(),[2]}})})},Q=function(e,t){return v(void 0,void 0,void 0,function(){var n,a,s,o,c,i,u;return g(this,function(l){switch(l.label){case 0:return n=["> Send Tx","> Search Accounts",new r.Separator("----------------------------------"),"> Back"],[4,gt(n)];case 1:return"> Back"===(a=l.sent())?[2]:"> Send Tx"!==a?[3,3]:[4,at("Input address to send tx",vt)];case 2:s=l.sent(),l.label=3;case 3:return"> Search Accounts"!==a?[3,5]:[4,at("Input part address to send tx",ut)];case 4:s=l.sent(),l.label=5;case 5:return null!==(o=t.account.getAccountLabel(s))?[3,7]:(console.log(M.red("Account not found")),[4,Q(e,t)]);case 6:return l.sent(),[2];case 7:return c=o.account_label,i=Nt(e,c),s=o.account_address,null!==c?[3,9]:(console.log(M.red("Account not found")),[4,Q(e,t)]);case 8:return l.sent(),[2];case 9:return[4,ot(e,c,s)];case 10:return null!==(u=l.sent())?[3,12]:(console.log(M.red("Account not found")),[4,Q(e,t)]);case 11:return l.sent(),[2];case 12:return console.log(M.green("Address found!\n address: ".concat(s,"\n account name: [").concat(i,"]\n account index: #").concat(u))),[4,de(e,c,t)];case 13:return l.sent().isLoginIn?[3,15]:[4,Q(e,t)];case 14:return l.sent(),[2];case 15:return[4,X(e,c,s,t)];case 16:return l.sent(),[4,Q(e,t)];case 17:return l.sent(),[2]}})})},Y=require("chalk");require("dotenv").config();var ee=require("cli-progress");require("wative-core").WativeCore;var te={keystore_slug:"",default_account_index:0},ne=function(e){return v(void 0,void 0,void 0,function(){var t,n,r,a,s;return g(this,function(o){switch(o.label){case 0:return t=ie(e),n=[],t.accounts&&(n=t.accounts),[4,Pt("Account Name",n)];case 1:return null===(r=o.sent())?[2,null]:[4,Ct("Please set a password for Account [".concat(r,"]"))];case 2:return a=o.sent(),[4,Re(e)];case 3:return s=o.sent(),[2,{account_name:r,password:a,selected_default_network:s}]}})})},re=function(n,r){return v(void 0,void 0,void 0,function(){var a,s,o,c,i,u,l;return g(this,function(d){switch(d.label){case 0:return[4,ne(n)];case 1:return(a=d.sent())?[4,Tt("Please enter a mnemonic [split by space]",pt)]:[2];case 2:return s=(s=d.sent()).replace(/\s+/g," "),o=Ot(a.account_name),(c=r.account.generatePPAccount(o,s,a.password)).status?(i=t.join(n,"accounts/".concat(o,".json")),c.output.default_network=a.selected_default_network,e.writeFileSync(i,JSON.stringify(c.output,null,4)),u=t.resolve(n,"network.json"),(l=JSON.parse(e.readFileSync(u,"utf8"))).accounts.push(a.account_name),e.writeFileSync(u,JSON.stringify(l,null,4)),[2]):(console.log(Y.red(c.output)),[2])}})})},ae=function(n,r){return v(void 0,void 0,void 0,function(){var a,s,o,c,i;return g(this,function(u){switch(u.label){case 0:return[4,ne(n)];case 1:return(a=u.sent())?[4,At("Please enter a private key")]:[2];case 2:return s=u.sent(),o=Ot(a.account_name),[4,oe(n,a.password,o,s,a.selected_default_network,r,!0)];case 3:return u.sent(),c=t.resolve(n,"network.json"),(i=JSON.parse(e.readFileSync(c,"utf8"))).accounts.push(a.account_name),e.writeFileSync(c,JSON.stringify(i,null,4)),[2]}})})},se=function(n,r,a,s){return v(void 0,void 0,void 0,function(){var o,c,i;return g(this,function(u){switch(u.label){case 0:return[4,at("Please enter a private key")];case 1:return o=u.sent(),c=t.join(n,"accounts/".concat(a,".json")),i=JSON.parse(e.readFileSync(c,"utf8")),[4,oe(n,r,a,o,i.default_network,s,!1)];case 2:return u.sent(),[2]}})})},oe=function(n,r,a,s,o,c,i){return v(void 0,void 0,void 0,function(){var u,l,d,p,h;return g(this,function(f){switch(f.label){case 0:return[4,Je(n,o)];case 1:return u=f.sent(),"evm"!==B(u.chainId.toString())||s.startsWith("0x")||(s="0x"+s),[4,c.account.generatePKAccount(a,s,r,u.chainId.toString(),i)];case 2:if(!(l=f.sent()).status)return console.log(Y.red(l.output)),[2];if(d=t.join(n,"accounts/".concat(a,".json")),e.existsSync(d))if("data"in(h=JSON.parse(e.readFileSync(d,"utf8")))){if(h.data.map(function(e){return e.ciphertexts.address}).includes(l.output.ciphertexts.address))return console.log(Y.red("The account has already been imported")),[2];h.data.push({ciphertexts:l.output.ciphertexts}),p=h}else h.data=[{ciphertexts:h.ciphertexts}],delete h.ciphertexts,h.data.push({ciphertexts:l.output.ciphertexts}),p=h;else l.output.data=[{ciphertexts:l.output.ciphertexts}],delete l.output.ciphertexts,l.output.default_network=o,p=l.output;return e.writeFileSync(d,JSON.stringify(p,null,4)),c.account.reloadAccount(),[2]}})})},ce=function(e,t){return v(void 0,void 0,void 0,function(){var n,a;return g(this,function(s){switch(s.label){case 0:return n=["> Import Passphrase","> Import Private Key",new r.Separator("----------------------------------"),"> Back"],[4,gt(n)];case 1:switch(a=s.sent(),a){case"> Import Passphrase":return[3,2];case"> Import Private Key":return[3,4];case"> Back":return[3,6]}return[3,7];case 2:return[4,re(e,t)];case 3:case 5:return s.sent(),[3,7];case 4:return[4,ae(e,t)];case 6:return[2];case 7:return t.account.reloadAccount(),[2]}})})},ie=function(n){var r=t.resolve(n,"network.json");return JSON.parse(e.readFileSync(r,"utf8"))},ue=function(n,r){var a=t.join(n,"accounts/".concat(r,".json"));return JSON.parse(e.readFileSync(a,"utf8"))},le=function(n,r,a){var s=t.join(n,"accounts/".concat(r,".json"));e.writeFileSync(s,JSON.stringify(a,null,4))},de=function(e,t,n){return v(void 0,void 0,void 0,function(){var r,a,s,o,c,i;return g(this,function(u){switch(u.label){case 0:if(n.account.isLogin(t))return[2,{isLoginIn:!0}];r=0,u.label=1;case 1:return r<3?(a=Nt(e,t),s="WATIVE_PASSWD_"+t,o=void 0,process.env[s]&&""!==process.env[s]?(o=process.env[s],[3,5]):[3,2]):[3,9];case 2:return process.env.WativePassword&&""!==process.env.WativePassword?(o=process.env.WativePassword,[3,5]):[3,3];case 3:return[4,_t("Please input the password for Account [".concat(a,"]"))];case 4:o=u.sent(),u.label=5;case 5:return o?[4,n.account.login(t,o)]:(console.log(Y.red("Password can't be empty")),[2,{isLoginIn:!1}]);case 6:return(c=u.sent()).status?[2,{isLoginIn:!0,password:o}]:[4,gt(["> Try Again","> Back"],c.output)];case 7:if("> Back"===(i=u.sent()))return[2,{isLoginIn:!1}];if("> Try Again"===i)return[3,8];u.label=8;case 8:return r++,[3,1];case 9:return[2,{isLoginIn:!1}]}})})},pe=function(e,t){return v(void 0,void 0,void 0,function(){var n,a,s,o,c,i,u,l,d,p,h,f;return g(this,function(m){switch(m.label){case 0:if(n=ie(e),a=n.accounts,s=["> Back",new r.Separator("----------------------------------")],0===(o=a.length))return console.log(Y.red("No address here yet")),[2];for(c=0;c<o;c++)i=a[c],u=Ot(i),"data"in(l=ue(e,u))?s.push("".concat(c+1,") ").concat(i," [").concat(l.account_type,":").concat(l.data.length,"]")):s.push("".concat(c+1,") ").concat(i," [").concat(l.account_type,":1]"));return[4,gt(s,"Select an account")];case 1:return"> Back"===(d=m.sent())?[2]:(p=a[s.indexOf(d)-2],h=Ot(p),console.log(Y.green("Keystore slug: [".concat(h,"]"))),[4,de(e,h,t)]);case 2:return(f=m.sent()).isLoginIn?[4,fe(e,h,t,f.password)]:[3,4];case 3:m.sent(),m.label=4;case 4:return[4,pe(e,t)];case 5:return m.sent(),[2]}})})},he=function(e,t,n){return v(void 0,void 0,void 0,function(){var n,a,s,o,c,i,u,l,d,p,h,f,m,v,w,b,y,k,S,x;return g(this,function(g){switch(g.label){case 0:return[4,ue(e,t)];case 1:return n=g.sent(),a=["> Disabled Slots","> Add Single","> Add Range",new r.Separator("----------------------------------"),"> Back"],[4,gt(a)];case 2:switch(s=g.sent(),s){case"> Back":return[3,3];case"> Disabled Slots":return[3,4];case"> Add Single":return[3,7];case"> Add Range":return[3,9]}return[3,11];case 3:return[2];case 4:if(!(o=n.disabled_slots)||0===o.length)return console.log(Y.red("No disabled slots here yet")),[3,11];for(c=n.data,i=["> Back",new r.Separator("----------------------------------")],u=n.default_network,l=0;l<o.length;l++){if(d=o[l].from,p=o[l].to,h=u,f=u,"default_network"in c[d]&&(h=c[d].default_network),"default_network"in c[p]&&(f=c[p].default_network),m=ze(e,h),v=ze(e,f),"evm"!==m&&"solana"!==m)throw new Error("Invalid network type: ".concat(m));if("evm"!==v&&"solana"!==v)throw new Error("Invalid network type: ".concat(v));w=void 0,b=void 0,w="evm"===m?c[d].ciphertexts.evm.address:c[p].ciphertexts.solana.address,b="evm"===v?c[p].ciphertexts.evm.address:c[p].ciphertexts.solana.address,d===p?i.push("".concat(l+1,". ").concat(w,"[").concat(d,"]")):i.push("".concat(l+1,". ").concat(w,"[").concat(d,"]-").concat(b,"[").concat(p,"]"))}return[4,gt(i)];case 5:return"> Back"===(y=g.sent())?[3,11]:[4,It("Are you sure to delete the ".concat(y,"?"),!0)];case 6:return g.sent()?(k=i.indexOf(y)-2,n.disabled_slots.splice(k,1),le(e,t,n),[3,11]):[3,11];case 7:return[4,ct(n,"Input address or index")];case 8:return null===(S=g.sent())?(console.log(Y.red("Invalid account index")),[3,11]):(n.disabled_slots?n.disabled_slots.push({from:S,to:S}):n.disabled_slots=[{from:S,to:S}],le(e,t,n),[3,11]);case 9:return[4,st(n)];case 10:return(x=g.sent())?(n.disabled_slots?n.disabled_slots.push(x):n.disabled_slots=[x],le(e,t,n),[3,11]):(console.log(Y.red("Invalid account range")),[3,11]);case 11:return[4,he(e,t)];case 12:return g.sent(),[2]}})})},fe=function(e,t,n,a){return v(void 0,void 0,void 0,function(){var s,o,c,i,u,l,d,p;return g(this,function(h){switch(h.label){case 0:return[4,ue(e,t)];case 1:return s=h.sent(),o="PP"===s.account_type?["> Address List","> Expand Address","> Slice Address","> Disable Address","> Reset Account Password","> Switch Networks [".concat(s.default_network,"]"),"> Remove",new r.Separator("----------------------------------"),"> Back"]:["> Address List","> Import Private Key","> Remove Address","> Reset Account Password","> Switch Networks [".concat(s.default_network,"]"),"> Remove",new r.Separator("----------------------------------"),"> Back"],[4,gt(o)];case 2:switch(c=h.sent(),c){case"> Address List":return[3,3];case"> Expand Address":return[3,5];case"> Import Private Key":return[3,8];case"> Slice Address":return[3,10];case"> Remove Address":return[3,13];case"> Disable Address":return[3,15];case"> Reset Account Password":return[3,17];case"> Switch Networks [".concat(s.default_network,"]"):return[3,21];case"> Remove":return[3,23];case"> Back":return[3,25]}return[3,26];case 3:return[4,me(e,t,n)];case 4:case 7:case 9:case 12:case 14:case 16:case 22:return h.sent(),[3,26];case 5:return[4,at("Expand accounts count",ht)];case 6:return i=h.sent(),Number(i)>2e3?(console.log(Y.red("Too many accounts, please input less than 2000")),[3,26]):[4,ge(e,t,Number(i),n)];case 8:return[4,se(e,a,t,n)];case 10:return[4,at("Please input last account number",ft)];case 11:return u=h.sent(),[4,we(e,t,Number(u),n)];case 13:return[4,be(e,t,n)];case 15:return[4,he(e,t)];case 17:return l=Nt(e,t),[4,Ct("Please input new password for Account [".concat(l,"]"))];case 18:return d=h.sent(),[4,Ct("Please confirm new password for Account [".concat(l,"]"))];case 19:return p=h.sent(),d&&p&&d===p?[4,n.account.resetPassword(t,d)]:(console.log(Y.red("Passwords do not match")),[3,26]);case 20:case 24:case 27:return h.sent(),[2];case 21:return[4,Ee(e,t,!0)];case 23:return[4,ye(e,t)];case 25:return[2];case 26:return[4,fe(e,t,n,a)]}})})},me=function(e,t,n){return v(void 0,void 0,void 0,function(){var a,s,o,c,i,u,l,d,p,h,f,m,v,w,b,y,k,S,x,N;return g(this,function(g){switch(g.label){case 0:return[4,ue(e,t)];case 1:for(a=g.sent(),s=["> Back",new r.Separator("----------------------------------")],o=[null,null],c=a.disabled_slots,i=Ke(e),u=a.default_network,l=Je(e,u),d=B(l.chainId.toString()),p=a.data.length.toString().length+1,h=0;h<a.data.length;h++)f=a.data[h].tag?"(".concat(a.data[h].tag,")"):"",m=n.account.checkIsDisableAddress(c,h),v=void 0,v="PP"===a.account_type?"evm"===d?a.data[h].ciphertexts.evm.address:a.data[h].ciphertexts.solana.address:a.data[h].ciphertexts.address,o.push(v),m?s.push(new r.Separator(Y.yellow("#".concat(h.toString().padEnd(p)," ").concat(Ut(v,i.fullAddr)," ").concat(f)))):s.push("#".concat(h.toString().padEnd(p)," ").concat(Ut(v,i.fullAddr)," ").concat(f));return w=te.keystore_slug===t?s[te.account_index]:s[0],b=te.keystore_slug===t&&te.account_index>0,[4,$e(e,l.chainId.toString())];case 2:return y=g.sent(),b&&te.account_index>15?(S=s.slice(0,te.account_index-15),x=s.slice(te.account_index-15),k=x.concat(S)):k=s.slice(0),[4,Dt(k,"evm"===d,e,y,l,i.gasToken,i.extendedToken,b,"Select an account",w)];case 3:return"> Back"===(N=g.sent())?[2]:(te.keystore_slug=t,te.account_index=s.indexOf(N),[4,ve(e,t,s.indexOf(N)-2,n)]);case 4:return g.sent(),[4,me(e,t,n)];case 5:return g.sent(),[2]}})})},ve=function(e,t,n,a){return v(void 0,void 0,void 0,function(){var s,o,c,i,u,l,d,p,h,f,m,v;return g(this,function(g){switch(g.label){case 0:return[4,ue(e,t)];case 1:return s=g.sent(),o=s.default_network,c=Ue(e,t,n),[4,Je(e,o)];case 2:return i=g.sent(),[4,Me(c,e,o)];case 3:return(u=g.sent()).status?console.log(Y.green(" Address No: #".concat(n,"\n Network: ").concat(o,"\n ").concat(i.nativeCurrency.symbol," Balance: ").concat(u.output))):console.log(Y.green(" Address No: #".concat(n,"\n Network: ").concat(o,"\n ").concat(i.nativeCurrency.symbol))),l="> Tag","tag"in s.data[n]&&""!==s.data[n].tag&&(l="> Tag(".concat(s.data[n].tag,")")),d=["> Tools","> Show address","> Assets",l,"> Reload balances","> Dump private key",new r.Separator("----------------------------------"),"> Back"],[4,gt(d)];case 4:switch(p=g.sent(),p){case"> Tools":return[3,5];case"> Show address":return[3,7];case"> Assets":return[3,9];case"> Reload balances":return[3,11];case l:return[3,13];case"> Dump private key":return[3,15];case"> Back":return[3,17]}return[3,18];case 5:return[4,X(e,t,c,a)];case 6:case 8:case 10:case 12:return g.sent(),[3,18];case 7:return[4,qe(e,t,n)];case 9:return[4,Ze(e,o,c)];case 11:return[4,Ve(e,o,c)];case 13:return h="Current tag","tag"in s.data[n]&&""!==s.data[n].tag&&(h="Current tag (".concat(s.data[n].tag,")")),[4,at(h,it)];case 14:return f=g.sent(),s.data[n].tag=f.replace(/\s+/g," ").trim(),le(e,t,s),[3,18];case 15:return m=Ue(e,t,n),[4,a.account.showPrivateKey(m)];case 16:return v=g.sent(),console.log("account: ",m),console.log("private key: ",v),[3,18];case 17:case 18:return[2]}})})},ge=function(e,t,n,r){return v(void 0,void 0,void 0,function(){var a,s,o,c,i;return g(this,function(u){switch(u.label){case 0:return[4,ue(e,t)];case 1:a=u.sent(),s=a.data.length,(o=new ee.SingleBar({},ee.Presets.legacy)).start(n,0),c=s,u.label=2;case 2:return c<s+n?[4,r.account.generateSubAccount(t,c)]:[3,5];case 3:if(!(i=u.sent()).status)return console.log(Y.red(i.output)),[2];a.data.push({ciphertexts:i.output}),o.increment(),u.label=4;case 4:return c++,[3,2];case 5:return o.stop(),le(e,t,a),r.account.reloadAccount(),[2]}})})},we=function(e,t,n,r){return v(void 0,void 0,void 0,function(){var a;return g(this,function(s){switch(s.label){case 0:return[4,ue(e,t)];case 1:return(a=s.sent()).data=a.data.slice(0,n+1),le(e,t,a),r.account.reloadAccount(),[2]}})})},be=function(e,t,n){return v(void 0,void 0,void 0,function(){var r,a;return g(this,function(s){switch(s.label){case 0:return[4,at("Please input the accountIndex to remove this account",lt)];case 1:return"0"===(r=s.sent())?(console.log(Y.red("Can't remove the first account")),[2]):[4,ue(e,t)];case 2:return a=s.sent(),[4,It("Are you sure you want to remove this account(".concat(a.data[r].ciphertexts.address,")"),!0)];case 3:return s.sent()?(a.data.splice(Number(r),1),le(e,t,a),n.account.reloadAccount(),[2]):[2]}})})},ye=function(n,r){return v(void 0,void 0,void 0,function(){var a,s,o,c,i,u;return g(this,function(l){switch(l.label){case 0:return[4,at("Please input the account name to remove this account")];case 1:return a=l.sent(),s=Nt(n,r),a!==s?(console.log(Y.red("Can't remove this account")),[2]):[4,It("Are you sure you want to remove this account(".concat(s,")"),!0)];case 2:return l.sent()?(o=t.join(n,"accounts/".concat(r,".json")),e.rmSync(o),c=t.resolve(n,"network.json"),e.existsSync(c)?(i=JSON.parse(e.readFileSync(c,"utf8")),u=i.accounts.indexOf(s),i.accounts.splice(u,1),e.writeFileSync(c,JSON.stringify(i,null,2)),[2]):[2]):[2]}})})},ke=function(n,a){return v(void 0,void 0,void 0,function(){var s,o,c,i,u;return g(this,function(l){switch(l.label){case 0:return s=t.resolve(n,"accounts"),e.existsSync(s)||e.mkdirSync(s),o=ie(n),c=o.accounts,i=0===c.length?["> Create a new account",new r.Separator("----------------------------------"),"> Back"]:["> Select an account","> Create a new account",new r.Separator("----------------------------------"),"> Back"],[4,gt(i)];case 1:switch(u=l.sent(),u){case"> Select an account":return[3,2];case"> Create a new account":return[3,4];case"> Back":return[3,6]}return[3,7];case 2:return[4,pe(n,a)];case 3:case 5:return l.sent(),[3,7];case 4:return[4,ce(n,a)];case 6:return[2];case 7:return[4,ke(n,a)];case 8:return l.sent(),[2]}})})},Se=require("chalk"),xe=function(n){return v(void 0,void 0,void 0,function(){var r,a;return g(this,function(s){return r=t.resolve(n,"network.json"),e.existsSync(r)||(a={networks:C,currentNetwork:"Ethereum Mainnet",accounts:[]},e.writeFileSync(r,JSON.stringify(a,null,2))),[2]})})},Ne=function(e,t){return v(void 0,void 0,void 0,function(){var n,a;return g(this,function(s){switch(s.label){case 0:return n=["> Edit"],"Ethereum Mainnet"!==t.name&&"Solana Mainnet"!==t.name&&n.push("> Remove"),n.push(new r.Separator("----------------------------------")),n.push("> Back"),[4,gt(n)];case 1:switch(a=s.sent(),a){case"> Edit":return[3,2];case"> Remove":return[3,4];case"> Back":return[3,6]}return[3,7];case 2:return[4,Oe(e,t)];case 3:case 5:return s.sent(),[3,7];case 4:return[4,Fe(e,t)];case 6:return[3,7];case 7:return[2]}})})},Oe=function(n,r){return v(void 0,void 0,void 0,function(){var a,s,o,c,i,u,l,d,p,h,f,m,v;return g(this,function(g){switch(g.label){case 0:for(a=t.resolve(n,"network.json"),s=JSON.parse(e.readFileSync(a,"utf8")),o=[],v=0;v<s.networks.length;v++)c=s.networks[v],o.push(c.name);return i=r.rpcUrl,u=r.chainId.toString(),l=r.nativeCurrency.symbol,d=r.name,p=r.multicallAddress,h=r.color,"Ethereum Mainnet"!==r.name&&"Solana Mainnet"!==r.name?[3,2]:[4,yt(r.chainId.toString(),"Rpc Url (default: ".concat(r.rpcUrl,")"),!0)];case 1:return i=g.sent(),[3,9];case 2:return[4,at("Chain Name (default: ".concat(r.name,")"))];case 3:return(d=g.sent())&&d!==r.name&&o.includes(d)?(console.log(Se.red("Chain Name already exists")),[2]):[4,bt("Chain Id (default: ".concat(r.chainId,")"),!0)];case 4:return u=g.sent(),[4,yt(u||r.chainId,"RPC Url (default: ".concat(r.rpcUrl,")"),!0)];case 5:return i=g.sent(),[4,St("Symbol (default: ".concat(r.nativeCurrency.symbol,")"))];case 6:return l=g.sent(),[4,kt(r.multicallAddress?"Multicall Address (Optional) (default: ".concat(r.multicallAddress,")"):"Multicall Address (Optional)")];case 7:return p=g.sent(),[4,xt(r.color?"Color (Optional): (default: ".concat(r.color,")"):"Color (Optional)")];case 8:h=g.sent(),g.label=9;case 9:for(i=i||r.rpcUrl,u=u||r.chainId.toString(),l=l||r.nativeCurrency.symbol,d=d||r.name,p=p||r.multicallAddress,h=h||r.color,f=L(u.toString()),m={name:d||r.name,chainId:Number(u)||r.chainId,rpcUrl:i||r.rpcUrl,nativeCurrency:{name:l||r.nativeCurrency.symbol,symbol:l||r.nativeCurrency.symbol,decimals:f||r.nativeCurrency.decimals}},(p||r.multicallAddress)&&(m.multicallAddress=p||r.multicallAddress),(h||r.color)&&(m.color=h||r.color),v=0;v<s.networks.length;v++)if(s.networks[v].name===r.name){s.networks[v]=m;break}return e.writeFileSync(a,JSON.stringify(s,null,2)),[2]}})})},Fe=function(n,r){return v(void 0,void 0,void 0,function(){var a,s,o;return g(this,function(c){for(a=t.resolve(n,"network.json"),s=JSON.parse(e.readFileSync(a,"utf8")),o=0;o<s.networks.length;o++)if(s.networks[o].name===r.name){s.networks.splice(o,1);break}return r.name===s.currentNetwork&&(s.currentNetwork="Ethereum Mainnet"),e.writeFileSync(a,JSON.stringify(s,null,2)),[2]})})},Pe=function(n){return v(void 0,void 0,void 0,function(){var r,a,s,o,c,i,u,l,d,p,h,f,m;return g(this,function(v){switch(v.label){case 0:for(r=t.resolve(n,"network.json"),a=JSON.parse(e.readFileSync(r,"utf8")),s=[],o=0;o<a.networks.length;o++)c=a.networks[o],s.push(c.name);return console.log(Se.green("Please input someting about network")),[4,at("Chain Name")];case 1:return i=v.sent(),s.includes(i)?(console.log(Se.red("Chain Name already exists")),[2]):[4,bt("Chain Id")];case 2:return(u=v.sent())?[4,yt(u,"RPC Url")]:[2];case 3:return(l=v.sent())?[4,St("Symbol")]:[2];case 4:return(d=v.sent())?[4,kt("Multicall Address (Optional)")]:[2];case 5:return p=v.sent(),[4,xt("Color (Optional)")];case 6:return h=v.sent(),f=L(u.toString()),m={name:i,chainId:Number(u),rpcUrl:l,nativeCurrency:{name:d,symbol:d,decimals:f}},p&&(m.multicallAddress=p),h&&(m.color=h),a.networks.push(m),e.writeFileSync(r,JSON.stringify(a,null,2)),[2]}})})},Ae=function(n){return v(void 0,void 0,void 0,function(){var a,s,o,c,i,u,l,d,p,h,f,m,v;return g(this,function(g){switch(g.label){case 0:for(a=t.resolve(n,"network.json"),s=JSON.parse(e.readFileSync(a,"utf8")),o=[],c=[],l=0;l<s.networks.length;l++)p=s.networks[l],"solana"===B(p.chainId.toString())?c.push(l):o.push(l);for(i=["> Back","+ Add Network",new r.Separator("----Networks(evm)----")],l=0;l<o.length;l++)u=o[l],p=s.networks[u],h="".concat(l+1,".").concat(p.name),0===l&&(h+=" 🔒"),i.push(h);for(i.push(new r.Separator("----Networks(solana)----")),l=0;l<c.length;l++)d=c[l],p=s.networks[d],h="".concat(l+1,".").concat(p.name),0===l&&(h+=" 🔒"),i.push(h);return[4,gt(i)];case 1:return"> Back"===(f=g.sent())?[2]:"+ Add Network"!==f?[3,3]:[4,Pe(n)];case 2:case 5:return g.sent(),[2];case 3:return m=i.indexOf(f),v=m<o.length+3?s.networks[o[m-3]]:s.networks[c[m-o.length-4]],[4,Ne(n,v)];case 4:return g.sent(),[4,Ae(n)]}})})},_e=function(e){return v(void 0,void 0,void 0,function(){var t,n;return g(this,function(a){switch(a.label){case 0:return t=["> Enhanced Balance Display",new r.Separator("----------------------------------"),"> Back"],[4,gt(t)];case 1:switch(n=a.sent(),n){case"> Enhanced Balance Display":return[3,2];case"> Back":return[3,4]}return[3,5];case 2:return[4,Be(e)];case 3:return a.sent(),[3,5];case 4:return[2];case 5:return[4,_e(e)];case 6:return a.sent(),[2]}})})},Te=function(n){return v(void 0,void 0,void 0,function(){var a,s,o,c,i,u,l;return g(this,function(d){switch(d.label){case 0:return a=t.resolve(n,"network.json"),"status"in(s=JSON.parse(e.readFileSync(a,"utf8")))||(s.status={fullAddr:!1,gasToken:!1,extendedToken:!1}),o=["> Show Full Address [".concat(s.status.fullAddr?"ON":"OFF","]"),"> Show Gas Token [".concat(s.status.gasToken?"ON":"OFF","]"),"> Show Extended Token[".concat(s.status.extendedToken?"ON":"OFF","]"),new r.Separator("----------------------------------"),"> Back"],[4,gt(o)];case 1:return"> Back"===(c=d.sent())?[2]:c.includes("Full Address")?(i=s.status,[4,Ce()]):[3,3];case 2:return i.fullAddr=d.sent(),[3,7];case 3:return c.includes("Gas Token")?(u=s.status,[4,Ce()]):[3,5];case 4:return u.gasToken=d.sent(),[3,7];case 5:return c.includes("Extended Token")?(l=s.status,[4,Ce()]):[3,7];case 6:l.extendedToken=d.sent(),d.label=7;case 7:return e.writeFileSync(a,JSON.stringify(s,null,2)),[2]}})})},Ce=function(){return v(void 0,void 0,void 0,function(){return g(this,function(e){switch(e.label){case 0:return[4,gt(["> On","> Off"])];case 1:switch(e.sent()){case"> On":return[2,!0];case"> Off":return[2,!1]}return[2]}})})},Ie=function(n,r){var a=t.resolve(n,"network.json"),s=JSON.parse(e.readFileSync(a,"utf8")).showTokens;return r in s?s[r]:[]},Le=function(n){return v(void 0,void 0,void 0,function(){var a,s,o,c,i,u,l,d,p,h,f,m,v,w,b,y,k,S,x,N,O;return g(this,function(g){switch(g.label){case 0:for(a=t.resolve(n,"network.json"),s=JSON.parse(e.readFileSync(a,"utf8")),o={},c=0,i=s.networks;c<i.length;c++)u=i[c],o[u.chainId.toString()]=u.name;if(l=t.resolve(n,"assets.json"),!zt(l))return console.log(Se.red("No asset here yet")),[2];for(m in d=JSON.parse(e.readFileSync(l,"utf8")),p=[],h=[],f={},d)for(f[p.length]={name:o[m],address:null},p.push(new r.Separator("----- Networks (".concat(o[m],") -------"))),v=Ie(n,o[m]),w=d[m].length,S=0;S<w;S++)b=d[m][S],v.includes(b.address)&&h.push("".concat(S+1,".").concat(b.symbol.padEnd(6)," CA: ").concat(Se.green("".concat(Ut(b.address).padEnd(45)))," Decimals: ").concat(b.display_decimals?b.display_decimals:"4")),f[p.length]={name:o[m],address:b.address},p.push("".concat(S+1,".").concat(b.symbol.padEnd(6)," CA: ").concat(Se.green("".concat(Ut(b.address).padEnd(45)))," Decimals: ").concat(b.display_decimals?b.display_decimals:"4"));return[4,wt(p,"Choose Tokens",h)];case 1:for(y=g.sent(),k={},S=0;S<y.length;S++)x=y[S],N=p.indexOf(x),(O=f[N]).name in k?k[O.name].push(O.address):k[O.name]=[O.address];return s.showTokens=k,e.writeFileSync(a,JSON.stringify(s,null,2)),[2]}})})},Be=function(e){return v(void 0,void 0,void 0,function(){var t,n;return g(this,function(a){switch(a.label){case 0:return t=["> Status","> Token List","> Add Token",new r.Separator("----------------------------------"),"> Back"],[4,gt(t)];case 1:switch(n=a.sent(),n){case"> Status":return[3,2];case"> Token List":return[3,4];case"> Add Token":return[3,6];case"> Back":return[3,8]}return[3,9];case 2:return[4,Te(e)];case 3:case 5:case 7:return a.sent(),[3,9];case 4:return[4,Le(e)];case 6:return[4,Qe(e)];case 8:return[2];case 9:return[4,Be(e)];case 10:return a.sent(),[2]}})})},je=function(e){return v(void 0,void 0,void 0,function(){var t,n;return g(this,function(a){switch(a.label){case 0:return t=["> Networks","> Dataview",new r.Separator("----------------------------------"),"> Back"],[4,gt(t)];case 1:switch(n=a.sent(),n){case"> Networks":return[3,2];case"> Dataview":return[3,4];case"> Back":return[3,6]}return[3,7];case 2:return[4,Ae(e)];case 3:case 5:return a.sent(),[3,7];case 4:return[4,_e(e)];case 6:return[2];case 7:return[4,je(e)];case 8:return a.sent(),[2]}})})},Re=function(n){return v(void 0,void 0,void 0,function(){var r,a,s;return g(this,function(o){switch(o.label){case 0:return r=t.resolve(n,"network.json"),a=JSON.parse(e.readFileSync(r,"utf8")),s=a.networks.map(function(e){return"> ".concat(e.name)}),[4,gt(s,"Please select a default network")];case 1:return[2,o.sent().slice(2)]}})})},ze=function(n,r){for(var a=t.resolve(n,"network.json"),s=JSON.parse(e.readFileSync(a,"utf8")),o=0;o<s.networks.length;o++){var c=s.networks[o];if(c.name===r)return B(c.chainId.toString())}return"unknown"},Je=function(n,r){for(var a=t.resolve(n,"network.json"),s=JSON.parse(e.readFileSync(a,"utf8")),o=0;o<s.networks.length;o++){var c=s.networks[o];if(c.name===r)return c}return null},Ue=function(e,t,n){var r=ue(e,t);if("PK"===r.account_type)return r.data[n].ciphertexts.address;var a=r.default_network,s=ze(e,a);return"solana"===s?r.data[n].ciphertexts.solana.address:"evm"===s?r.data[n].ciphertexts.evm.address:null},qe=function(n,r,a){return v(void 0,void 0,void 0,function(){var s,o,c,i,u,l,d,p,h,f,m;return g(this,function(v){for(s=t.resolve(n,"network.json"),o=JSON.parse(e.readFileSync(s,"utf8")),c=o.networks,i=c.length,u=ue(n,r),l=u.default_network,d=ze(n,l),p=0;p<i;p++)h=c[p],f=ze(n,h.name),"PK"===u.account_type&&d!==f||(m=void 0,m="PK"===u.account_type?u.data[a].ciphertexts.address:"evm"===f?u.data[a].ciphertexts.evm.address:u.data[a].ciphertexts.solana.address,h.name===l?console.log("● ".concat(m," [").concat(h.name,"]")):console.log("○ ".concat(m," [").concat(h.name,"]")));return[2]})})},Ee=function(n,a,s){return v(void 0,void 0,void 0,function(){var o,c,i,u,l,d,p,h,f,m,v,w,b,y,k,S,x;return g(this,function(g){switch(g.label){case 0:for(o=t.resolve(n,"network.json"),c=JSON.parse(e.readFileSync(o,"utf8")),i=c.networks,u=i.length,l=ue(n,a),d=["> Back",new r.Separator("----------------------------------")],p=l.default_network,h="",s||(h=l.ciphertexts.address),f=[],m=ze(n,p),v=0;v<u;v++)w=i[v],b=ze(n,w.name),"PK"===l.account_type&&m!==b||(w.name===p?s?d.push("● ".concat(w.name)):d.push("● ".concat(h," [").concat(w.name,"]")):s?d.push("○ ".concat(w.name)):d.push("○ ".concat(h," [").concat(w.name,"]")),f.push(w.name));return[4,gt(d)];case 1:return"> Back"===(y=g.sent())||(k=d.indexOf(y),l.default_network=f[k-2],le(n,a,l),s||(S=l.default_network,x=Je(n,S),console.log(Se.green(" Address No: #0\n Network: ".concat(S,"\n ").concat(x.nativeCurrency.symbol," Balance: 0"))))),[2]}})})},Me=function(e,t,n){return v(void 0,void 0,void 0,function(){var r,a,s,o,c;return g(this,function(i){switch(i.label){case 0:return r=Je(t,n),a=r.rpcUrl,s=r.nativeCurrency.decimals,"solana"!==B(r.chainId.toString())?[3,2]:[4,k(e,a)];case 1:return o=i.sent(),[3,4];case 2:return[4,y(e,a)];case 3:o=i.sent(),i.label=4;case 4:return o.status&&(c=new m(o.output.toString()),o.output=c.dividedBy(Math.pow(10,s)).toFixed(4,m.ROUND_FLOOR)),_(r.chainId.toString(),[e],["0"]),[2,o]}})})},De=function(e,t,n){var r=ue(e,t);if("PK"===r.account_type)return r.default_network;for(var a=0;a<r.data.length;a++)if(r.data[a].ciphertexts.solana.address===n||r.data[a].ciphertexts.evm.address===n)return"default_network"in r.data[a]?r.data[a].default_network:r.default_network;return null},Ge=function(n){for(var r=t.resolve(n,"network.json"),a=JSON.parse(e.readFileSync(r,"utf8")).networks,s=a.length,o=[],c=0;c<s;c++)"evm"===B(a[c].chainId.toString())&&o.push(a[c].name);return o},Ke=function(n){var r=t.resolve(n,"network.json");return JSON.parse(e.readFileSync(r,"utf8")).status},We=require("chalk"),$e=function(n,r){return v(void 0,void 0,void 0,function(){var a,s,o;return g(this,function(c){return a=t.join(n,"assets.json"),zt(a)?(s=e.readFileSync(a).toString(),o=JSON.parse(s),r in o?[2,o[r]]:[2,[]]):[2,[]]})})},He=function(e,t,n){return v(void 0,void 0,void 0,function(){var r,a,s;return g(this,function(o){switch(o.label){case 0:return[4,$e(e,t)];case 1:for(r=o.sent(),a=[],s=0;s<r.length;s++)r[s].symbol.toLocaleLowerCase()===n.toLocaleLowerCase()&&a.push(r[s]);return[2,a]}})})},Ze=function(e,t,n){return v(void 0,void 0,void 0,function(){var r,a,s,o,c,i;return g(this,function(u){switch(u.label){case 0:return r=Je(e,t),a=B(r.chainId.toString()),[4,$e(e,r.chainId.toString())];case 1:return(s=u.sent())?[4,Ye(n,s,r.rpcUrl,a,r.chainId.toString())]:(console.log(We.red("No asset found")),[2]);case 2:for(o=u.sent(),c=1,i=0;i<o.length;i++)"0"!==o[i].balance&&"0.0000"!==o[i].balance&&(console.log(We.green("".concat(c,". ").concat(o[i].symbol," Balance: ").concat(o[i].balance))),c+=1);return 1===c&&console.log(We.red("No asset found")),[2]}})})},Ve=function(e,t,n){return v(void 0,void 0,void 0,function(){var r,a,s;return g(this,function(o){switch(o.label){case 0:return r=Je(e,t),[4,$e(e,r.chainId.toString())];case 1:return a=o.sent(),(s=a.map(function(e){return e.address})).push("0"),_(r.chainId.toString(),[n],s),[2]}})})},Xe=function(n,r,a,s,o,c,i){return v(void 0,void 0,void 0,function(){var u,l,d,p;return g(this,function(h){for(u=t.join(n,"assets.json"),l={},zt(u)&&(d=e.readFileSync(u).toString(),l=JSON.parse(d)),void 0===l[r]&&(l[r]=[]),p=0;p<l[r].length;p++)if(l[r][p].address.toLocaleLowerCase()===a.toLocaleLowerCase()||l[r][p].symbol.toLocaleLowerCase()===s.toLocaleLowerCase())return l[r][p]={address:a,symbol:s,name:o,decimals:c,display_decimals:i},e.writeFileSync(u,JSON.stringify(l,null,4)),[2];return l[r].push({address:a,symbol:s,name:o,decimals:c,display_decimals:i}),e.writeFileSync(u,JSON.stringify(l,null,4)),[2]})})},Qe=function(n){return v(void 0,void 0,void 0,function(){var r,a,s,o,c,i,u,l,d,p,h,f,m,v;return g(this,function(g){switch(g.label){case 0:for(r=t.resolve(n,"network.json"),a=JSON.parse(e.readFileSync(r,"utf8")),s=[],o=a.networks,c=0;c<o.length;c++)s.push("".concat(c+1,". ").concat(o[c].name));return[4,gt(s)];case 1:return i=g.sent(),u=i.split(".")[1].trim(),l=ze(n,u),d=Je(n,u),[4,at("Enter contract address",vt)];case 2:return p=g.sent(),"evm"!==l?[3,4]:(w=p).startsWith("0x")&&42===w.length?[4,S(p,d.rpcUrl)]:(console.log(We.red("evm address format error")),[2]);case 3:return h=g.sent(),[3,6];case 4:return function(e){return/^[A-HJ-NP-Za-km-z1-9]*$/.test(e)}(p)?[4,x(p,d.rpcUrl)]:(console.log(We.red("solana address format error")),[2]);case 5:h=g.sent(),g.label=6;case 6:return h.status?h.output.name?[3,8]:(f=h.output,[4,at("Please input token name")]):(console.log(We.red(h.output)),[2]);case 7:f.name=g.sent(),g.label=8;case 8:return h.output.symbol?[3,10]:(m=h.output,[4,at("Please input token symbol")]);case 9:m.symbol=g.sent(),g.label=10;case 10:return console.log(We.green("Token ".concat(h.output.symbol,"(").concat(h.output.name,") loaded successfully."))),[4,at("Enter decimals for display",lt)];case 11:return v=g.sent(),v=parseInt(v),[4,Xe(n,d.chainId.toString(),p,h.output.symbol,h.output.name,h.output.decimals,v)];case 12:return g.sent(),[2]}var w})})},Ye=function(e,t,n,r,a){return v(void 0,void 0,void 0,function(){var s,o,c,i,u,l,d,p,h;return g(this,function(f){switch(f.label){case 0:for(s=t.length,o=[],u=0;u<s;u++)l=t[u],"evm"===r?o.push(N(e,l.address,n)):"solana"===r&&o.push(O(e,l.address,n));return[4,Promise.all(o)];case 1:for(c=f.sent(),i=[],u=0;u<s;u++){if(l=t[u],d=l.decimals,!c[u].status)return console.log(We.red(c[u].output)),[2,null];p=new m(c[u].output),h=p.dividedBy(Math.pow(10,d)).toFixed(4,m.ROUND_FLOOR),i.push({address:l.address,symbol:l.symbol,balance:h}),_(a,[e],[l.address])}return _(a,[e],["0"]),[2,i]}})})},et=function(e,t,n,r,a,s,o){return v(void 0,void 0,void 0,function(){var c,i,u,l,d,p,h,f,v;return g(this,function(g){switch(g.label){case 0:return c=n.length,i=Je(e,a),u=B(i.chainId.toString()),l="evm"===u,s?[4,A(t,"0",i.chainId.toString(),r,l)]:[3,2];case 1:g.sent(),g.label=2;case 2:if(!o)return[3,6];d=Ie(e,a),p=0,g.label=3;case 3:return p<c?(h=n[p],f=h.address,d.includes(f)?[4,A(t,f,i.chainId.toString(),r,l)]:[3,5]):[3,6];case 4:g.sent(),g.label=5;case 5:return p++,[3,3];case 6:return v=function(e,t,n,r){var a={};if(!(e in w))return a;n.unshift({address:"0",name:r.nativeCurrency.name,symbol:r.nativeCurrency.symbol,decimals:r.nativeCurrency.decimals,display_decimals:4});for(var s=t.length,o=0;o<s;o++){var c=t[o];if(c)for(var i=0;i<n.length;i++){var u=n[i],l="0";w[e][u.address]&&(c in w[e][u.address]&&(l=new m(w[e][u.address][c]).dividedBy(Math.pow(10,u.decimals)).toFixed(u.display_decimals||4,m.ROUND_FLOOR)),a[c]||(a[c]={}),a[c][u.symbol]=l)}}return a}(i.chainId.toString(),t,n,i),[2,v]}})})},tt=require("chalk"),nt=process.env.HOME||process.env.USERPROFILE,rt="".concat(nt,"/.wative"),at=function(e,t){return v(void 0,void 0,void 0,function(){var n;return g(this,function(a){switch(a.label){case 0:return n=[{name:"inputText",type:"input",message:"".concat(e,":"),validate:t}],[4,r.prompt(n)];case 1:return[2,a.sent().inputText.trim().toString()]}})})},st=function(e){return v(void 0,void 0,void 0,function(){var t,n,r;return g(this,function(a){switch(a.label){case 0:t=0,a.label=1;case 1:return t<5?[4,ct(e,"Input start address or index")]:[3,5];case 2:return(n=a.sent())?[4,ct(e,"Input end address or index")]:(console.log(tt.red("Invalid start account index")),[2,null]);case 3:return(r=a.sent())?n>r?(console.log(tt.red("Invalid address range")),[3,4]):[2,{from:n,to:r}]:(console.log(tt.red("Invalid end account index")),[2,null]);case 4:return t++,[3,1];case 5:return[2,null]}})})},ot=function(n,r,a){return v(void 0,void 0,void 0,function(){var s,o,c,i,u,l;return g(this,function(d){if(s=t.join(n,"accounts/".concat(r,".json")),!e.existsSync(s))return[2,null];if(o=JSON.parse(e.readFileSync(s,"utf8")),c=o.data,i=o.account_type,0===(u=c.length))return[2,null];for(l=0;l<u;l++){if("PK"===i&&c[l].ciphertexts.address.toLocaleLowerCase()===a.toLocaleLowerCase())return[2,l.toString()];if("PP"===i&&(c[l].ciphertexts.evm.address.toLocaleLowerCase()===a.toLocaleLowerCase()||c[l].ciphertexts.solana.address.toLocaleLowerCase()===a.toLocaleLowerCase()))return[2,l.toString()]}return[2,null]})})},ct=function(e,t){return v(void 0,void 0,void 0,function(){var n,r,a,s,o,c,i,u;return g(this,function(l){switch(l.label){case 0:if(n=e.data,0===(r=n.length))return[2,null];for(a=[],s=[],c=0;c<r;c++)a.push(n[c].ciphertexts.evm.address.toLocaleLowerCase()),s.push(n[c].ciphertexts.solana.address.toLocaleLowerCase());o=r-1,c=0,l.label=1;case 1:return c<5?[4,at(t,mt)]:[3,4];case 2:if(i=l.sent(),"unknown"===(u=Rt(i)))return Number(i)>o?(console.log(tt.red("Invalid account index")),[3,3]):[2,Number(i)];if("evm"===u&&-1!==a.indexOf(i.toLocaleLowerCase()))return[2,a.indexOf(i.toLocaleLowerCase())];if("solana"===u&&-1!==s.indexOf(i.toLocaleLowerCase()))return[2,s.indexOf(i.toLocaleLowerCase())];l.label=3;case 3:return c++,[3,1];case 4:return[2,null]}})})},it=function(e){return""===e||((e=e.replace(/\s+/g," ").trim()).length>40?"Tag length should be less than 10":!1!==/^[0-9a-zA-Z\s]*$/g.test(e)||"Tag should be alphanumeric")},ut=function(e){return!(e.length<6)||"Address length should be greater than 6"},lt=function(e){return!isNaN(Number(e))||"Value should be a number"},dt=function(e){return!(isNaN(Number(e))||Number(e)>1e3)||"Value should be a number"},pt=function(e){var t=(e=e.replace(/\s+/g," ")).split(/\s+/g);if(12!==t.length&&24!==t.length)return"Passphrase should be equal to 12 or 24 words";for(var n=0;n<t.length;n++)if(!1===T.includes(t[n]))return"Passphrase word should be valid";return!0},ht=function(e){var t=Number(e);return isNaN(t)?"Amount should be a number":!(t>2e3)||"Amount should be less than 2000"},ft=function(e){var t=Number(e);return!isNaN(t)||"Last account no should be a number"},mt=function(e){return!1===isNaN(Number(e))||vt(e)},vt=function(e){return"unknown"!=Rt(e)||"Address should be valid"},gt=function(e,t,n){return v(void 0,void 0,void 0,function(){var a;return g(this,function(s){switch(s.label){case 0:return a=[{type:"list",name:"inputText",message:t||"Choose an option",default:n,choices:e,pageSize:30,filter:function(e){return e}}],[4,r.prompt(a)];case 1:return[2,s.sent().inputText.toString()]}})})},wt=function(e,t,n){return v(void 0,void 0,void 0,function(){var a;return g(this,function(s){switch(s.label){case 0:return a=[{type:"checkbox",name:"inputText",message:t||"Choose an option",default:n,choices:e,pageSize:30,filter:function(e){return e}}],[4,r.prompt(a)];case 1:return[2,s.sent().inputText]}})})},bt=function(e,t){return void 0===t&&(t=!1),v(void 0,void 0,void 0,function(){var n,r;return g(this,function(a){switch(a.label){case 0:n=0,a.label=1;case 1:return n<5?[4,at(e)]:[3,4];case 2:if(""===(r=a.sent())&&t)return[2,null];if(/^[0-9]*$/g.test(r))return[2,r];a.label=3;case 3:return n++,[3,1];case 4:return[2,null]}})})},yt=function(e,t,n){return void 0===n&&(n=!1),v(void 0,void 0,void 0,function(){var r,a,s,o;return g(this,function(c){switch(c.label){case 0:r=0,c.label=1;case 1:return r<5?[4,at(t)]:[3,7];case 2:a=c.sent(),c.label=3;case 3:return c.trys.push([3,5,,6]),""===a&&n?[2,null]:"solana"===B(e.toString())?[2,a]:[4,b(a)];case 4:return(s=c.sent()).status?s.output.toString()===e.toString()?[2,a]:(console.log(tt.red("Rpc url not match chain id")),[3,6]):(console.log(tt.red(s.output)),[3,6]);case 5:return o=c.sent(),console.log(tt.red(o.message)),[3,6];case 6:return r++,[3,1];case 7:return[2,null]}})})},kt=function(e){return v(void 0,void 0,void 0,function(){var t,n;return g(this,function(r){switch(r.label){case 0:t=0,r.label=1;case 1:return t<5?[4,at(e)]:[3,4];case 2:if(""===(n=r.sent()))return[2,null];if(""!==n&&42!==n.length)return console.log(tt.red("Multicall address length must be 42")),[3,3];r.label=3;case 3:return t++,[3,1];case 4:return[2,null]}})})},St=function(e){return v(void 0,void 0,void 0,function(){var t,n,r;return g(this,function(a){switch(a.label){case 0:t=/^[A-Za-z][0-9a-zA-Z]*$/g,n=0,a.label=1;case 1:return n<5?[4,at(e)]:[3,4];case 2:if(""===(r=a.sent()))return[2,null];if(t.test(r))return[2,r];a.label=3;case 3:return n++,[3,1];case 4:return[2,null]}})})},xt=function(e){return v(void 0,void 0,void 0,function(){var t,n,r;return g(this,function(a){switch(a.label){case 0:t=/^#[0-9A-Fa-f]{6}$/g,n=0,a.label=1;case 1:return n<5?[4,at(e)]:[3,4];case 2:if(""===(r=a.sent()))return[2,null];if(t.test(r))return[2,r];a.label=3;case 3:return n++,[3,1];case 4:return[2,null]}})})},Nt=function(e,t){var n=ie(e).accounts,r=Ft(n).indexOf(t);return-1!==r?n[r]:t},Ot=function(e){return e=(e=(e=(e=e.trim()).toLocaleLowerCase()).replace(/\s+/g,"-").trim()).replace(/\-+/g,"-").trim()},Ft=function(e){for(var t=[],n=0;n<e.length;n++)t.push(Ot(e[n]));return t},Pt=function(e,t){return v(void 0,void 0,void 0,function(){var n,r,a,s,o;return g(this,function(c){switch(c.label){case 0:n=Ft(t),r=/^(?![-_])[a-zA-Z0-9_-]{4,40}(?<![-_])$/g,a=0,c.label=1;case 1:return a<5?[4,at(e)]:[3,4];case 2:if(s=(s=c.sent()).trim(),o=Ot(s),r.test(o))return n.includes(o)?(console.log(tt.red("Account name already exists")),[3,3]):[2,s];c.label=3;case 3:return a++,[3,1];case 4:return[2,null]}})})},At=function(e,t){return v(void 0,void 0,void 0,function(){var n;return g(this,function(a){switch(a.label){case 0:return n=[{name:"inputText",type:"password",mask:"#",message:"".concat(e,":"),validate:t}],[4,r.prompt(n)];case 1:return[2,a.sent().inputText.trim().toString()]}})})},_t=function(e){return v(void 0,void 0,void 0,function(){var t;return g(this,function(n){switch(n.label){case 0:return t=[{name:"password",type:"password",mask:"#",message:"".concat(e,":")}],[4,r.prompt(t)];case 1:return[2,n.sent().password]}})})},Tt=function(e,t){return v(void 0,void 0,void 0,function(){var n;return g(this,function(a){switch(a.label){case 0:return n=[{name:"inputText",type:"input",message:"".concat(e,":"),validate:t,transformer:function(e){var t=e.split(" ");return t.map(function(e,n){return n<t.length-1?"#".repeat(e.length):e}).join(" ")}}],[4,r.prompt(n)];case 1:return[2,a.sent().inputText.trim().toString()]}})})},Ct=function(e){return v(void 0,void 0,void 0,function(){var t,n,a;return g(this,function(s){switch(s.label){case 0:return t=0,n=[{name:"password",type:"password",mask:"#",message:"".concat(e,":"),validate:function(e){return t>=3||(n=e,r="Password must contain at least: \n",a=!0,s=" ",o=tt.green("✔"),c=tt.red("✖"),n.length>=8?r+=s+o+" 8 characters\n":(r+=s+c+" 8 characters\n",a=!1),/[0-9]/.test(n)?r+=s+o+" One numerical character\n":(r+=s+c+" One numerical character\n",a=!1),/[A-Z]/.test(n)?r+=s+o+" One uppercase letter\n":(r+=s+c+" One uppercase letter\n",a=!1),/[!@#$%]/.test(n)?r+=s+o+" One sepcial character (i.e. !@#$%)\n":(r+=s+c+" One sepcial character (i.e. !@#$%)\n",a=!1),!!a||r);var n,r,a,s,o,c}}],[4,r.prompt(n)];case 1:return a=s.sent().password,t>=3&&(a=null),[2,a]}})})},It=function(e,t){return void 0===t&&(t=!0),v(void 0,void 0,void 0,function(){var n;return g(this,function(a){switch(a.label){case 0:return n=[{name:"confirm",type:"confirm",message:"".concat(e),default:t}],[4,r.prompt(n)];case 1:return[2,a.sent().confirm]}})})},Lt=function(e,t){return v(void 0,void 0,void 0,function(){var n;return g(this,function(a){switch(a.label){case 0:return n=[{name:"editor",type:"editor",message:"".concat(e),validate:t}],[4,r.prompt(n)];case 1:return[2,a.sent().editor.trim().toString()]}})})},Bt=function(e){return!!/^0x[0-9a-fA-F]*$/g.test(e.trim())},jt=function(e,t){return v(void 0,void 0,void 0,function(){var n,r,a;return g(this,function(s){switch(s.label){case 0:return s.trys.push([0,2,,3]),[4,e.apply(void 0,t)];case 1:return r=s.sent(),n={status:!0,output:r},[3,3];case 2:return a=s.sent(),n={status:!1,output:a.toString()},[3,3];case 3:return[2,n]}})})},Rt=function(e){return e.startsWith("0x")&&42===e.length?"evm":/^[A-HJ-NP-Za-km-z1-9]*$/.test(e)&&e.length<=44&&e.length>=32?"solana":"unknown"},zt=function(t){return t=t.trim(),e.existsSync(t)},Jt=function(e){return new Promise(function(t){return setTimeout(t,e)})},Ut=function(e,t){return void 0===t&&(t=!0),t?e:e.startsWith("0x")?e.slice(0,8)+"..."+e.slice(-6):e.slice(0,6)+"..."+e.slice(-6)},qt=function(e,t){if(!e.name)return null;var n=null;if(t)n=(n=/0x[0-9a-fA-f]{40}/.exec(e.name))?n[0]:null;else{var r=/\s+([0-9a-zA-Z]*)/.exec(e.name);"Back"===(n=r?r[1]:null)&&(n=null)}return n},Et=function(e,t,n){var r,a;return e<t/2?n/2<=t?(r=0,a=n/2):(r=0,a=t):n/2<=t?(r=0,a=n/2):(r=e-t/2+1,a=e+t/2+1),{fromIndex:r,toIndex:a}},Mt=function(e,t){for(var n=[],r=0;r<e.length;r++){var a=qt(e[r],t);n.push(a)}return n.concat(n)},Dt=function(e,t,n,a,s,o,c,i,u,l){return v(void 0,void 0,void 0,function(){var d,p,h,f,m,v,b,y,k,S,x,N,O,F,P,A,_,T,C,I,L,B,j,R;return g(this,function(g){switch(g.label){case 0:d=[{type:"list",name:"inputText",message:u||"Choose an option",choices:e,pageSize:30,default:l,loop:!0,filter:function(e){return e}}],p=r.prompt(d),h=0,f=0,g.label=1;case 1:return p.ui.activePrompt.answers[p.ui.activePrompt.opt.name]?[3,5]:i?[3,3]:[4,Jt(1e3)];case 2:g.sent(),g.label=3;case 3:return m===p.ui.activePrompt.selected?[3,1]:(h===p.ui.activePrompt.selected?f+=1:(f=0,h=p.ui.activePrompt.selected),!i||(f=6,i=!1,v=p.ui.activePrompt.opt.pageSize,b=Mt(p.ui.activePrompt.opt.choices.choices,t),y=Et(h,v,b.length),k=y.fromIndex,S=y.toIndex,x=b.slice(k,S),function(e,t){var n=0;if(e in w&&"0"in w[e])for(var r=0;r<t.length;r++)t[r]in w[e][0]&&(n+=1);return 0!==n&&n/t.length>.8}(s.chainId.toString(),x))?f<5?[3,1]:(f=0,N=p.ui.activePrompt.opt.pageSize,O=Mt(p.ui.activePrompt.opt.choices.choices,t),F=Et(h,N,O.length),P=F.fromIndex,A=F.toIndex,_=O.slice(P,A),[4,et(n,_,a,s.rpcUrl,s.name,o,c)]):(f=0,[3,1]));case 4:for(I in T=g.sent(),C={},T)for(L in T[I])B=T[I][L],j=B.length+1,C[L]?C[L]<j&&(C[L]=j):C[L]=j;return R=s.nativeCurrency.symbol,function(e,t,n,r,a,s,o,c,i){for(var u=c;u<i;u++){var l=u>=t.length/2?u-t.length/2:u,d=e[l];if(d.name){var p=d.name,h=t[u],f="";if(h){for(var m in n[h])(s||m!==a)&&(o||m===a)&&(p.includes(m)||(f+="".concat(m,":").concat(n[h][m].padEnd(r[m])," ")));var v=p.split("(");if(v.length>1){var g=v[1];e[l].name=v[0]+" ".concat(f)+"(".concat(g)}else e[l].name=v[0]+" ".concat(f)}}}}(p.ui.activePrompt.opt.choices.choices,O,T,C,R,o,c,P,A),p.ui.activePrompt.screen.render(""),p.ui.activePrompt.render(),m=h,[3,1];case 5:return[2,p.ui.activePrompt.answers[p.ui.activePrompt.opt.name]]}})})};require("wative-core").WativeCore;var Gt=function(e,t){return v(void 0,void 0,void 0,function(){var n;return g(this,function(r){switch(r.label){case 0:return[4,gt(["> System & Settings","> Accounts","> Tools","> Exit"])];case 1:switch(n=r.sent(),n){case"> System & Settings":return[3,2];case"> Accounts":return[3,4];case"> Tools":return[3,6];case"> Exit":return[3,8]}return[3,9];case 2:return[4,je(e)];case 3:case 5:case 7:return r.sent(),[3,9];case 4:return[4,ke(e,t)];case 6:return[4,Q(e,t)];case 8:return[2];case 9:return[4,Gt(e,t)];case 10:return r.sent(),[2]}})})},Kt=require("wative-core").WativeCore,Wt=require("../package.json");require("events").EventEmitter.defaultMaxListeners=0;process.on("unhandledRejection",function(e,t){console.log("Unhandled Rejection at:",t,"reason:",e)}),v(void 0,void 0,void 0,function(){var r,a,s,o,c;return g(this,function(i){switch(i.label){case 0:return console.log("version:",Wt.version),console.log(tt.green(n.textSync("Wative",{font:"ANSI Shadow",horizontalLayout:"default",verticalLayout:"default"}))),[4,v(void 0,void 0,void 0,function(){var t;return g(this,function(n){switch(n.label){case 0:return[4,at("Keystore storage located in (default: ".concat(rt,")"))];case 1:return(t=n.sent())||(t=rt),t=(t=t.trim()).replace("~",nt),e.existsSync(t)||e.mkdirSync(t,{recursive:!0}),[2,t]}})})];case 1:return r=i.sent(),[4,xe(r)];case 2:return i.sent(),function(n){var r=t.resolve(n,"network.json"),a=JSON.parse(e.readFileSync(r,"utf8"));a.status||(a.status={fullAddr:!0,gasToken:!1,extendedToken:!1}),a.showTokens||(a.showTokens={});for(var s=a.accounts.length,o=0;o<s;o++){var c=a.accounts[s-1-o],i=Ot(c),u=t.resolve(n,"accounts/".concat(i,".json"));e.existsSync(u)||a.accounts.splice(s-1-o,1)}e.writeFileSync(r,JSON.stringify(a,null,4));var l=a.accounts,d=Ft(l);for(o=0;o<d.length;o++){u=t.resolve(n,"accounts/".concat(d[o],".json"));var p=JSON.parse(e.readFileSync(u,"utf8"));"PP"!==p.account_type&&("data"in p||(p.data=[{ciphertexts:p.ciphertexts}],delete p.ciphertexts,e.writeFileSync(u,JSON.stringify(p,null,4))))}}(r),a=t.resolve(r,"network.json"),s=JSON.parse(e.readFileSync(a,"utf8")),o=Ft(s.accounts),c=new Kt(r,o,null,!0),[4,Gt(r,c)];case 3:return i.sent(),[2]}})}).then(function(){return process.exit(0)}).catch(function(e){console.log(e.message),process.exit(1)});
1
+ import*as e from"fs";import*as t from"path";import*as a from"figlet";import n from"inquirer";import r from"web3";import{Connection as o,PublicKey as s,Transaction as i,SystemProgram as l,ComputeBudgetProgram as c}from"@solana/web3.js";import{getAssociatedTokenAddressSync as u,getMint as d,createAssociatedTokenAccountInstruction as p,createTransferInstruction as m}from"@solana/spl-token";import{Metaplex as w}from"@metaplex-foundation/js";import{BigNumber as g}from"bignumber.js";const h={},f=async e=>{let t=new r(e);return await $t(t.eth.getChainId,[])},y=async(e,t)=>{const a=new r(t);return await $t(a.eth.getBalance,[e])},b=async(e,t)=>{const a=new o(t);return await $t(a.getBalance.bind(a),[new s(e)])},k=async(e,t)=>{const a=new(new r(t).eth.Contract)([{constant:!0,inputs:[],name:"symbol",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"name",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"}],e);let n=await $t(a.methods.symbol().call.bind(a),[]),o=await $t(a.methods.name().call.bind(a),[]),s=await $t(a.methods.decimals().call.bind(a),[]);return n.status&&o.status&&s.status?{status:!0,output:{symbol:n.output,name:o.output,decimals:s.output}}:{status:!1,output:"Failed to get token info"}},v=async(e,t)=>{const a=new o(t),n=w.make(a),r=new s(e),i=await $t(d,[a,r]);let l={status:!0,output:{symbol:"",name:"",decimals:""}};if(!i.status)return{status:!1,output:"Failed to get token decimals"};l.output.decimals=i.output.decimals;try{const e=n.nfts().pdas().metadata({mint:r});if(await a.getAccountInfo(e)){const e=await n.nfts().findByMint({mintAddress:r});l.output.name=e.name,l.output.symbol=e.symbol}}catch(e){return{status:!1,output:"Failed to get token name"}}return l},S=async(e,t,a)=>{const n=new(new r(a).eth.Contract)([{constant:!0,inputs:[{name:"who",type:"address"}],name:"balanceOf",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"}],t);let o=await $t(n.methods.balanceOf(e).call.bind(n),[]);return o.status?{status:!0,output:o.output}:{status:!1,output:"Failed to get token balance"}},x=async(e,t,a)=>{const n=new o(a),r=u(new s(t),new s(e));let i=await $t(n.getTokenAccountBalance.bind(n),[r]);return i.status?{status:!0,output:i.output.value.amount}:i.output.includes("could not find account")?{status:!0,output:"0"}:{status:!1,output:"Failed to get token balance"}},$=async e=>{const t=new o(e);let a=await $t(t.getRecentPrioritizationFees.bind(t),[]);if(!a.status)return{status:!1,output:"Failed to get recent prioritization fees"};const n=a.output.map(e=>e.prioritizationFee).sort();return{status:!0,output:n.length>0?Math.ceil(n.reduce((e,t)=>e+t)/n.length):1e3}},N=async(e,t)=>{const a=new o(t);let n=await $t(a.getAccountInfo.bind(a),[new s(e.toString())]);return n.status?{status:!0,output:n.output}:{status:!1,output:"Failed to get account info"}},O=async(e,t,a,n,r)=>{let o;a in h?o=h[a][t]||{}:(h[a]={},o={});for(const a of e)if(a&&!(a in o)){let e;e="0"===t?r?await y(a,n):await b(a,n):r?await S(a,t,n):await x(a,t,n),e.status&&(o[a]=e.output),await Ft(200)}return h[a][t]=o,h},F=(e,t,a)=>{for(let n=0;n<t.length;n++){let r=t[n];for(let t=0;t<a.length;t++){let n=a[t];try{delete h[e][n][r]}catch(e){}}}},P=(e,t)=>{let a=0;if(e in h&&"0"in h[e])for(let n=0;n<t.length;n++)t[n]in h[e][0]&&(a+=1);return 0!==a&&a/t.length>.8},A=["abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse","access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act","action","actor","actress","actual","adapt","add","addict","address","adjust","admit","adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent","agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert","alien","all","alley","allow","almost","alone","alpha","already","also","alter","always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger","angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique","anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic","area","arena","argue","arm","armed","armor","army","around","arrange","arrest","arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset","assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction","audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake","aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge","bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain","barrel","base","basic","basket","battle","beach","bean","beauty","because","become","beef","before","begin","behave","behind","believe","below","belt","bench","benefit","best","betray","better","between","beyond","bicycle","bid","bike","bind","biology","bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless","blind","blood","blossom","blouse","blue","blur","blush","board","boat","body","boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss","bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread","breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze","broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb","bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy","butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call","calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas","canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry","cart","case","cash","casino","castle","casual","cat","catalog","catch","category","cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century","cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase","chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child","chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle","citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk","clever","click","client","cliff","climb","clinic","clip","clock","clog","close","cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut","code","coffee","coil","coin","collect","color","column","combine","come","comfort","comic","common","company","concert","conduct","confirm","congress","connect","consider","control","convince","cook","cool","copper","copy","coral","core","corn","correct","cost","cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle","craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek","crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial","cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup","cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad","damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal","debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense","define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny","depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk","despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond","diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur","direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance","divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain","donate","donkey","donor","door","dose","double","dove","draft","dragon","drama","drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop","drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf","dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo","ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow","elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody","embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless","endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough","enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip","era","erase","erode","erosion","error","erupt","escape","essay","essence","estate","eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange","excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit","exotic","expand","expect","expire","explain","expose","express","extend","extra","eye","eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame","family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father","fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female","fence","festival","fetch","fever","few","fiber","fiction","field","figure","file","film","filter","final","find","fine","finger","finish","fire","firm","first","fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor","flee","flight","flip","float","flock","floor","flower","fluid","flush","fly","foam","focus","fog","foil","fold","follow","food","foot","force","forest","forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile","frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen","fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy","gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp","gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture","ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance","glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue","goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown","grab","grace","grain","grant","grape","grass","gravity","great","green","grid","grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt","guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy","harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health","heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden","high","hill","hint","hip","hire","history","hobby","hockey","hold","hole","holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital","host","hotel","hour","hover","hub","huge","human","humble","humor","hundred","hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea","identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune","impact","impose","improve","impulse","inch","include","income","increase","index","indicate","indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury","inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install","intact","interest","into","invest","invite","involve","iron","island","isolate","issue","item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel","job","join","joke","journey","joy","judge","juice","jump","jungle","junior","junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney","kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife","knock","know","lab","label","labor","ladder","lady","lake","lamp","language","laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit","layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal","legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level","liar","liberty","library","license","life","lift","light","like","limb","limit","link","lion","liquid","list","little","live","lizard","load","loan","lobster","local","lock","logic","lonely","long","loop","lottery","loud","lounge","love","loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad","magic","magnet","maid","mail","main","major","make","mammal","man","manage","mandate","mango","mansion","manual","maple","marble","march","margin","marine","market","marriage","mask","mass","master","match","material","math","matrix","matter","maximum","maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt","member","memory","mention","menu","mercy","merge","merit","merry","mesh","message","metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor","minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile","model","modify","mom","moment","monitor","monkey","monster","month","moon","moral","more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie","much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual","myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature","near","neck","need","negative","neglect","neither","nephew","nerve","nest","net","network","neutral","never","news","next","nice","night","noble","noise","nominee","noodle","normal","north","nose","notable","note","nothing","notice","novel","now","nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe","obtain","obvious","occur","ocean","october","odor","off","offer","office","often","oil","okay","old","olive","olympic","omit","once","one","onion","online","only","open","opera","opinion","oppose","option","orange","orbit","orchard","order","ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output","outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact","paddle","page","pair","palace","palm","panda","panel","panic","panther","paper","parade","parent","park","parrot","party","pass","patch","path","patient","patrol","pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen","penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo","phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot","pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate","play","please","pledge","pluck","plug","plunge","poem","poet","point","polar","pole","police","pond","pony","pool","popular","portion","position","possible","post","potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare","present","pretty","prevent","price","pride","primary","print","priority","prison","private","prize","problem","process","produce","profit","program","project","promote","proof","property","prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin","punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle","pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit","raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp","ranch","random","range","rapid","rare","rate","rather","raven","raw","razor","ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle","reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release","relief","rely","remain","remember","remind","remove","render","renew","rent","reopen","repair","repeat","replace","report","require","rescue","resemble","resist","resource","response","result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib","ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot","ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket","romance","roof","rookie","room","rose","rotate","rough","round","route","royal","rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness","safe","sail","salad","salmon","salon","salt","salute","same","sample","sand","satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter","scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script","scrub","sea","search","season","seat","second","secret","section","security","seed","seek","segment","select","sell","seminar","senior","sense","sentence","series","service","session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell","sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop","short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side","siege","sight","sign","silent","silk","silly","silver","similar","simple","since","sing","siren","sister","situate","six","size","skate","sketch","ski","skill","skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight","slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth","snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda","soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry","sort","soul","sound","soup","source","south","space","spare","spatial","spawn","speak","special","speed","spell","spend","sphere","spice","spider","spike","spin","spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring","spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp","stand","start","state","stay","steak","steel","stem","step","stereo","stick","still","sting","stock","stomach","stone","stool","story","stove","strategy","street","strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway","success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny","sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey","suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim","swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag","tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi","teach","team","tell","ten","tenant","tennis","tent","term","test","text","thank","that","theme","then","theory","there","they","thing","this","thought","three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber","time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler","toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool","tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist","toward","tower","town","toy","track","trade","traffic","tragic","train","transfer","trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick","trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust","truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle","twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella","unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform","unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade","uphold","upon","upper","upset","urban","urge","usage","use","used","useful","useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van","vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue","verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory","video","view","village","vintage","violin","virtual","virus","visa","visit","visual","vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage","wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash","wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather","web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat","wheel","when","where","whip","whisper","wide","width","wife","wild","will","win","window","wine","wing","wink","winner","winter","wire","wisdom","wise","wish","witness","wolf","woman","wonder","wood","wool","word","work","world","worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year","yellow","you","young","youth","zebra","zero","zone","zoo"],_=[{name:"Ethereum Mainnet",chainId:1,rpcUrl:"https://eth.llamarpc.com",nativeCurrency:{name:"ETH",symbol:"ETH",decimals:18},multicallAddress:"0xeefBa1e63905eF1D7ACbA5a8513c70307C1cE441"},{name:"Solana Mainnet",chainId:901,rpcUrl:"https://api.mainnet-beta.solana.com",nativeCurrency:{name:"SOL",symbol:"SOL",decimals:9}}],L=["901","902","903"],T=e=>L.includes(e)?9:18,I=e=>L.includes(e)?"solana":"evm",{BN:C}=require("bn.js"),{stripHexPrefix:B}=require("ethereumjs-util"),{BigNumber:j}=require("bignumber.js");function R(e){return new C(B(e.toString("hex")),16)}const z=e=>e.match(/^-?0x/u)?e:e.match(/^-?0X/u)?e.replace("0X","0x"):e.startsWith("-")?e.replace("-","-0x"):`0x${e}`;function J(e){return z(e.toString(16))}class U{constructor(e){this.query=new r(r.givenProvider||e).eth}async analyzeGasUsage(e){const t=await this.query.getBlock("latest",!1);let a,n=J(function(e,t,a){const n=new C(t),r=new C(a);return e.mul(n).div(r)}(R(t.gasLimit),19,20));try{n=await this.estimateTxGas(e)}catch(e){a={reason:e.message,errorKey:e.errorKey,debug:{blockNumber:t.number,blockGasLimit:t.gasLimit}}}return{blockGasLimit:t.gasLimit,estimatedGasHex:n,simulationFails:a}}async estimateTxGas(e){let t=await this.query.estimateGas(e);return t=new j(t.toString()).multipliedBy(1.3).toFixed(0),t}addGasBuffer(e,t,a=1.3){const n=R(e),r=R(t).muln(.9),o=n.muln(a);return n.gt(r)?J(n):o.lt(r)?J(o):J(r)}async getBufferedGasLimit(e,t){const{blockGasLimit:a,estimatedGasHex:n,simulationFails:r}=await this.analyzeGasUsage(e);return{gasLimit:this.addGasBuffer(z(n),a,t),simulationFails:r}}async getGasPrice(){return await this.query.getGasPrice()}async getTransactionCount(e){return await this.query.getTransactionCount(e)}}const q=require("chalk");require("wative-core");const E=async e=>{let t=[new n.Separator("————Tx Detail—————-"),`from: ${e.from}`,`to: ${e.to}`,`nonce: ${e.nonce}`,`gasPrice: ${e.gasPrice}`,`data: ${e.data}`,`value: ${e.value}`,`gas: ${e.gas}`,new n.Separator("——————————————-"),"Send it now","Back"],a=await st(t),r=t.indexOf(a);return 1===r&&(e.from=await We("from",ot)),2===r&&(e.to=await We("to",ot)),3===r&&(e.nonce=await We("nonce")),4===r&&(e.gasPrice=await We("gasPrice")),5===r&&(e.data=await St("data")),6===r&&(e.value=await We("value")),7===r&&(e.gas=await We("gas")),9===r?e:10===r?null:await E(e)},D=async(e,t,a,n,o)=>{const s=await We("to",ot),i=new U(t),l=await i.getGasPrice(),c=new g(l.toString()).dividedBy(1e9).toFixed(4,g.ROUND_FLOOR),u=await We(`Gas price (${c}), agree or enter`,et);let d=u||c;d=new g(d).multipliedBy(1e9).toFixed(0);let p,m,w,h=await(async(e,t)=>{const a=new r(t);let n=await $t(a.eth.getCode.bind(a),[e]);return n.status?{status:!0,output:n.output}:{status:!1,output:"Failed to get code"}})(s,t);if(!h.status)return void console.log(q.red(h.output));if(p="42161"===e||"421614"===e?"1700000":"21000","0x"===h.output){m="0x";let e=await y(n,t);if(!e.status)return void console.log(q.red(e.output));let r=new g(e.output),o=new g(d),s=r.minus(o.multipliedBy(Number(p))).toFixed(0,g.ROUND_FLOOR),i=new g(s).dividedBy(1e18).toFixed(4,g.ROUND_FLOOR);if(new g(i)<new g(0))return void console.log(q.red("Not enough balance"));w=await G(i,s,a,18)}else m=await St("data",xt),w=await We("value",Ye);const f=await i.getTransactionCount(n),b=await We(`Nonce (${f}), agree or enter`);let k={from:n,to:s,nonce:b||f.toString(),gasPrice:d,data:m,value:w};if("0x"===m)k.gas=p;else{let e=k.gasPrice;delete k.gasPrice;try{k.gas=(await i.estimateTxGas(k)).toString()}catch(e){return void console.log(q.red("Error: "+e))}k.gasPrice=e}if(k=await E(k),!k)return;const v=await o.account.signTransaction(n,k,t);v.status?(console.log(q.green(`Transaction hash: ${v.output.transactionHash}`)),o.account.sendSignedTransaction(n,v.output.rawTransaction,t),F(e,[n,s],["0"])):console.log(q.red(v.output))},M=async(e,t,a,n,r)=>{const u=await We("to",ot);let d=(new i).add(l.transfer({fromPubkey:new s(n),toPubkey:new s(u),lamports:1e6}));d.add(c.setComputeUnitLimit({units:2e5})),d.add(c.setComputeUnitPrice({microLamports:1e3})),d.feePayer=new s(n);let p=await(async e=>{const t=new o(e);let a=await $t(t.getLatestBlockhash.bind(t),[{commitment:"finalized"}]);return a.status?{status:!0,output:a.output}:{status:!1,output:"Failed to get latest blockhash"}})(t);if(!p.status)return void console.log(q.red(p.output));d.recentBlockhash=p.output.blockhash;const m=await r.account.simulateTransaction(n,t,d);if(!m.status)return void console.log(q.red(m.output));if(!m.output||!m.output.value||0===m.output.value.unitsConsumed||m.output.value.err)return console.log(q.red("Simulate error")),console.log("==================reason====================="),console.log(JSON.stringify(m.output,null,4)),void console.log("==============================================");let w=new g(m.output.value.unitsConsumed.toString()).multipliedBy(1.2).toFixed(0,g.ROUND_CEIL),h=new g(w);const f=await $(t);if(!f.status)return void console.log(q.red(f.output));const y=new g(f.output.toString()),k=h.multipliedBy(y).dividedBy(1e6).toFixed(0,g.ROUND_CEIL),v=await b(n,t);if(!v.status)return void console.log(q.red(v.output));const S=new g(v.output).minus(5e3).minus(k);let x=new g(S).dividedBy(1e9).toFixed(4,g.ROUND_FLOOR);if(new g(x)<new g(0))return void console.log(q.red("Not enough balance"));let N=await G(x,S.toString(),a,9),O=new i;O.add(c.setComputeUnitLimit({units:Number(h)})),O.add(c.setComputeUnitPrice({microLamports:Number(y)})),O.add(l.transfer({fromPubkey:new s(n),toPubkey:new s(u),lamports:Number(N)})),O.feePayer=new s(n),O.recentBlockhash=p.output.blockhash;const P=await r.account.signTransaction(n,O,t);if(!P.status)return void console.log(q.red(P.output));let A=await r.account.sendSignedTransaction(n,P.output,t);A.status?(F(e,[n,u],["0"]),console.log(q.green(`Transaction hash: ${A.output}`))):console.log(q.red(A.output))},G=async(e,t,a,n)=>{let r=["> Input value",`> Total Balance (${e} ${a})`],o=await st(r),s=r.indexOf(o),i="0";if(0===s){let e=await We("value",Ye);i=new g(e).multipliedBy(10**n).toFixed(0,g.ROUND_FLOOR)}else 1===s&&(i=t);return new g(i).isLessThanOrEqualTo(new g(t))?i:(console.log(q.red("Not enough balance")),G(e,t,a,n))},K=async(e,t,a,n,o)=>{let s,i,l;switch(await st(["> Input token ticker","> Input token contract address"]),selected_token_address){case"> Input token ticker":l=await We("token ticker");let r=await ze(e,a,l);if(0===r.length)return void console.log(q.red("Token not found"));let o=[];for(let e=0;e<r.length;e++){const a=await S(n,r[e].address,t);if(!a.status)return void console.log(q.red(a.output));let s=new g(a.output).dividedBy(10**Number(r[e].decimals)).toFixed(4,g.ROUND_FLOOR);if(1===r.length){o.push(`> 1. ${l} Balance: ${s}`);break}o.push(`> ${e+1}. ${l} Balance: ${s}(${r[e].address})`),o.push(r[e].address)}let c=await st(o);const u=r[o.indexOf(c)];s=u.address,i=Number(u.decimals);break;case"> Input token contract address":s=await We("token contract address",ot);let d=await k(s,t);if(!d.status)return void console.log(q.red(d.output));i=Number(d.output.decimals),l=d.output.name}const c=await We("Receipt",ot),u=await S(n,s,t);if(!u.status)return void console.log(q.red(u.output));const d=new U(t),p=await d.getGasPrice(),m=new g(p.toString()).dividedBy(1e9).toFixed(4,g.ROUND_FLOOR),w=await We(`Gas price (${m}), agree or enter`,et);let h=w||m;h=new g(h).multipliedBy(1e9).toFixed(0);let f=await W(u.output,l,i);const y=await(async(e,t,a)=>new r(a).eth.abi.encodeFunctionCall({constant:!1,inputs:[{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transfer",outputs:[],payable:!1,stateMutability:"nonpayable",type:"function"},[e,t]))(c,f,t),b=await d.getTransactionCount(n),v=await We(`Nonce (${b}), agree or enter`);let x={from:n,to:s,nonce:v||b.toString(),gasPrice:h,data:y,value:"0"};if("0x"===y)x.gas="42161"===a||"421614"===a?"1700000":"21000";else{let e=x.gasPrice;delete x.gasPrice;try{x.gas=(await d.estimateTxGas(x)).toString()}catch(e){return void console.log(q.red("Failed to estimate gas, "+e.message))}x.gasPrice=e}if(x=await E(x),!x)return;const $=await o.account.signTransaction(n,x,t);$.status?(console.log(q.green(`Transaction hash: ${$.output.transactionHash}`)),o.account.sendSignedTransaction(n,$.output.rawTransaction,t),F(a,[n,c],["0",s])):console.log(q.red($.output))},W=async(e,t,a)=>{let n=["> Input amount",`> Total Balance (${new g(e).dividedBy(10**a).toFixed(4,g.ROUND_FLOOR)} ${t})`],r=await st(n),o=n.indexOf(r),s="0";if(0===o){let e=await We("amount",Ye);s=new g(e).multipliedBy(10**a).toFixed(0,g.ROUND_FLOOR)}else 1===o&&(s=e);return new g(s).isLessThanOrEqualTo(new g(e))?s:(console.log(q.red("Not enough balance")),W(e,t,a))},H=async(e,t,a,r)=>{let o=Ie(e,t,a),l=Fe(e,o),d=Nt(a);if(l!==d&&("evm"===d&&(o="Ethereum Mainnet"),"solana"===d&&(o="Solana Mainnet"),l=Fe(e,o)),"evm"===l){if(await vt(`Network (${o}), want a change?`,!1)){const t=Ce(e);o=await st(t,"Select a network")}}let w=await Te(a,e,o);if(!w.status)return void console.log(q.red(w.output));const h=Pe(e,o);console.log(q.green(` ${h.nativeCurrency.symbol} Balance: ${w.output}`));const f=["> Send Raw Tx","> Send Token",new n.Separator("----------------------------------"),"> Back"];switch(await st(f)){case"> Send Raw Tx":"evm"===d&&await D(h.chainId.toString(),h.rpcUrl,h.nativeCurrency.symbol,a,r),"solana"===d&&await M(h.chainId.toString(),h.rpcUrl,h.nativeCurrency.symbol,a,r);break;case"> Send Token":"evm"===d&&await K(e,h.rpcUrl,h.chainId.toString(),a,r),"solana"===d&&await(async(e,t,a,n,r)=>{let o,l,d;switch(await st(["> Input token ticker","> Input token contract address"]),selected_token_address){case"> Input token ticker":d=await We("token ticker");let r=await ze(e,a,d);if(0===r.length)return void console.log(q.red("Token not found"));let s=[];for(let e=0;e<r.length;e++){const a=await x(n,r[e].address,t);if(!a.status)return void console.log(q.red(a.output));let o=new g(a.output).dividedBy(10**Number(r[e].decimals)).toFixed(4,g.ROUND_FLOOR);if(1===r.length){s.push(`> 1. ${d} Balance: ${o}`);break}s.push(`> ${e+1}. ${d} Balance: ${o}(${r[e].address})`),s.push(r[e].address)}let i=await st(s);const c=r[s.indexOf(i)];o=c.address,l=Number(c.decimals);break;case"> Input token contract address":o=await We("token contract address",ot);let u=await v(o,t);if(!u.status)return void console.log(q.red(u.output));l=Number(u.output.decimals),d=u.output.name}const w=await We("Receipt",ot),h=await x(n,o,t);if(!h.status)return void console.log(q.red(h.output));let f=await W(h.output,d,l),y=u(new s(o),new s(n),!0);const b=await N(y.toString(),t);if(!b.status)return void console.log(q.red(b.output));if(!b.output||b.output.owner.toString()===s.default)return void console.log(q.red("From token account not found"));let k=u(new s(o),new s(w),!1);const S=await N(k.toString(),t);if(!S.status)return void console.log(q.red(S.output));let O=new i,P=new i;S.output&&S.output.owner.toString()!==s.default||(O.add(p(new s(n),new s(k),new s(w),new s(o))),P.add(p(new s(n),new s(k),new s(w),new s(o)))),O.add(m(y,k,new s(n),Number(f))),O.add(c.setComputeUnitLimit({units:2e5})),O.add(c.setComputeUnitPrice({microLamports:1e3})),O.feePayer=new s(n);const A=await r.account.simulateTransaction(n,t,O);if(!A.status)return void console.log(q.red(A.output));if(!A.output||!A.output.value||0===A.output.value.unitsConsumed||A.output.value.err)return console.log(q.red("Simulate error")),console.log("==================reason====================="),console.log(JSON.stringify(A.output,null,4)),void console.log("==============================================");let _=new g(A.output.value.unitsConsumed.toString());_=new g(Math.ceil(1.2*Number(_)));const L=await $(t);if(!L.status)return void console.log(q.red(L.output));const T=new g(L.output.toString());P.add(m(y,k,new s(n),Number(f))),P.add(c.setComputeUnitLimit({units:Number(_)})),P.add(c.setComputeUnitPrice({microLamports:Number(T)})),O.feePayer=new s(n);const I=await r.account.signTransaction(n,P,t);if(!I.status)return void console.log(q.red(I.output));let C=await r.account.sendSignedTransaction(n,I.output,t);C.status?(F(a,[n,w],["0",o]),console.log(q.green(`Transaction hash: ${C.output}`))):console.log(q.red(C.output))})(e,h.rpcUrl,h.chainId.toString(),a,r);break;case"> Back":return}},Z=async(e,t,a,r)=>{const o=["> SendTx","> SignMessage",new n.Separator("----------------------------------"),"> Back"];switch(await st(o)){case"> SendTx":await H(e,t,a,r);break;case"> SignMessage":{const e=await St("Input the message to sign"),t=r.account.signMessage(a,e);if(!t.status){console.log(q.red(t.output));break}console.log(q.green("Signature: "+t.output));break}case"> Back":return}await Z(e,t,a,r)},V=async(e,t)=>{let a,r=["> Send Tx","> Search Accounts",new n.Separator("----------------------------------"),"> Back"],o=await st(r);if("> Back"===o)return;"> Send Tx"===o&&(a=await We("Input address to send tx",ot)),"> Search Accounts"===o&&(a=await We("Input part address to send tx",Qe));let s=t.account.getAccountLabel(a);if(null===s)return console.log(q.red("Account not found")),void await V(e,t);let i=s.account_label,l=mt(e,i);if(a=s.account_address,null===i)return console.log(q.red("Account not found")),void await V(e,t);const c=await Ze(e,i,a);if(null===c)return console.log(q.red("Account not found")),void await V(e,t);console.log(q.green(`Address found!\n address: ${a}\n account name: [${l}]\n account index: #${c}`)),(await se(e,i,t)).isLoginIn?(await Z(e,i,a,t),await V(e,t)):await V(e,t)},X=require("chalk");require("dotenv").config();const Q=require("cli-progress");require("wative-core");const Y={keystore_slug:"",default_account_index:0},ee=async e=>{const t=ne(e);let a=[];t.accounts&&(a=t.accounts);let n=await ht("Account Name",a);return null===n?null:{account_name:n,password:await kt(`Please set a password for Account [${n}]`),selected_default_network:await Oe(e)}},te=async(a,n,r,o,s,i,l)=>{let c=await Pe(a,s);"evm"!==I(c.chainId.toString())||o.startsWith("0x")||(o="0x"+o);let u=await i.account.generatePKAccount(r,o,n,c.chainId.toString(),l);if(!u.status)return void console.log(X.red(u.output));let d,p=t.join(a,`accounts/${r}.json`);if(e.existsSync(p)){let t=JSON.parse(e.readFileSync(p,"utf8"));if("data"in t){if(t.data.map(e=>e.ciphertexts.address).includes(u.output.ciphertexts.address))return void console.log(X.red("The account has already been imported"));t.data.push({ciphertexts:u.output.ciphertexts}),d=t}else t.data=[{ciphertexts:t.ciphertexts}],delete t.ciphertexts,t.data.push({ciphertexts:u.output.ciphertexts}),d=t}else u.output.data=[{ciphertexts:u.output.ciphertexts}],delete u.output.ciphertexts,u.output.default_network=s,d=u.output;e.writeFileSync(p,JSON.stringify(d,null,4)),i.account.reloadAccount()},ae=async(a,r)=>{const o=["> Import Passphrase","> Import Private Key",new n.Separator("----------------------------------"),"> Back"];switch(await st(o)){case"> Import Passphrase":await(async(a,n)=>{let r=await ee(a);if(!r)return;let o=await bt("Please enter a mnemonic [split by space]",tt);o=o.replace(/\s+/g," ");let s=wt(r.account_name);const i=n.account.generatePPAccount(s,o,r.password);if(!i.status)return void console.log(X.red(i.output));let l=t.join(a,`accounts/${s}.json`);i.output.default_network=r.selected_default_network,e.writeFileSync(l,JSON.stringify(i.output,null,4));const c=t.resolve(a,"network.json"),u=JSON.parse(e.readFileSync(c,"utf8"));u.accounts.push(r.account_name),e.writeFileSync(c,JSON.stringify(u,null,4))})(a,r);break;case"> Import Private Key":await(async(a,n)=>{let r=await ee(a);if(!r)return;let o=await ft("Please enter a private key"),s=wt(r.account_name);await te(a,r.password,s,o,r.selected_default_network,n,!0);const i=t.resolve(a,"network.json"),l=JSON.parse(e.readFileSync(i,"utf8"));l.accounts.push(r.account_name),e.writeFileSync(i,JSON.stringify(l,null,4))})(a,r);break;case"> Back":return}r.account.reloadAccount()},ne=a=>{const n=t.resolve(a,"network.json");return JSON.parse(e.readFileSync(n,"utf8"))},re=(a,n)=>{const r=t.join(a,`accounts/${n}.json`);return JSON.parse(e.readFileSync(r,"utf8"))},oe=(a,n,r)=>{const o=t.join(a,`accounts/${n}.json`);e.writeFileSync(o,JSON.stringify(r,null,4))},se=async(e,t,a)=>{if(a.account.isLogin(t))return{isLoginIn:!0};for(let n=0;n<3;n++){let n,r=mt(e,t),o="WATIVE_PASSWD_"+t;if(n=process.env[o]&&""!==process.env[o]?process.env[o]:process.env.WativePassword&&""!==process.env.WativePassword?process.env.WativePassword:await yt(`Please input the password for Account [${r}]`),!n)return console.log(X.red("Password can't be empty")),{isLoginIn:!1};const s=await a.account.login(t,n);if(s.status)return{isLoginIn:!0,password:n};const i=["> Try Again","> Back"],l=await st(i,s.output);if("> Back"===l)return{isLoginIn:!1}}return{isLoginIn:!1}},ie=async(e,t)=>{const a=ne(e).accounts;let r=["> Back",new n.Separator("----------------------------------")];const o=a.length;if(0===o)return void console.log(X.red("No address here yet"));for(let t=0;t<o;t++){const n=a[t],o=wt(n),s=re(e,o);"data"in s?r.push(`${t+1}) ${n} [${s.account_type}:${s.data.length}]`):r.push(`${t+1}) ${n} [${s.account_type}:1]`)}const s=await st(r,"Select an account");if("> Back"===s)return;const i=a[r.indexOf(s)-2],l=wt(i);console.log(X.green(`Keystore slug: [${l}]`));let c=await se(e,l,t);c.isLoginIn&&await ce(e,l,t,c.password),await ie(e,t)},le=async(e,t,a)=>{const r=await re(e,t);let o=["> Disabled Slots","> Add Single","> Add Range",new n.Separator("----------------------------------"),"> Back"];switch(await st(o)){case"> Back":return;case"> Disabled Slots":{let a=r.disabled_slots;if(!a||0===a.length){console.log(X.red("No disabled slots here yet"));break}let o=r.data,s=["> Back",new n.Separator("----------------------------------")],i=r.default_network;for(let t=0;t<a.length;t++){let n=a[t].from,r=a[t].to,l=i,c=i;"default_network"in o[n]&&(l=o[n].default_network),"default_network"in o[r]&&(c=o[r].default_network);let u,d,p=Fe(e,l),m=Fe(e,c);if("evm"!==p&&"solana"!==p)throw new Error(`Invalid network type: ${p}`);if("evm"!==m&&"solana"!==m)throw new Error(`Invalid network type: ${m}`);u="evm"===p?o[n].ciphertexts.evm.address:o[r].ciphertexts.solana.address,d="evm"===m?o[r].ciphertexts.evm.address:o[r].ciphertexts.solana.address,n===r?s.push(`${t+1}. ${u}[${n}]`):s.push(`${t+1}. ${u}[${n}]-${d}[${r}]`)}let l=await st(s);if("> Back"===l)break;if(!await vt(`Are you sure to delete the ${l}?`,!0))break;let c=s.indexOf(l)-2;r.disabled_slots.splice(c,1),oe(e,t,r);break}case"> Add Single":{let a=await Ve(r,"Input address or index");if(null===a){console.log(X.red("Invalid account index"));break}r.disabled_slots?r.disabled_slots.push({from:a,to:a}):r.disabled_slots=[{from:a,to:a}],oe(e,t,r);break}case"> Add Range":{let a=await He(r);if(!a){console.log(X.red("Invalid account range"));break}r.disabled_slots?r.disabled_slots.push(a):r.disabled_slots=[a],oe(e,t,r);break}}await le(e,t)},ce=async(a,r,o,s)=>{let i,l=await re(a,r);i="PP"===l.account_type?["> Address List","> Expand Address","> Slice Address","> Disable Address","> Reset Account Password",`> Switch Networks [${l.default_network}]`,"> Remove",new n.Separator("----------------------------------"),"> Back"]:["> Address List","> Import Private Key","> Remove Address","> Reset Account Password",`> Switch Networks [${l.default_network}]`,"> Remove",new n.Separator("----------------------------------"),"> Back"];switch(await st(i)){case"> Address List":await ue(a,r,o);break;case"> Expand Address":{const e=await We("Expand accounts count",at);if(Number(e)>2e3){console.log(X.red("Too many accounts, please input less than 2000"));break}await pe(a,r,Number(e),o);break}case"> Import Private Key":await(async(a,n,r,o)=>{let s=await We("Please enter a private key"),i=t.join(a,`accounts/${r}.json`),l=JSON.parse(e.readFileSync(i,"utf8"));await te(a,n,r,s,l.default_network,o,!1)})(a,s,r,o);break;case"> Slice Address":{const e=await We("Please input last account number",nt);await me(a,r,Number(e),o);break}case"> Remove Address":await we(a,r,o);break;case"> Disable Address":await le(a,r);break;case"> Reset Account Password":{let e=mt(a,r);const t=await kt(`Please input new password for Account [${e}]`),n=await kt(`Please confirm new password for Account [${e}]`);if(!t||!n||t!==n){console.log(X.red("Passwords do not match"));break}return void await o.account.resetPassword(r,t)}case`> Switch Networks [${l.default_network}]`:await Le(a,r,!0);break;case"> Remove":return void await ge(a,r);case"> Back":return}await ce(a,r,o,s)},ue=async(e,t,a)=>{const r=await re(e,t);let o=["> Back",new n.Separator("----------------------------------")],s=r.disabled_slots,i=Be(e),l=r.default_network,c=Pe(e,l),u=I(c.chainId.toString()),d=r.data.length.toString().length+1;for(let e=0;e<r.data.length;e++){let t,l=r.data[e].tag?`(${r.data[e].tag})`:"",c=a.account.checkIsDisableAddress(s,e);t="PP"===r.account_type?"evm"===u?r.data[e].ciphertexts.evm.address:r.data[e].ciphertexts.solana.address:r.data[e].ciphertexts.address,c?o.push(new n.Separator(X.yellow(`#${e.toString().padEnd(d)} ${Pt(t,i.fullAddr)} ${l}`))):o.push(`#${e.toString().padEnd(d)} ${Pt(t,i.fullAddr)} ${l}`)}let p,m=Y.keystore_slug===t?o[Y.account_index]:o[0],w=Y.keystore_slug===t&&Y.account_index>0,g=await Re(e,c.chainId.toString());if(w&&Y.account_index>15){let e=o.slice(0,Y.account_index-15);p=o.slice(Y.account_index-15).concat(e)}else p=o.slice(0);let h=await It(p,"evm"===u,e,g,c,i.gasToken,i.extendedToken,w,"Select an account",m);"> Back"!==h&&(Y.keystore_slug=t,Y.account_index=o.indexOf(h),await de(e,t,o.indexOf(h)-2,a),await ue(e,t,a))},de=async(e,t,a,r)=>{const o=await re(e,t);let s=o.default_network,i=Ae(e,t,a);const l=await Pe(e,s),c=await Te(i,e,s);c.status?console.log(X.green(` Address No: #${a}\n Network: ${s}\n ${l.nativeCurrency.symbol} Balance: ${c.output}`)):console.log(X.green(` Address No: #${a}\n Network: ${s}\n ${l.nativeCurrency.symbol}`));let u="> Tag";"tag"in o.data[a]&&""!==o.data[a].tag&&(u=`> Tag(${o.data[a].tag})`);let d=["> Tools","> Show address","> Assets",u,"> Reload balances","> Dump private key",new n.Separator("----------------------------------"),"> Back"];switch(await st(d)){case"> Tools":await Z(e,t,i,r);break;case"> Show address":await _e(e,t,a);break;case"> Assets":await Je(e,s,i);break;case"> Reload balances":await Ue(e,s,i);break;case u:{let n="Current tag";"tag"in o.data[a]&&""!==o.data[a].tag&&(n=`Current tag (${o.data[a].tag})`);let r=await We(n,Xe);o.data[a].tag=r.replace(/\s+/g," ").trim(),oe(e,t,o);break}case"> Dump private key":{let n=Ae(e,t,a),o=await r.account.showPrivateKey(n);console.log("account: ",n),console.log("private key: ",o);break}case"> Back":return}},pe=async(e,t,a,n)=>{const r=await re(e,t),o=r.data.length,s=new Q.SingleBar({},Q.Presets.legacy);s.start(a,0);for(let e=o;e<o+a;e++){let a=await n.account.generateSubAccount(t,e);if(!a.status)return void console.log(X.red(a.output));r.data.push({ciphertexts:a.output}),s.increment()}s.stop(),oe(e,t,r),n.account.reloadAccount()},me=async(e,t,a,n)=>{const r=await re(e,t);r.data=r.data.slice(0,a+1),oe(e,t,r),n.account.reloadAccount()},we=async(e,t,a)=>{let n=await We("Please input the accountIndex to remove this account",Ye);if("0"===n)return void console.log(X.red("Can't remove the first account"));let r=await re(e,t);await vt(`Are you sure you want to remove this account(${r.data[n].ciphertexts.address})`,!0)&&(r.data.splice(Number(n),1),oe(e,t,r),a.account.reloadAccount())},ge=async(a,n)=>{let r=await We("Please input the account name to remove this account"),o=mt(a,n);if(r!==o)return void console.log(X.red("Can't remove this account"));if(!await vt(`Are you sure you want to remove this account(${o})`,!0))return;let s=t.join(a,`accounts/${n}.json`);e.rmSync(s);const i=t.resolve(a,"network.json");if(!e.existsSync(i))return;const l=JSON.parse(e.readFileSync(i,"utf8"));let c=l.accounts.indexOf(o);l.accounts.splice(c,1),e.writeFileSync(i,JSON.stringify(l,null,2))},he=async(a,r)=>{const o=t.resolve(a,"accounts");e.existsSync(o)||e.mkdirSync(o);let s;switch(s=0===ne(a).accounts.length?["> Create a new account",new n.Separator("----------------------------------"),"> Back"]:["> Select an account","> Create a new account",new n.Separator("----------------------------------"),"> Back"],await st(s)){case"> Select an account":await ie(a,r);break;case"> Create a new account":await ae(a,r);break;case"> Back":return}await he(a,r)},fe=require("chalk"),ye=async(a,n)=>{const r=t.resolve(a,"network.json"),o=JSON.parse(e.readFileSync(r,"utf8"));let s=[];for(let e=0;e<o.networks.length;e++){const t=o.networks[e];s.push(t.name)}let i=n.rpcUrl,l=n.chainId.toString(),c=n.nativeCurrency.symbol,u=n.name,d=n.multicallAddress,p=n.color;if("Ethereum Mainnet"===n.name||"Solana Mainnet"===n.name)i=await ct(n.chainId.toString(),`Rpc Url (default: ${n.rpcUrl})`,!0);else{if(u=await We(`Chain Name (default: ${n.name})`),u&&u!==n.name&&s.includes(u))return void console.log(fe.red("Chain Name already exists"));l=await lt(`Chain Id (default: ${n.chainId})`,!0),i=await ct(l||n.chainId,`RPC Url (default: ${n.rpcUrl})`,!0),c=await dt(`Symbol (default: ${n.nativeCurrency.symbol})`),d=await ut(n.multicallAddress?`Multicall Address (Optional) (default: ${n.multicallAddress})`:"Multicall Address (Optional)"),p=await pt(n.color?`Color (Optional): (default: ${n.color})`:"Color (Optional)")}i=i||n.rpcUrl,l=l||n.chainId.toString(),c=c||n.nativeCurrency.symbol,u=u||n.name,d=d||n.multicallAddress,p=p||n.color;let m=T(l.toString()),w={name:u||n.name,chainId:Number(l)||n.chainId,rpcUrl:i||n.rpcUrl,nativeCurrency:{name:c||n.nativeCurrency.symbol,symbol:c||n.nativeCurrency.symbol,decimals:m||n.nativeCurrency.decimals}};(d||n.multicallAddress)&&(w.multicallAddress=d||n.multicallAddress),(p||n.color)&&(w.color=p||n.color);for(let e=0;e<o.networks.length;e++)if(o.networks[e].name===n.name){o.networks[e]=w;break}e.writeFileSync(r,JSON.stringify(o,null,2))},be=async(a,n)=>{const r=t.resolve(a,"network.json");let o=JSON.parse(e.readFileSync(r,"utf8"));for(let e=0;e<o.networks.length;e++)if(o.networks[e].name===n.name){o.networks.splice(e,1);break}n.name===o.currentNetwork&&(o.currentNetwork="Ethereum Mainnet"),e.writeFileSync(r,JSON.stringify(o,null,2))},ke=async a=>{const r=t.resolve(a,"network.json"),o=JSON.parse(e.readFileSync(r,"utf8"));let s=[],i=[];for(let e=0;e<o.networks.length;e++){const t=o.networks[e];"solana"===I(t.chainId.toString())?i.push(e):s.push(e)}let l=["> Back","+ Add Network",new n.Separator("----Networks(evm)----")];for(let e=0;e<s.length;e++){const t=s[e];let a=`${e+1}.${o.networks[t].name}`;0===e&&(a+=" 🔒"),l.push(a)}l.push(new n.Separator("----Networks(solana)----"));for(let e=0;e<i.length;e++){const t=i[e];let a=`${e+1}.${o.networks[t].name}`;0===e&&(a+=" 🔒"),l.push(a)}const c=await st(l);if("> Back"===c)return;if("+ Add Network"===c)return void await(async a=>{const n=t.resolve(a,"network.json"),r=JSON.parse(e.readFileSync(n,"utf8"));let o=[];for(let e=0;e<r.networks.length;e++){const t=r.networks[e];o.push(t.name)}console.log(fe.green("Please input someting about network"));const s=await We("Chain Name");if(o.includes(s))return void console.log(fe.red("Chain Name already exists"));const i=await lt("Chain Id");if(!i)return;const l=await ct(i,"RPC Url");if(!l)return;const c=await dt("Symbol");if(!c)return;const u=await ut("Multicall Address (Optional)"),d=await pt("Color (Optional)");let p=T(i.toString()),m={name:s,chainId:Number(i),rpcUrl:l,nativeCurrency:{name:c,symbol:c,decimals:p}};u&&(m.multicallAddress=u),d&&(m.color=d),r.networks.push(m),e.writeFileSync(n,JSON.stringify(r,null,2))})(a);let u,d=l.indexOf(c);u=d<s.length+3?o.networks[s[d-3]]:o.networks[i[d-s.length-4]],await(async(e,t)=>{let a=["> Edit"];switch("Ethereum Mainnet"!==t.name&&"Solana Mainnet"!==t.name&&a.push("> Remove"),a.push(new n.Separator("----------------------------------")),a.push("> Back"),await st(a)){case"> Edit":await ye(e,t);break;case"> Remove":await be(e,t)}})(a,u),await ke(a)},ve=async e=>{let t=["> Enhanced Balance Display",new n.Separator("----------------------------------"),"> Back"];switch(await st(t)){case"> Enhanced Balance Display":await $e(e);break;case"> Back":return}await ve(e)},Se=async()=>{switch(await st(["> On","> Off"])){case"> On":return!0;case"> Off":return!1}},xe=(a,n)=>{const r=t.resolve(a,"network.json");let o=JSON.parse(e.readFileSync(r,"utf8")).showTokens;return n in o?o[n]:[]},$e=async a=>{const r=["> Status","> Token List","> Add Token",new n.Separator("----------------------------------"),"> Back"];switch(await st(r)){case"> Status":await(async a=>{const r=t.resolve(a,"network.json"),o=JSON.parse(e.readFileSync(r,"utf8"));"status"in o||(o.status={fullAddr:!1,gasToken:!1,extendedToken:!1});let s=[`> Show Full Address [${o.status.fullAddr?"ON":"OFF"}]`,`> Show Gas Token [${o.status.gasToken?"ON":"OFF"}]`,`> Show Extended Token[${o.status.extendedToken?"ON":"OFF"}]`,new n.Separator("----------------------------------"),"> Back"];const i=await st(s);"> Back"!==i&&(i.includes("Full Address")?o.status.fullAddr=await Se():i.includes("Gas Token")?o.status.gasToken=await Se():i.includes("Extended Token")&&(o.status.extendedToken=await Se()),e.writeFileSync(r,JSON.stringify(o,null,2)))})(a);break;case"> Token List":await(async a=>{const r=t.resolve(a,"network.json"),o=JSON.parse(e.readFileSync(r,"utf8"));let s={};for(let e of o.networks)s[e.chainId.toString()]=e.name;const i=t.resolve(a,"assets.json");if(!Ot(i))return void console.log(fe.red("No asset here yet"));const l=JSON.parse(e.readFileSync(i,"utf8"));let c=[],u=[],d={};for(let e in l){d[c.length]={name:s[e],address:null},c.push(new n.Separator(`----- Networks (${s[e]}) -------`));let t=xe(a,s[e]),r=l[e].length;for(let a=0;a<r;a++){let n=l[e][a];t.includes(n.address)&&u.push(`${a+1}.${n.symbol.padEnd(6)} CA: ${fe.green(`${Pt(n.address).padEnd(45)}`)} Decimals: ${n.display_decimals?n.display_decimals:"4"}`),d[c.length]={name:s[e],address:n.address},c.push(`${a+1}.${n.symbol.padEnd(6)} CA: ${fe.green(`${Pt(n.address).padEnd(45)}`)} Decimals: ${n.display_decimals?n.display_decimals:"4"}`)}}let p=await it(c,"Choose Tokens",u),m={};for(let e=0;e<p.length;e++){let t=p[e],a=d[c.indexOf(t)];a.name in m?m[a.name].push(a.address):m[a.name]=[a.address]}o.showTokens=m,e.writeFileSync(r,JSON.stringify(o,null,2))})(a);break;case"> Add Token":await qe(a);break;case"> Back":return}await $e(a)},Ne=async e=>{let t=["> Networks","> Dataview",new n.Separator("----------------------------------"),"> Back"];switch(await st(t)){case"> Networks":await ke(e);break;case"> Dataview":await ve(e);break;case"> Back":return}await Ne(e)},Oe=async a=>{const n=t.resolve(a,"network.json"),r=JSON.parse(e.readFileSync(n,"utf8")).networks.map(e=>`> ${e.name}`);return(await st(r,"Please select a default network")).slice(2)},Fe=(a,n)=>{const r=t.resolve(a,"network.json"),o=JSON.parse(e.readFileSync(r,"utf8"));for(let e=0;e<o.networks.length;e++){const t=o.networks[e];if(t.name===n)return I(t.chainId.toString())}return"unknown"},Pe=(a,n)=>{const r=t.resolve(a,"network.json"),o=JSON.parse(e.readFileSync(r,"utf8"));for(let e=0;e<o.networks.length;e++){const t=o.networks[e];if(t.name===n)return t}return null},Ae=(e,t,a)=>{const n=re(e,t);if("PK"===n.account_type)return n.data[a].ciphertexts.address;let r=n.default_network,o=Fe(e,r);return"solana"===o?n.data[a].ciphertexts.solana.address:"evm"===o?n.data[a].ciphertexts.evm.address:null},_e=async(a,n,r)=>{const o=t.resolve(a,"network.json"),s=JSON.parse(e.readFileSync(o,"utf8")).networks,i=s.length;let l=re(a,n),c=l.default_network;const u=Fe(a,c);for(let e=0;e<i;e++){const t=s[e],n=Fe(a,t.name);if("PK"===l.account_type&&u!==n)continue;let o;o="PK"===l.account_type?l.data[r].ciphertexts.address:"evm"===n?l.data[r].ciphertexts.evm.address:l.data[r].ciphertexts.solana.address,t.name===c?console.log(`● ${o} [${t.name}]`):console.log(`○ ${o} [${t.name}]`)}},Le=async(a,r,o)=>{const s=t.resolve(a,"network.json"),i=JSON.parse(e.readFileSync(s,"utf8")).networks,l=i.length;let c=re(a,r),u=["> Back",new n.Separator("----------------------------------")],d=c.default_network,p="";o||(p=c.ciphertexts.address);let m=[];const w=Fe(a,d);for(let e=0;e<l;e++){const t=i[e],n=Fe(a,t.name);"PK"===c.account_type&&w!==n||(t.name===d?o?u.push(`● ${t.name}`):u.push(`● ${p} [${t.name}]`):o?u.push(`○ ${t.name}`):u.push(`○ ${p} [${t.name}]`),m.push(t.name))}const g=await st(u);if("> Back"===g)return;let h=u.indexOf(g);if(c.default_network=m[h-2],oe(a,r,c),!o){let e=c.default_network,t=Pe(a,e);console.log(fe.green(` Address No: #0\n Network: ${e}\n ${t.nativeCurrency.symbol} Balance: 0`))}},Te=async(e,t,a)=>{const n=Pe(t,a),r=n.rpcUrl,o=n.nativeCurrency.decimals;let s;if(s="solana"===I(n.chainId.toString())?await b(e,r):await y(e,r),s.status){let e=new g(s.output.toString());s.output=e.dividedBy(Math.pow(10,o)).toFixed(4,g.ROUND_FLOOR)}return F(n.chainId.toString(),[e],["0"]),s},Ie=(e,t,a)=>{const n=re(e,t);if("PK"===n.account_type)return n.default_network;for(let e=0;e<n.data.length;e++)if(n.data[e].ciphertexts.solana.address===a||n.data[e].ciphertexts.evm.address===a)return"default_network"in n.data[e]?n.data[e].default_network:n.default_network;return null},Ce=a=>{const n=t.resolve(a,"network.json"),r=JSON.parse(e.readFileSync(n,"utf8")).networks,o=r.length;let s=[];for(let e=0;e<o;e++)"evm"===I(r[e].chainId.toString())&&s.push(r[e].name);return s},Be=a=>{const n=t.resolve(a,"network.json");return JSON.parse(e.readFileSync(n,"utf8")).status},je=require("chalk"),Re=async(a,n)=>{let r=t.join(a,"assets.json");if(!Ot(r))return[];const o=e.readFileSync(r).toString(),s=JSON.parse(o);return n in s?s[n]:[]},ze=async(e,t,a)=>{const n=await Re(e,t);let r=[];for(let e=0;e<n.length;e++)n[e].symbol.toLocaleLowerCase()===a.toLocaleLowerCase()&&r.push(n[e]);return r},Je=async(e,t,a)=>{const n=Pe(e,t),r=I(n.chainId.toString()),o=await Re(e,n.chainId.toString());if(!o)return void console.log(je.red("No asset found"));const s=await Ee(a,o,n.rpcUrl,r,n.chainId.toString());let i=1;for(let e=0;e<s.length;e++)"0"!==s[e].balance&&"0.0000"!==s[e].balance&&(console.log(je.green(`${i}. ${s[e].symbol} Balance: ${s[e].balance}`)),i+=1);1===i&&console.log(je.red("No asset found"))},Ue=async(e,t,a)=>{const n=Pe(e,t);let r=(await Re(e,n.chainId.toString())).map(e=>e.address);r.push("0"),F(n.chainId.toString(),[a],r)},qe=async a=>{const n=t.resolve(a,"network.json");let r=[],o=JSON.parse(e.readFileSync(n,"utf8")).networks;for(let e=0;e<o.length;e++)r.push(`${e+1}. ${o[e].name}`);let s=(await st(r)).split(".")[1].trim();const i=Fe(a,s),l=Pe(a,s),c=await We("Enter contract address",ot);let u;if("evm"===i){if(!(d=c).startsWith("0x")||42!==d.length)return void console.log(je.red("evm address format error"));u=await k(c,l.rpcUrl)}else{if(!(e=>/^[A-HJ-NP-Za-km-z1-9]*$/.test(e))(c))return void console.log(je.red("solana address format error"));u=await v(c,l.rpcUrl)}var d;if(!u.status)return void console.log(je.red(u.output));u.output.name||(u.output.name=await We("Please input token name")),u.output.symbol||(u.output.symbol=await We("Please input token symbol")),console.log(je.green(`Token ${u.output.symbol}(${u.output.name}) loaded successfully.`));let p=await We("Enter decimals for display",Ye);p=parseInt(p),await(async(a,n,r,o,s,i,l)=>{let c=t.join(a,"assets.json"),u={};if(Ot(c)){const t=e.readFileSync(c).toString();u=JSON.parse(t)}void 0===u[n]&&(u[n]=[]);for(let t=0;t<u[n].length;t++)if(u[n][t].address.toLocaleLowerCase()===r.toLocaleLowerCase()||u[n][t].symbol.toLocaleLowerCase()===o.toLocaleLowerCase())return u[n][t]={address:r,symbol:o,name:s,decimals:i,display_decimals:l},void e.writeFileSync(c,JSON.stringify(u,null,4));u[n].push({address:r,symbol:o,name:s,decimals:i,display_decimals:l}),e.writeFileSync(c,JSON.stringify(u,null,4))})(a,l.chainId.toString(),c,u.output.symbol,u.output.name,u.output.decimals,p)},Ee=async(e,t,a,n,r)=>{let o=t.length,s=[];for(let r=0;r<o;r++){let o=t[r];"evm"===n?s.push(S(e,o.address,a)):"solana"===n&&s.push(x(e,o.address,a))}let i=await Promise.all(s),l=[];for(let a=0;a<o;a++){let n=t[a],o=n.decimals;if(!i[a].status)return console.log(je.red(i[a].output)),null;let s=new g(i[a].output).dividedBy(Math.pow(10,o)).toFixed(4,g.ROUND_FLOOR);l.push({address:n.address,symbol:n.symbol,balance:s}),F(r,[e],[n.address])}return F(r,[e],["0"]),l},De=async(e,t,a,n,r,o,s)=>{let i=a.length,l=Pe(e,r),c="evm"===I(l.chainId.toString());if(o&&await O(t,"0",l.chainId.toString(),n,c),s){let o=xe(e,r);for(let e=0;e<i;e++){let r=a[e].address;o.includes(r)&&await O(t,r,l.chainId.toString(),n,c)}}let u=((e,t,a,n)=>{let r={};if(!(e in h))return r;a.unshift({address:"0",name:n.nativeCurrency.name,symbol:n.nativeCurrency.symbol,decimals:n.nativeCurrency.decimals,display_decimals:4});let o=t.length;for(let n=0;n<o;n++){let o=t[n];if(o)for(let t=0;t<a.length;t++){let n=a[t],s="0";h[e][n.address]&&(o in h[e][n.address]&&(s=new g(h[e][n.address][o]).dividedBy(10**n.decimals).toFixed(n.display_decimals||4,g.ROUND_FLOOR)),r[o]||(r[o]={}),r[o][n.symbol]=s)}}return r})(l.chainId.toString(),t,a,l);return u},Me=require("chalk"),Ge=process.env.HOME||process.env.USERPROFILE,Ke=`${Ge}/.wative`,We=async(e,t)=>{const a=[{name:"inputText",type:"input",message:`${e}:`,validate:t}],{inputText:r}=await n.prompt(a);return r.trim().toString()},He=async e=>{for(let t=0;t<5;t++){let t=await Ve(e,"Input start address or index");if(!t)return console.log(Me.red("Invalid start account index")),null;let a=await Ve(e,"Input end address or index");if(!a)return console.log(Me.red("Invalid end account index")),null;if(!(t>a))return{from:t,to:a};console.log(Me.red("Invalid address range"))}return null},Ze=async(a,n,r)=>{let o=t.join(a,`accounts/${n}.json`);if(!e.existsSync(o))return null;let s=JSON.parse(e.readFileSync(o,"utf8")),i=s.data,l=s.account_type,c=i.length;if(0===c)return null;for(let e=0;e<c;e++){if("PK"===l&&i[e].ciphertexts.address.toLocaleLowerCase()===r.toLocaleLowerCase())return e.toString();if("PP"===l&&(i[e].ciphertexts.evm.address.toLocaleLowerCase()===r.toLocaleLowerCase()||i[e].ciphertexts.solana.address.toLocaleLowerCase()===r.toLocaleLowerCase()))return e.toString()}return null},Ve=async(e,t)=>{let a=e.data,n=a.length;if(0===n)return null;let r=[],o=[];for(let e=0;e<n;e++)r.push(a[e].ciphertexts.evm.address.toLocaleLowerCase()),o.push(a[e].ciphertexts.solana.address.toLocaleLowerCase());let s=n-1;for(let e=0;e<5;e++){let e=await We(t,rt),a=Nt(e);if("unknown"===a){if(Number(e)>s){console.log(Me.red("Invalid account index"));continue}return Number(e)}if("evm"===a&&-1!==r.indexOf(e.toLocaleLowerCase()))return r.indexOf(e.toLocaleLowerCase());if("solana"===a&&-1!==o.indexOf(e.toLocaleLowerCase()))return o.indexOf(e.toLocaleLowerCase())}return null},Xe=e=>""===e||((e=e.replace(/\s+/g," ").trim()).length>40?"Tag length should be less than 10":!1!==/^[0-9a-zA-Z\s]*$/g.test(e)||"Tag should be alphanumeric"),Qe=e=>!(e.length<6)||"Address length should be greater than 6",Ye=e=>!isNaN(Number(e))||"Value should be a number",et=e=>!(isNaN(Number(e))||Number(e)>1e3)||"Value should be a number",tt=e=>{const t=(e=e.replace(/\s+/g," ")).split(/\s+/g);if(12!==t.length&&24!==t.length)return"Passphrase should be equal to 12 or 24 words";for(let e=0;e<t.length;e++)if(!1===A.includes(t[e]))return"Passphrase word should be valid";return!0},at=e=>{let t=Number(e);return isNaN(t)?"Amount should be a number":!(t>2e3)||"Amount should be less than 2000"},nt=e=>{let t=Number(e);return!isNaN(t)||"Last account no should be a number"},rt=e=>!1===isNaN(Number(e))||ot(e),ot=e=>"unknown"!=Nt(e)||"Address should be valid",st=async(e,t,a)=>{const r=[{type:"list",name:"inputText",message:t||"Choose an option",default:a,choices:e,pageSize:30,filter:e=>e}],{inputText:o}=await n.prompt(r);return o.toString()},it=async(e,t,a)=>{const r=[{type:"checkbox",name:"inputText",message:t||"Choose an option",default:a,choices:e,pageSize:30,filter:e=>e}],{inputText:o}=await n.prompt(r);return o},lt=async(e,t=!1)=>{for(let a=0;a<5;a++){const a=await We(e);if(""===a&&t)return null;if(/^[0-9]*$/g.test(a))return a}return null},ct=async(e,t,a=!1)=>{for(let n=0;n<5;n++){let n=await We(t);try{if(""===n&&a)return null;if("solana"===I(e.toString()))return n;const t=await f(n);if(!t.status){console.log(Me.red(t.output));continue}if(t.output.toString()===e.toString())return n;console.log(Me.red("Rpc url not match chain id"))}catch(e){console.log(Me.red(e.message))}}return null},ut=async e=>{for(let t=0;t<5;t++){let t=await We(e);if(""===t)return null;""===t||42===t.length||console.log(Me.red("Multicall address length must be 42"))}return null},dt=async e=>{let t=/^[A-Za-z][0-9a-zA-Z]*$/g;for(let a=0;a<5;a++){let a=await We(e);if(""===a)return null;if(t.test(a))return a}return null},pt=async e=>{let t=/^#[0-9A-Fa-f]{6}$/g;for(let a=0;a<5;a++){let a=await We(e);if(""===a)return null;if(t.test(a))return a}return null},mt=(e,t)=>{const a=ne(e).accounts,n=gt(a).indexOf(t);return-1!==n?a[n]:t},wt=e=>e=(e=(e=(e=e.trim()).toLocaleLowerCase()).replace(/\s+/g,"-").trim()).replace(/\-+/g,"-").trim(),gt=e=>{let t=[];for(let a=0;a<e.length;a++)t.push(wt(e[a]));return t},ht=async(e,t)=>{let a=gt(t),n=/^(?![-_])[a-zA-Z0-9_-]{4,40}(?<![-_])$/g;for(let t=0;t<5;t++){let t=await We(e);t=t.trim();let r=wt(t);if(n.test(r)){if(a.includes(r)){console.log(Me.red("Account name already exists"));continue}return t}}return null},ft=async(e,t)=>{const a=[{name:"inputText",type:"password",mask:"#",message:`${e}:`,validate:t}],{inputText:r}=await n.prompt(a);return r.trim().toString()},yt=async e=>{const t=[{name:"password",type:"password",mask:"#",message:`${e}:`}];let{password:a}=await n.prompt(t);return a},bt=async(e,t)=>{const a=[{name:"inputText",type:"input",message:`${e}:`,validate:t,transformer:e=>{const t=e.split(" ");return t.map((e,a)=>a<t.length-1?"#".repeat(e.length):e).join(" ")}}],{inputText:r}=await n.prompt(a);return r.trim().toString()},kt=async e=>{const t=[{name:"password",type:"password",mask:"#",message:`${e}:`,validate:e=>function(e){let t,a="Password must contain at least: \n",n=!0,r=" ",o=Me.green("✔"),s=Me.red("✖");return e.length>=8?a+=r+o+" 8 characters\n":(a+=r+s+" 8 characters\n",n=!1),t=/[0-9]/,t.test(e)?a+=r+o+" One numerical character\n":(a+=r+s+" One numerical character\n",n=!1),t=/[A-Z]/,t.test(e)?a+=r+o+" One uppercase letter\n":(a+=r+s+" One uppercase letter\n",n=!1),t=/[!@#$%]/,t.test(e)?a+=r+o+" One sepcial character (i.e. !@#$%)\n":(a+=r+s+" One sepcial character (i.e. !@#$%)\n",n=!1),!!n||a}(e)}];let{password:a}=await n.prompt(t);return a},vt=async(e,t=!0)=>{const a=[{name:"confirm",type:"confirm",message:`${e}`,default:t}],{confirm:r}=await n.prompt(a);return r},St=async(e,t)=>{const a=[{name:"editor",type:"editor",message:`${e}`,validate:t}],{editor:r}=await n.prompt(a);return r.trim().toString()},xt=function(e){return!!/^0x[0-9a-fA-F]*$/g.test(e.trim())},$t=async(e,t)=>{let a;try{a={status:!0,output:await e(...t)}}catch(e){a={status:!1,output:e.toString()}}return a},Nt=e=>e.startsWith("0x")&&42===e.length?"evm":/^[A-HJ-NP-Za-km-z1-9]*$/.test(e)&&e.length<=44&&e.length>=32?"solana":"unknown",Ot=t=>(t=t.trim(),e.existsSync(t)),Ft=e=>new Promise(t=>setTimeout(t,e)),Pt=(e,t=!0)=>t?e:e.startsWith("0x")?e.slice(0,8)+"..."+e.slice(-6):e.slice(0,6)+"..."+e.slice(-6),At=(e,t)=>{if(!e.name)return null;let a=null;if(t)a=/0x[0-9a-fA-f]{40}/.exec(e.name),a=a?a[0]:null;else{let t=/\s+([0-9a-zA-Z]*)/.exec(e.name);a=t?t[1]:null,"Back"===a&&(a=null)}return a},_t=(e,t,a)=>{let n,r;return e<t/2?a/2<=t?(n=0,r=a/2):(n=0,r=t):a/2<=t?(n=0,r=a/2):(n=e-t/2+1,r=e+t/2+1),{fromIndex:n,toIndex:r}},Lt=(e,t)=>{const a=[];for(let n=0;n<e.length;n++){const r=At(e[n],t);a.push(r)}return a.concat(a)},Tt=(e,t,a,n,r,o,s,i,l)=>{for(let c=i;c<l;c++){let i=c>=t.length/2?c-t.length/2:c,l=e[i];if(!l.name)continue;let u=l.name,d=t[c],p="";if(!d)continue;for(let e in a[d])(o||e!==r)&&(s||e===r)&&(u.includes(e)||(p+=`${e}:${a[d][e].padEnd(n[e])} `));let m=u.split("(");if(m.length>1){let t=m[1];e[i].name=m[0]+` ${p}`+`(${t}`}else e[i].name=m[0]+` ${p}`}},It=async(e,t,a,r,o,s,i,l,c,u)=>{const d=[{type:"list",name:"inputText",message:c||"Choose an option",choices:e,pageSize:30,default:u,loop:!0,filter:e=>e}],p=n.prompt(d);let m,w=0,g=0;for(;!p.ui.activePrompt.answers[p.ui.activePrompt.opt.name];){if(l||await Ft(1e3),m===p.ui.activePrompt.selected)continue;if(w===p.ui.activePrompt.selected?g+=1:(g=0,w=p.ui.activePrompt.selected),l){g=6,l=!1;const e=p.ui.activePrompt.opt.pageSize,a=Lt(p.ui.activePrompt.opt.choices.choices,t),{fromIndex:n,toIndex:r}=_t(w,e,a.length),s=a.slice(n,r);if(!P(o.chainId.toString(),s)){g=0;continue}}if(g<5)continue;g=0;const e=p.ui.activePrompt.opt.pageSize,n=Lt(p.ui.activePrompt.opt.choices.choices,t),{fromIndex:c,toIndex:u}=_t(w,e,n.length),d=n.slice(c,u);let h=await De(a,d,r,o.rpcUrl,o.name,s,i),f={};for(let e in h)for(let t in h[e]){let a=h[e][t].length+1;f[t]?f[t]<a&&(f[t]=a):f[t]=a}const y=o.nativeCurrency.symbol;Tt(p.ui.activePrompt.opt.choices.choices,n,h,f,y,s,i,c,u),p.ui.activePrompt.screen.render(""),p.ui.activePrompt.render(),m=w}return p.ui.activePrompt.answers[p.ui.activePrompt.opt.name]};require("wative-core");const Ct=async(e,t)=>{switch(await st(["> System & Settings","> Accounts","> Tools","> Exit"])){case"> System & Settings":await Ne(e);break;case"> Accounts":await he(e,t);break;case"> Tools":await V(e,t);break;case"> Exit":return}await Ct(e,t)},{WativeCore:Bt}=require("wative-core"),jt=require("../package.json");require("events").EventEmitter.defaultMaxListeners=0;process.on("unhandledRejection",(e,t)=>{console.log("Unhandled Rejection at:",t,"reason:",e)}),(async()=>{console.log("version:",jt.version),console.log(Me.green(a.textSync("Wative",{font:"ANSI Shadow",horizontalLayout:"default",verticalLayout:"default"})));const n=await(async()=>{let t=await We(`Keystore storage located in (default: ${Ke})`);return t||(t=Ke),t=t.trim(),t=t.replace("~",Ge),e.existsSync(t)||e.mkdirSync(t,{recursive:!0}),t})();await(async a=>{const n=t.resolve(a,"network.json");if(e.existsSync(n))return;const r={networks:_,currentNetwork:"Ethereum Mainnet",accounts:[]};e.writeFileSync(n,JSON.stringify(r,null,2))})(n),(a=>{const n=t.resolve(a,"network.json"),r=JSON.parse(e.readFileSync(n,"utf8"));r.status||(r.status={fullAddr:!0,gasToken:!1,extendedToken:!1}),r.showTokens||(r.showTokens={});let o=r.accounts.length;for(let n=0;n<o;n++){let s=r.accounts[o-1-n],i=wt(s),l=t.resolve(a,`accounts/${i}.json`);e.existsSync(l)||r.accounts.splice(o-1-n,1)}e.writeFileSync(n,JSON.stringify(r,null,4));let s=r.accounts,i=gt(s);for(let n=0;n<i.length;n++){let r=t.resolve(a,`accounts/${i[n]}.json`),o=JSON.parse(e.readFileSync(r,"utf8"));"PP"!==o.account_type&&("data"in o||(o.data=[{ciphertexts:o.ciphertexts}],delete o.ciphertexts,e.writeFileSync(r,JSON.stringify(o,null,4))))}})(n);const r=t.resolve(n,"network.json"),o=JSON.parse(e.readFileSync(r,"utf8"));let s=gt(o.accounts);const i=new Bt(n,s,null,!0);await Ct(n,i)})().then(()=>process.exit(0)).catch(e=>{console.log(e.message),process.exit(1)});