diff --git a/Data/js/jcwallet.js b/Data/js/jcwallet.js index f968198..19326e6 100644 --- a/Data/js/jcwallet.js +++ b/Data/js/jcwallet.js @@ -132,7 +132,7 @@ version: 2.9.0 `;return r+=e.wordwrap(this.getPrivateBaseKeyB64())+` `,r+="-----END RSA PRIVATE KEY-----",r},e.prototype.getPublicKey=function(){var r=`-----BEGIN PUBLIC KEY----- `;return r+=e.wordwrap(this.getPublicBaseKeyB64())+` -`,r+="-----END PUBLIC KEY-----",r},e.hasPublicKeyProperty=function(r){return r=r||{},r.hasOwnProperty("n")&&r.hasOwnProperty("e")},e.hasPrivateKeyProperty=function(r){return r=r||{},r.hasOwnProperty("n")&&r.hasOwnProperty("e")&&r.hasOwnProperty("d")&&r.hasOwnProperty("p")&&r.hasOwnProperty("q")&&r.hasOwnProperty("dmp1")&&r.hasOwnProperty("dmq1")&&r.hasOwnProperty("coeff")},e.prototype.parsePropertiesFrom=function(r){this.n=r.n,this.e=r.e,r.hasOwnProperty("d")&&(this.d=r.d,this.p=r.p,this.q=r.q,this.dmp1=r.dmp1,this.dmq1=r.dmq1,this.coeff=r.coeff)},e}(H_0),ay,Z_0=typeof Fe<"u"?(ay=Fe.env)===null||ay===void 0?void 0:ay.npm_package_version:void 0,Y_0=function(){function t(e){e===void 0&&(e={}),e=e||{},this.default_key_size=e.default_key_size?parseInt(e.default_key_size,10):1024,this.default_public_exponent=e.default_public_exponent||"010001",this.log=e.log||!1,this.key=null}return t.prototype.setKey=function(e){this.log&&this.key&&console.warn("A key was already set, overriding existing."),this.key=new WD(e)},t.prototype.setPrivateKey=function(e){this.setKey(e)},t.prototype.setPublicKey=function(e){this.setKey(e)},t.prototype.decrypt=function(e){try{return this.getKey().decrypt(UD(e))}catch{return!1}},t.prototype.encrypt=function(e){try{return Ah(this.getKey().encrypt(e))}catch{return!1}},t.prototype.sign=function(e,r,a){try{return Ah(this.getKey().sign(e,r,a))}catch{return!1}},t.prototype.verify=function(e,r,a){try{return this.getKey().verify(e,UD(r),a)}catch{return!1}},t.prototype.getKey=function(e){if(!this.key){if(this.key=new WD,e&&{}.toString.call(e)==="[object Function]"){this.key.generateAsync(this.default_key_size,this.default_public_exponent,e);return}this.key.generate(this.default_key_size,this.default_public_exponent)}return this.key},t.prototype.getPrivateKey=function(){return this.getKey().getPrivateKey()},t.prototype.getPrivateKeyB64=function(){return this.getKey().getPrivateBaseKeyB64()},t.prototype.getPublicKey=function(){return this.getKey().getPublicKey()},t.prototype.getPublicKeyB64=function(){return this.getKey().getPublicBaseKeyB64()},t.version=Z_0,t}();function J_0(t){return i_0(t).toString()}function X_0(t){return a_0(t).toString()}function GD(t){const e=n_0(t).toString(),r=I1.enc.Base64.parse(e),a=r.clone();return a.sigBytes=16,a.words.splice(4),{keyHex:r,ivHex:a}}function iy(t,e){const{keyHex:r,ivHex:a}=GD(e),f=I1.enc.Utf8.parse(t);return I1.AES.encrypt(f,r,{iv:a,mode:I1.mode.CBC,padding:I1.pad.Pkcs7}).toString()}function ny(t,e){const{keyHex:r,ivHex:a}=GD(e),f=I1.AES.decrypt(t,r,{iv:a,mode:I1.mode.CBC,padding:I1.pad.Pkcs7});return I1.enc.Utf8.stringify(f)}function ZD(t,e){var r=new Y_0;return e?(e.startsWith("-----BEGIN PUBLIC KEY-----")||(e=window.atob(e)),r.setPublicKey(e),r.encrypt(t)):!1}function YD(){return Or()}var Q_0=Object.freeze({__proto__:null,aesDecrypt:ny,aesEncrypt:iy,md5Hash:X_0,randomId:YD,rsaEncryptJs:ZD,sha1Hash:J_0}),eM0=Object.defineProperty,tM0=Object.getOwnPropertyDescriptor,rM0=(t,e,r,a)=>{for(var f=a>1?void 0:a?tM0(e,r):e,n=t.length-1,l;n>=0;n--)(l=t[n])&&(f=(a?l(e,r,f):l(f))||f);return a&&f&&eM0(e,r,f),f};let bf=class{constructor(){this._event=nh()}_subscribeToResponse(t,e){this._event.on(`response:${t}`,e)}_subscribeToCallResponse(t){return new Promise((e,r)=>{this._subscribeToResponse(t,a=>{if(a.errcode){r(a.errmessage||a.errcode);return}e(a.data)})})}handleNativeCallback(...t){let e=t[0],r=JSON.parse(t[1]);this._event.emit(`response:${e}`,r)}signWithGoogle(){let t=Or()+"";return jsb.signWithGoogle(t),this._subscribeToCallResponse(t)}signWithApple(){let t=Or()+"";return jsb.signWithApple(t),this._subscribeToCallResponse(t)}signWithTikTok(){let t=Or()+"";return jsb.signWithTikTok(t),this._subscribeToCallResponse(t)}signWithFacebook(){let t=Or()+"";return jsb.signWithFacebook(t),this._subscribeToCallResponse(t)}signWithTwitter(){let t=Or()+"";return jsb.signWithTwitter(t),this._subscribeToCallResponse(t)}signWithEmail(){let t=Or()+"";return jsb.signWithEmail(t),this._subscribeToCallResponse(t)}signOutGoogle(){let t=Or()+"";return jsb.signOutGoogle(t),this._subscribeToCallResponse(t)}scanQRCode(t){let e=Or()+"";return jsb.scanQRCode(e,t),this._subscribeToCallResponse(e)}buyProduct(t,e){let r=Or()+"";return jsb.beginBuy(r,t,e),this._subscribeToCallResponse(r)}queryPurchase(){let t=Or()+"";return jsb.queryPurchase(t),this._subscribeToCallResponse(t)}queryProducts(t){let e=Or()+"";return jsb.queryProducts(e,t),this._subscribeToCallResponse(e)}finishTransaction(t){let e=Or()+"";return jsb.finishTransaction(e,t),this._subscribeToCallResponse(e)}authGetStoragePass(t){let e=Or()+"";return jsb.authGetStoragePass(e,t),this._subscribeToCallResponse(e)}passStorageState(t){let e=Or()+"";return jsb.passStorageState(e,t),this._subscribeToCallResponse(e)}storagePass(t,e){let r=Or()+"";return jsb.storagePass(r,t,e),this._subscribeToCallResponse(r)}signWithDiscord(){let t=Or()+"";return jsb.signWithDiscord(t),this._subscribeToCallResponse(t)}clientLogin(){let t=Or()+"";return jsb.getClientId(t),this._subscribeToCallResponse(t)}};bf=rM0([$c],bf);function aM0(t){const e=`${Kr()}/wallet/login/general`;return Nr(e,t)}function iM0(){const t=`${Kr()}/wallet/info`;return fh(t)}function nM0(t){const e=`${Kr()}/wallet/info`;return Nr(e,t)}function fM0(){const t=`${Kr()}/wallet/reset`;return Nr(t,{})}function cM0(){const t=`${Kr()}/wallet/account/reset`;return Nr(t,{})}function oM0(){const t=`${Kr()}/wallet/third/nonce`;return fh(t)}function Rh(t,e=3,r=[],a=0){return new Promise((f,n)=>{t().then(f).catch(l=>{(r.length==0||r.indexOf(l.constructor)!==-1)&&a++{Rh(t,e,r,a).then(f).catch(m=>n(m))},Math.floor(Math.random()*Math.pow(2,a)*400)):n(l)})})}class Xt{constructor(e,r){this.statusCode=e,this.message=r}}function dM0(){const t=`${Kr()}/wallet/info/email`;return fh(t)}function sM0(t){const e=`${Kr()}/email/send_code`;return Nr(e,t)}function uM0(t){const e=`${Kr()}/email/verify_by_code`;return Nr(e,t)}function bM0(t){const e=`${Kr()}/email/check`;return Nr(e,t)}function hM0(t){const e=`${Kr()}/email/regist`;return Nr(e,t)}function lM0(t){const e=`${Kr()}/wallet/login/email`;return Nr(e,t)}var Gc=(t=>(t[t.GOOGLE=0]="GOOGLE",t[t.APPLE=1]="APPLE",t[t.TIKTOK=2]="TIKTOK",t[t.FACEBOOK=3]="FACEBOOK",t[t.TWITTER=4]="TWITTER",t[t.TELEGRAM=5]="TELEGRAM",t[t.EMAIL=6]="EMAIL",t[t.DISCORD=7]="DISCORD",t[t.CLIENT=10]="CLIENT",t[t.RELAY_WALLET=11]="RELAY_WALLET",t[t.WC=12]="WC",t[t.EXTERNAL_WALLET=13]="EXTERNAL_WALLET",t))(Gc||{});const xM0=new Map([[Gc.GOOGLE,"signWithGoogle"],[Gc.APPLE,"signWithApple"],[Gc.FACEBOOK,"signWithFacebook"],[Gc.TIKTOK,"signWithTikTok"],[Gc.TWITTER,"signWithTwitter"],[Gc.CLIENT,"clientLogin"],[Gc.DISCORD,"signWithDiscord"]]);async function Oh(){let t=new oa,e=await Rh(()=>iM0(),dN);if(e.errcode)throw new Xt(e.errcode,e.errmsg);t.address=e.data.address,t.key=e.data.key,t.salt=e.data.salt}async function fy(t){const e=await aM0(t);if(window.debug&&console.log(e),window.debug&&console.log("wallet token: "+e.data?.token),e.errcode||!e.data?.token)throw new Xt(e.errcode,e.errmsg);return new oa().token=e.data.token,vM0(e.data.token,t.channel),e.data.token}function pM0(t){const e=`wallet_token_${t}`;if(window.debug){let r=localStorage.getItem(e);if(r&&!mN(60,r))return new oa().token=r,r}}function vM0(t,e){const r=`wallet_token_${e}`;window.debug&&localStorage.setItem(r,t)}async function JD(t,e){let r=new oa;const a=xM0.get(t);if(!a)throw new Xt(100,"channel not support");if(!pM0(t)){const f=await new bf()[a]();await fy({channel:t,code:f,account:e})}return await Oh(),{token:r.token,address:r.address}}async function mM0(t,e){e=jsb.hashSvrPass(e);let r=await lM0({email:t,password:e});if(r.errcode||!r.data?.token)throw new Xt(r.errcode,r.errmsg);let a=new oa;return a.token=r.data.token,await Oh(),{token:a.token,address:a.address}}async function gM0(t){let e=new oa,r=await XD(t);if(e.address&&e.address!==r)throw new Xt(10,"address not match, perhaps wrong password");return e.address||Rh(()=>nM0({address:r}),Cg0),e.address=r,r}async function XD(t){let e=new oa;await Oh();let{id:r,openid:a}=e.tokenData;return jsb.prepareWallet(r,a,e.key,e.salt,t)}async function yM0(t){let e=await XD(t);return new oa().address===e}function wM0(t){let e=new oa;if(!e.address||!e.key)throw new Xt(10,"wallet not found");let{id:r,openid:a}=e.tokenData,f=jsb.walletSecKey(r,a,e.key,e.salt,t),n=JSON.parse(f);if(n.address!==e.address)throw new Xt(11,"address not match, perhaps wrong password");return n.key}async function _M0(t){console.log("found web login scheme, begin login")}function MM0(t){let e=Qg0(t);if(e)switch(t.replace(e+"://",""),e){case"weblogin":_M0();break}}var EM0=Object.defineProperty,AM0=Object.getOwnPropertyDescriptor,SM0=(t,e,r,a)=>{for(var f=a>1?void 0:a?AM0(e,r):e,n=t.length-1,l;n>=0;n--)(l=t[n])&&(f=(a?l(e,r,f):l(f))||f);return a&&f&&EM0(e,r,f),f};let cy=class{async checkEmailVerified(){let t=await dM0();if(t.errcode)throw new Xt(t.errcode,t.errmsg);const{data:e}=t;if(!e)throw new Error("Invalid response from the server");const{verified:r,email:a}=e;if(!a||typeof r!="number")throw new Error("Invalid values returned from server");return{verified:r,email:a}}async sendEmailCode(t,e){let r=await sM0({email:t,type:e});if(console.log(JSON.stringify(r)),r.errcode)throw new Xt(r.errcode,r.errmsg);return r.data}async updateEmailVerify(t,e){let r=await uM0({email:t,code:e});if(r.errcode)throw new Xt(r.errcode,r.errmsg);return r.data}async isEmailRegister(t){let e=await bM0({email:t});if(e.errcode)throw new Xt(e.errcode,e.errmsg);return e.data}async registByEmail(t,e,r){e=jsb.hashSvrPass(e);let a=await hM0({email:t,password:e,code:r});if(a.errcode)throw new Xt(a.errcode,a.errmsg);return a.data}};cy=SM0([$c],cy);function kM0(t){const e=`${C8()}/pay/alchemy/buy`;return Nr(e,t)}function TM0(t,e,r){const a=`${C8()}/pay/alchemy/crypto_price`;return Nr(a,{token:t,chain:e,env:r})}function BM0(){const t=`${C8()}/pay/alchemy/fait_list`;return fh(t)}function QD(t){const e=`${C8()}/pay/google/verify`;return Nr(e,t)}function e$(t){const e=`${C8()}/pay/apple/verify`;return Nr(e,t)}var PM0=Object.defineProperty,CM0=Object.getOwnPropertyDescriptor,IM0=(t,e,r,a)=>{for(var f=a>1?void 0:a?CM0(e,r):e,n=t.length-1,l;n>=0;n--)(l=t[n])&&(f=(a?l(e,r,f):l(f))||f);return a&&f&&PM0(e,r,f),f};let d6=class{constructor(){this.priceMap=new Map}async alchemyPrePay(t){t.evn=jc.wallet.env,t.version=uN;let e=await kM0(t);if(e.errcode)throw new Error(e.errmsg);if(!e.data)throw new Error("No data returned");const r=e.data.url;if(!r)throw new Error("No url returned");return console.log("pay url::",r),e.data}async getGasPrice(t){const e=`gasprice_${t}`;if(this.priceMap.has(e))setTimeout(async()=>{let r=await new jc.wallet.web3.eth.getGasPrice;this.priceMap.set(e,r+"")},100);else{let r=await new jc.wallet.web3.eth.getGasPrice;this.priceMap.set(e,r+"")}return console.log("gas price",this.priceMap.get(e)),this.priceMap.get(e)}async updateTokenPrice(t,e,r){const a=`crypto_usd_${t}_${e}_${r}`;let f=await TM0(e,t,r);console.log("ETH price data",JSON.stringify(f));let n=f.data.price;this.priceMap.set(a,n+"")}async queryTokenPrice(t,e,r="release"){t=t.toUpperCase(),e=e.toUpperCase();const a=`crypto_usd_${t}_${e}_${r}`;if(this.priceMap.has(a))setTimeout(async()=>{try{await this.updateTokenPrice(t,e,r)}catch(f){console.log("ETH price err",f)}},100);else try{await this.updateTokenPrice(t,e,r)}catch(f){console.log("ETH price err",f)}return console.log("ETH price",this.priceMap.get(a)),this.priceMap.get(a)}async fetchFiatList(){return BM0()}async queryGoogleProducts(t){return await new bf().queryProducts(t.join(","))}async queryGooglePurchases(){let t=await new bf().queryPurchase(),e=JSON.parse(t+"");if(console.log("query purchase result:: "+e),e.length===0)throw new Xt(10,"no records");let r=await QD({list:e});if(r.errcode)throw new Xt(r.errcode,r.errmsg);return r.data}async buyGoogleProduct(t,e){let r=await new bf().buyProduct(t,e),a=JSON.parse(r+"");if(console.log("native buy result:: "+a),a.length===0)throw new Xt(10,"no records");let f=await QD({list:a});if(f.errcode)throw new Xt(f.errcode,f.errmsg);return f.data}async queryIOSProducts(t){return await new bf().queryProducts(t.join(","))}async queryIOSPurchases(){let t=await new bf().queryPurchase(),e=JSON.parse(t+"");if(console.log("query apple purchase result:: "+t),e.length===0)throw new Xt(10,"no records");let r=await e$({list:e});if(r.errcode)throw new Xt(r.errcode,r.errmsg);if(r.data.length>0)for(let a=0;a0)for(let n=0;n{for(var f=a>1?void 0:a?OM0(e,r):e,n=t.length-1,l;n>=0;n--)(l=t[n])&&(f=(a?l(e,r,f):l(f))||f);return a&&f&&RM0(e,r,f),f};let oy=class{async ethRecords(t,e,r){t=t|0,e=e|0;let a={start:t,limit:e,chain:jc.wallet.currentChain.id};return Object.assign(a,r),yN(a)}async tokenRecords({address:t,tokenId:e,start:r,limit:a,moreParam:f}){r=r|0,a=a|0;let n={start:r,limit:a,chain:jc.wallet.currentChain.id,"details.address":t};return e&&(n["details.id"]=e+""),Object.assign(n,f),yN(n)}};oy=NM0([$c],oy);var O1={},L8={},vs=Ft,DM0=t1.ec,dy=new DM0("secp256k1"),s6=dy.curve;L8.privateKeyExport=function(t,e){var r=new vs(t);if(r.ucmp(s6.n)>=0)throw new Error("couldn't export to DER format");var a=dy.g.mul(r);return t$(a.getX(),a.getY(),e)},L8.privateKeyModInverse=function(t){var e=new vs(t);if(e.ucmp(s6.n)>=0||e.isZero())throw new Error("private key range is invalid");return e.invm(s6.n).toArrayLike(Q,"be",32)},L8.signatureImport=function(t){var e=new vs(t.r);e.ucmp(s6.n)>=0&&(e=new vs(0));var r=new vs(t.s);return r.ucmp(s6.n)>=0&&(r=new vs(0)),Q.concat([e.toArrayLike(Q,"be",32),r.toArrayLike(Q,"be",32)])},L8.ecdhUnsafe=function(t,e,r){var a=dy.keyFromPublic(t),f=new vs(e);if(f.ucmp(s6.n)>=0||f.isZero())throw new Error("scalar was invalid (zero or overflow)");var n=a.pub.mul(f);return t$(n.getX(),n.getY(),r)};var t$=function(e,r,a){var f=void 0;return a?(f=Q.alloc(33),f[0]=r.isOdd()?3:2,e.toArrayLike(Q,"be",32).copy(f,1)):(f=Q.alloc(65),f[0]=4,e.toArrayLike(Q,"be",32).copy(f,1),r.toArrayLike(Q,"be",32).copy(f,33)),f},Nh={},$M0=Q.from([48,129,211,2,1,1,4,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,160,129,133,48,129,130,2,1,1,48,44,6,7,42,134,72,206,61,1,1,2,33,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,255,255,252,47,48,6,4,1,0,4,1,7,4,33,2,121,190,102,126,249,220,187,172,85,160,98,149,206,135,11,7,2,155,252,219,45,206,40,217,89,242,129,91,22,248,23,152,2,33,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,186,174,220,230,175,72,160,59,191,210,94,140,208,54,65,65,2,1,1,161,36,3,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),UM0=Q.from([48,130,1,19,2,1,1,4,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,160,129,165,48,129,162,2,1,1,48,44,6,7,42,134,72,206,61,1,1,2,33,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,255,255,252,47,48,6,4,1,0,4,1,7,4,65,4,121,190,102,126,249,220,187,172,85,160,98,149,206,135,11,7,2,155,252,219,45,206,40,217,89,242,129,91,22,248,23,152,72,58,218,119,38,163,196,101,93,164,251,252,14,17,8,168,253,23,180,72,166,133,84,25,156,71,208,143,251,16,212,184,2,33,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,186,174,220,230,175,72,160,59,191,210,94,140,208,54,65,65,2,1,1,161,68,3,66,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]);Nh.privateKeyExport=function(t,e,r){var a=Q.from(r?$M0:UM0);return t.copy(a,r?8:9),e.copy(a,r?181:214),a},Nh.privateKeyImport=function(t){var e=t.length,r=0;if(e2||e1?t[r+a-2]<<8:0);return r+=a,e32||ea)||t[f++]!==2)return null;var l=t[f++];if(l&128){if(n=l-128,f+n>a)return null;for(;n>0&&t[f]===0;f+=1,n-=1);for(l=0;n>0;f+=1,n-=1)l=(l<<8)+t[f]}if(l>a-f)return null;var m=f;if(f+=l,t[f++]!==2)return null;var y=t[f++];if(y&128){if(n=y-128,f+n>a)return null;for(;n>0&&t[f]===0;f+=1,n-=1);for(y=0;n>0;f+=1,n-=1)y=(y<<8)+t[f]}if(y>a-f)return null;var _=f;for(f+=y;l>0&&t[m]===0;l-=1,m+=1);if(l>32)return null;var E=t.slice(m,m+l);for(E.copy(e,32-E.length);y>0&&t[_]===0;y-=1,_+=1);if(y>32)return null;var A=t.slice(_,_+y);return A.copy(r,32-A.length),{r:e,s:r}};var Na=Pi,Dh=L8,sy=Nh,r$=function(e){return e.length!==32?!1:Na.privateKeyVerify(Uint8Array.from(e))},LM0=function(e,r){if(e.length!==32)throw new RangeError("private key length is invalid");var a=Dh.privateKeyExport(e,r);return sy.privateKeyExport(e,a,r)},FM0=function(e){if(e=sy.privateKeyImport(e),e!==null&&e.length===32&&r$(e))return e;throw new Error("couldn't import from DER format")},jM0=function(e){return Q.from(Na.privateKeyNegate(Uint8Array.from(e)))},zM0=function(e){if(e.length!==32)throw new Error("private key length is invalid");return Q.from(Dh.privateKeyModInverse(Uint8Array.from(e)))},qM0=function(e,r){return Q.from(Na.privateKeyTweakAdd(Uint8Array.from(e),r))},HM0=function(e,r){return Q.from(Na.privateKeyTweakMul(Uint8Array.from(e),Uint8Array.from(r)))},KM0=function(e,r){return Q.from(Na.publicKeyCreate(Uint8Array.from(e),r))},VM0=function(e,r){return Q.from(Na.publicKeyConvert(Uint8Array.from(e),r))},WM0=function(e){return e.length!==33&&e.length!==65?!1:Na.publicKeyVerify(Uint8Array.from(e))},GM0=function(e,r,a){return Q.from(Na.publicKeyTweakAdd(Uint8Array.from(e),Uint8Array.from(r),a))},ZM0=function(e,r,a){return Q.from(Na.publicKeyTweakMul(Uint8Array.from(e),Uint8Array.from(r),a))},YM0=function(e,r){var a=[];return e.forEach(function(f){a.push(Uint8Array.from(f))}),Q.from(Na.publicKeyCombine(a,r))},JM0=function(e){return Q.from(Na.signatureNormalize(Uint8Array.from(e)))},XM0=function(e){return Q.from(Na.signatureExport(Uint8Array.from(e)))},QM0=function(e){return Q.from(Na.signatureImport(Uint8Array.from(e)))},eE0=function(e){if(e.length===0)throw new RangeError("signature length is invalid");var r=sy.signatureImportLax(e);if(r===null)throw new Error("couldn't parse DER signature");return Dh.signatureImport(r)},tE0=function(e,r,a){if(a===null)throw new TypeError("options should be an Object");var f=void 0;if(a){if(f={},a.data===null)throw new TypeError("options.data should be a Buffer");if(a.data){if(a.data.length!==32)throw new RangeError("options.data length is invalid");f.data=new Uint8Array(a.data)}if(a.noncefn===null)throw new TypeError("options.noncefn should be a Function");a.noncefn&&(f.noncefn=function(l,m,y,_,E){var A=y!=null?Q.from(y):null,k=_!=null?Q.from(_):null,P=Q.from("");return a.noncefn&&(P=a.noncefn(Q.from(l),Q.from(m),A,k,E)),Uint8Array.from(P)})}var n=Na.ecdsaSign(Uint8Array.from(e),Uint8Array.from(r),f);return{signature:Q.from(n.signature),recovery:n.recid}},rE0=function(e,r,a){return Na.ecdsaVerify(Uint8Array.from(r),Uint8Array.from(e),a)},aE0=function(e,r,a,f){return Q.from(Na.ecdsaRecover(Uint8Array.from(r),a,Uint8Array.from(e),f))},iE0=function(e,r){return Q.from(Na.ecdh(Uint8Array.from(e),Uint8Array.from(r),{}))},nE0=function(e,r,a){if(e.length!==33&&e.length!==65)throw new RangeError("public key length is invalid");if(r.length!==32)throw new RangeError("private key length is invalid");return Q.from(Dh.ecdhUnsafe(Uint8Array.from(e),Uint8Array.from(r),a))},fE0={privateKeyVerify:r$,privateKeyExport:LM0,privateKeyImport:FM0,privateKeyNegate:jM0,privateKeyModInverse:zM0,privateKeyTweakAdd:qM0,privateKeyTweakMul:HM0,publicKeyCreate:KM0,publicKeyConvert:VM0,publicKeyVerify:WM0,publicKeyTweakAdd:GM0,publicKeyTweakMul:ZM0,publicKeyCombine:YM0,signatureNormalize:JM0,signatureExport:XM0,signatureImport:QM0,signatureImportLax:eE0,sign:tE0,verify:rE0,recover:aE0,ecdh:iE0,ecdhUnsafe:nE0};(function(t){var e=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(B){return typeof B}:function(B){return B&&typeof Symbol=="function"&&B.constructor===Symbol&&B!==Symbol.prototype?"symbol":typeof B},r=an,a=r.keccak224,f=r.keccak384,n=r.keccak256,l=r.keccak512,m=fE0,y=Lr,_=na,E=Ft,A=bi,k=ct.Buffer;Object.assign(t,Un),t.MAX_INTEGER=new E("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",16),t.TWO_POW256=new E("10000000000000000000000000000000000000000000000000000000000000000",16),t.KECCAK256_NULL_S="c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",t.SHA3_NULL_S=t.KECCAK256_NULL_S,t.KECCAK256_NULL=k.from(t.KECCAK256_NULL_S,"hex"),t.SHA3_NULL=t.KECCAK256_NULL,t.KECCAK256_RLP_ARRAY_S="1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",t.SHA3_RLP_ARRAY_S=t.KECCAK256_RLP_ARRAY_S,t.KECCAK256_RLP_ARRAY=k.from(t.KECCAK256_RLP_ARRAY_S,"hex"),t.SHA3_RLP_ARRAY=t.KECCAK256_RLP_ARRAY,t.KECCAK256_RLP_S="56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",t.SHA3_RLP_S=t.KECCAK256_RLP_S,t.KECCAK256_RLP=k.from(t.KECCAK256_RLP_S,"hex"),t.SHA3_RLP=t.KECCAK256_RLP,t.BN=E,t.rlp=_,t.secp256k1=m,t.zeros=function(B){return k.allocUnsafe(B).fill(0)},t.zeroAddress=function(){var B=20,I=t.zeros(B);return t.bufferToHex(I)},t.setLengthLeft=t.setLength=function(B,I,O){var H=t.zeros(I);return B=t.toBuffer(B),O?B.length0&&I.toString()==="0";)B=B.slice(1),I=B[0];return B},t.toBuffer=function(B){if(!k.isBuffer(B))if(Array.isArray(B))B=k.from(B);else if(typeof B=="string")t.isHexString(B)?B=k.from(t.padToEven(t.stripHexPrefix(B)),"hex"):B=k.from(B);else if(typeof B=="number")B=t.intToBuffer(B);else if(B==null)B=k.allocUnsafe(0);else if(E.isBN(B))B=B.toArrayLike(k);else if(B.toArray)B=k.from(B.toArray());else throw new Error("invalid type");return B},t.bufferToInt=function(B){return new E(t.toBuffer(B)).toNumber()},t.bufferToHex=function(B){return B=t.toBuffer(B),"0x"+B.toString("hex")},t.fromSigned=function(B){return new E(B).fromTwos(256)},t.toUnsigned=function(B){return k.from(B.toTwos(256).toArray())},t.keccak=function(B,I){switch(B=t.toBuffer(B),I||(I=256),I){case 224:return a(B);case 256:return n(B);case 384:return f(B);case 512:return l(B);default:throw new Error("Invald algorithm: keccak"+I)}},t.keccak256=function(B){return t.keccak(B)},t.sha3=t.keccak,t.sha256=function(B){return B=t.toBuffer(B),A("sha256").update(B).digest()},t.ripemd160=function(B,I){B=t.toBuffer(B);var O=A("rmd160").update(B).digest();return I===!0?t.setLength(O,32):O},t.rlphash=function(B){return t.keccak(_.encode(B))},t.isValidPrivate=function(B){return m.privateKeyVerify(B)},t.isValidPublic=function(B,I){return B.length===64?m.publicKeyVerify(k.concat([k.from([4]),B])):I?m.publicKeyVerify(B):!1},t.pubToAddress=t.publicToAddress=function(B,I){return B=t.toBuffer(B),I&&B.length!==64&&(B=m.publicKeyConvert(B,!1).slice(1)),y(B.length===64),t.keccak(B).slice(-20)};var P=t.privateToPublic=function(B){return B=t.toBuffer(B),m.publicKeyCreate(B,!1).slice(1)};t.importPublic=function(B){return B=t.toBuffer(B),B.length!==64&&(B=m.publicKeyConvert(B,!1).slice(1)),B},t.ecsign=function(B,I){var O=m.sign(B,I),H={};return H.r=O.signature.slice(0,32),H.s=O.signature.slice(32,64),H.v=O.recovery+27,H},t.hashPersonalMessage=function(B){var I=t.toBuffer(`Ethereum Signed Message: +`,r+="-----END PUBLIC KEY-----",r},e.hasPublicKeyProperty=function(r){return r=r||{},r.hasOwnProperty("n")&&r.hasOwnProperty("e")},e.hasPrivateKeyProperty=function(r){return r=r||{},r.hasOwnProperty("n")&&r.hasOwnProperty("e")&&r.hasOwnProperty("d")&&r.hasOwnProperty("p")&&r.hasOwnProperty("q")&&r.hasOwnProperty("dmp1")&&r.hasOwnProperty("dmq1")&&r.hasOwnProperty("coeff")},e.prototype.parsePropertiesFrom=function(r){this.n=r.n,this.e=r.e,r.hasOwnProperty("d")&&(this.d=r.d,this.p=r.p,this.q=r.q,this.dmp1=r.dmp1,this.dmq1=r.dmq1,this.coeff=r.coeff)},e}(H_0),ay,Z_0=typeof Fe<"u"?(ay=Fe.env)===null||ay===void 0?void 0:ay.npm_package_version:void 0,Y_0=function(){function t(e){e===void 0&&(e={}),e=e||{},this.default_key_size=e.default_key_size?parseInt(e.default_key_size,10):1024,this.default_public_exponent=e.default_public_exponent||"010001",this.log=e.log||!1,this.key=null}return t.prototype.setKey=function(e){this.log&&this.key&&console.warn("A key was already set, overriding existing."),this.key=new WD(e)},t.prototype.setPrivateKey=function(e){this.setKey(e)},t.prototype.setPublicKey=function(e){this.setKey(e)},t.prototype.decrypt=function(e){try{return this.getKey().decrypt(UD(e))}catch{return!1}},t.prototype.encrypt=function(e){try{return Ah(this.getKey().encrypt(e))}catch{return!1}},t.prototype.sign=function(e,r,a){try{return Ah(this.getKey().sign(e,r,a))}catch{return!1}},t.prototype.verify=function(e,r,a){try{return this.getKey().verify(e,UD(r),a)}catch{return!1}},t.prototype.getKey=function(e){if(!this.key){if(this.key=new WD,e&&{}.toString.call(e)==="[object Function]"){this.key.generateAsync(this.default_key_size,this.default_public_exponent,e);return}this.key.generate(this.default_key_size,this.default_public_exponent)}return this.key},t.prototype.getPrivateKey=function(){return this.getKey().getPrivateKey()},t.prototype.getPrivateKeyB64=function(){return this.getKey().getPrivateBaseKeyB64()},t.prototype.getPublicKey=function(){return this.getKey().getPublicKey()},t.prototype.getPublicKeyB64=function(){return this.getKey().getPublicBaseKeyB64()},t.version=Z_0,t}();function J_0(t){return i_0(t).toString()}function X_0(t){return a_0(t).toString()}function GD(t){const e=n_0(t).toString(),r=I1.enc.Base64.parse(e),a=r.clone();return a.sigBytes=16,a.words.splice(4),{keyHex:r,ivHex:a}}function iy(t,e){const{keyHex:r,ivHex:a}=GD(e),f=I1.enc.Utf8.parse(t);return I1.AES.encrypt(f,r,{iv:a,mode:I1.mode.CBC,padding:I1.pad.Pkcs7}).toString()}function ny(t,e){const{keyHex:r,ivHex:a}=GD(e),f=I1.AES.decrypt(t,r,{iv:a,mode:I1.mode.CBC,padding:I1.pad.Pkcs7});return I1.enc.Utf8.stringify(f)}function ZD(t,e){var r=new Y_0;return e?(e.startsWith("-----BEGIN PUBLIC KEY-----")||(e=window.atob(e)),r.setPublicKey(e),r.encrypt(t)):!1}function YD(){return Or()}var Q_0=Object.freeze({__proto__:null,aesDecrypt:ny,aesEncrypt:iy,md5Hash:X_0,randomId:YD,rsaEncryptJs:ZD,sha1Hash:J_0}),eM0=Object.defineProperty,tM0=Object.getOwnPropertyDescriptor,rM0=(t,e,r,a)=>{for(var f=a>1?void 0:a?tM0(e,r):e,n=t.length-1,l;n>=0;n--)(l=t[n])&&(f=(a?l(e,r,f):l(f))||f);return a&&f&&eM0(e,r,f),f};let bf=class{constructor(){this._event=nh()}_subscribeToResponse(t,e){this._event.on(`response:${t}`,e)}_subscribeToCallResponse(t){return new Promise((e,r)=>{this._subscribeToResponse(t,a=>{if(a.errcode){r(a.errmessage||a.errcode);return}e(a.data)})})}handleNativeCallback(...t){let e=t[0],r=JSON.parse(t[1]);this._event.emit(`response:${e}`,r)}signWithGoogle(){let t=Or()+"";return jsb.signWithGoogle(t),this._subscribeToCallResponse(t)}signWithApple(){let t=Or()+"";const e=JSON.stringify({endpoint:"https://appleid.apple.com/auth/authorize",client_id:"wallet.counterfire.games",redirect_uri:"https://oauth-svr.cebggame.com/oauth/redirect",response_type:"code id_token",response_mode:"form_post",scopes:"name email"});return jsb.signWithOAuth(t,e),this._subscribeToCallResponse(t)}signWithTikTok(){let t=Or()+"";return jsb.signWithTikTok(t),this._subscribeToCallResponse(t)}signWithFacebook(){let t=Or()+"";return jsb.signWithFacebook(t),this._subscribeToCallResponse(t)}signWithTwitter(){let t=Or()+"";return jsb.signWithTwitter(t),this._subscribeToCallResponse(t)}signWithEmail(){let t=Or()+"";return jsb.signWithEmail(t),this._subscribeToCallResponse(t)}signOutGoogle(){let t=Or()+"";return jsb.signOutGoogle(t),this._subscribeToCallResponse(t)}scanQRCode(t){let e=Or()+"";return jsb.scanQRCode(e,t),this._subscribeToCallResponse(e)}buyProduct(t,e){let r=Or()+"";return jsb.beginBuy(r,t,e),this._subscribeToCallResponse(r)}queryPurchase(){let t=Or()+"";return jsb.queryPurchase(t),this._subscribeToCallResponse(t)}queryProducts(t){let e=Or()+"";return jsb.queryProducts(e,t),this._subscribeToCallResponse(e)}finishTransaction(t){let e=Or()+"";return jsb.finishTransaction(e,t),this._subscribeToCallResponse(e)}authGetStoragePass(t){let e=Or()+"";return jsb.authGetStoragePass(e,t),this._subscribeToCallResponse(e)}passStorageState(t){let e=Or()+"";return jsb.passStorageState(e,t),this._subscribeToCallResponse(e)}storagePass(t,e){let r=Or()+"";return jsb.storagePass(r,t,e),this._subscribeToCallResponse(r)}signWithDiscord(){let t=Or()+"";const e=JSON.stringify({endpoint:"https://discord.com/api/oauth2/authorize",client_id:"1199290913155981345",redirect_uri:"https://oauth-svr.cebggame.com/oauth/redirect",response_type:"code",scopes:"email identify"});return jsb.signWithOAuth(t,e),this._subscribeToCallResponse(t)}clientLogin(){let t=Or()+"";return jsb.getClientId(t),this._subscribeToCallResponse(t)}};bf=rM0([$c],bf);function aM0(t){const e=`${Kr()}/wallet/login/general`;return Nr(e,t)}function iM0(){const t=`${Kr()}/wallet/info`;return fh(t)}function nM0(t){const e=`${Kr()}/wallet/info`;return Nr(e,t)}function fM0(){const t=`${Kr()}/wallet/reset`;return Nr(t,{})}function cM0(){const t=`${Kr()}/wallet/account/reset`;return Nr(t,{})}function oM0(){const t=`${Kr()}/wallet/third/nonce`;return fh(t)}function Rh(t,e=3,r=[],a=0){return new Promise((f,n)=>{t().then(f).catch(l=>{(r.length==0||r.indexOf(l.constructor)!==-1)&&a++{Rh(t,e,r,a).then(f).catch(m=>n(m))},Math.floor(Math.random()*Math.pow(2,a)*400)):n(l)})})}class Xt{constructor(e,r){this.statusCode=e,this.message=r}}function dM0(){const t=`${Kr()}/wallet/info/email`;return fh(t)}function sM0(t){const e=`${Kr()}/email/send_code`;return Nr(e,t)}function uM0(t){const e=`${Kr()}/email/verify_by_code`;return Nr(e,t)}function bM0(t){const e=`${Kr()}/email/check`;return Nr(e,t)}function hM0(t){const e=`${Kr()}/email/regist`;return Nr(e,t)}function lM0(t){const e=`${Kr()}/wallet/login/email`;return Nr(e,t)}var Gc=(t=>(t[t.GOOGLE=0]="GOOGLE",t[t.APPLE=1]="APPLE",t[t.TIKTOK=2]="TIKTOK",t[t.FACEBOOK=3]="FACEBOOK",t[t.TWITTER=4]="TWITTER",t[t.TELEGRAM=5]="TELEGRAM",t[t.EMAIL=6]="EMAIL",t[t.DISCORD=7]="DISCORD",t[t.CLIENT=10]="CLIENT",t[t.RELAY_WALLET=11]="RELAY_WALLET",t[t.WC=12]="WC",t[t.EXTERNAL_WALLET=13]="EXTERNAL_WALLET",t))(Gc||{});const xM0=new Map([[Gc.GOOGLE,"signWithGoogle"],[Gc.APPLE,"signWithApple"],[Gc.FACEBOOK,"signWithFacebook"],[Gc.TIKTOK,"signWithTikTok"],[Gc.TWITTER,"signWithTwitter"],[Gc.CLIENT,"clientLogin"],[Gc.DISCORD,"signWithDiscord"]]);async function Oh(){let t=new oa,e=await Rh(()=>iM0(),dN);if(e.errcode)throw new Xt(e.errcode,e.errmsg);t.address=e.data.address,t.key=e.data.key,t.salt=e.data.salt}async function fy(t){const e=await aM0(t);if(window.debug&&console.log(e),window.debug&&console.log("wallet token: "+e.data?.token),e.errcode||!e.data?.token)throw new Xt(e.errcode,e.errmsg);return new oa().token=e.data.token,vM0(e.data.token,t.channel),e.data.token}function pM0(t){const e=`wallet_token_${t}`;if(window.debug){let r=localStorage.getItem(e);if(r&&!mN(60,r))return new oa().token=r,r}}function vM0(t,e){const r=`wallet_token_${e}`;window.debug&&localStorage.setItem(r,t)}async function JD(t,e){let r=new oa;const a=xM0.get(t);if(!a)throw new Xt(100,"channel not support");if(!pM0(t)){const f=await new bf()[a]();await fy({channel:t,code:f,account:e})}return await Oh(),{token:r.token,address:r.address}}async function mM0(t,e){e=jsb.hashSvrPass(e);let r=await lM0({email:t,password:e});if(r.errcode||!r.data?.token)throw new Xt(r.errcode,r.errmsg);let a=new oa;return a.token=r.data.token,await Oh(),{token:a.token,address:a.address}}async function gM0(t){let e=new oa,r=await XD(t);if(e.address&&e.address!==r)throw new Xt(10,"address not match, perhaps wrong password");return e.address||Rh(()=>nM0({address:r}),Cg0),e.address=r,r}async function XD(t){let e=new oa;await Oh();let{id:r,openid:a}=e.tokenData;return jsb.prepareWallet(r,a,e.key,e.salt,t)}async function yM0(t){let e=await XD(t);return new oa().address===e}function wM0(t){let e=new oa;if(!e.address||!e.key)throw new Xt(10,"wallet not found");let{id:r,openid:a}=e.tokenData,f=jsb.walletSecKey(r,a,e.key,e.salt,t),n=JSON.parse(f);if(n.address!==e.address)throw new Xt(11,"address not match, perhaps wrong password");return n.key}async function _M0(t){console.log("found web login scheme, begin login")}function MM0(t){let e=Qg0(t);if(e)switch(t.replace(e+"://",""),e){case"weblogin":_M0();break}}var EM0=Object.defineProperty,AM0=Object.getOwnPropertyDescriptor,SM0=(t,e,r,a)=>{for(var f=a>1?void 0:a?AM0(e,r):e,n=t.length-1,l;n>=0;n--)(l=t[n])&&(f=(a?l(e,r,f):l(f))||f);return a&&f&&EM0(e,r,f),f};let cy=class{async checkEmailVerified(){let t=await dM0();if(t.errcode)throw new Xt(t.errcode,t.errmsg);const{data:e}=t;if(!e)throw new Error("Invalid response from the server");const{verified:r,email:a}=e;if(!a||typeof r!="number")throw new Error("Invalid values returned from server");return{verified:r,email:a}}async sendEmailCode(t,e){let r=await sM0({email:t,type:e});if(console.log(JSON.stringify(r)),r.errcode)throw new Xt(r.errcode,r.errmsg);return r.data}async updateEmailVerify(t,e){let r=await uM0({email:t,code:e});if(r.errcode)throw new Xt(r.errcode,r.errmsg);return r.data}async isEmailRegister(t){let e=await bM0({email:t});if(e.errcode)throw new Xt(e.errcode,e.errmsg);return e.data}async registByEmail(t,e,r){e=jsb.hashSvrPass(e);let a=await hM0({email:t,password:e,code:r});if(a.errcode)throw new Xt(a.errcode,a.errmsg);return a.data}};cy=SM0([$c],cy);function kM0(t){const e=`${C8()}/pay/alchemy/buy`;return Nr(e,t)}function TM0(t,e,r){const a=`${C8()}/pay/alchemy/crypto_price`;return Nr(a,{token:t,chain:e,env:r})}function BM0(){const t=`${C8()}/pay/alchemy/fait_list`;return fh(t)}function QD(t){const e=`${C8()}/pay/google/verify`;return Nr(e,t)}function e$(t){const e=`${C8()}/pay/apple/verify`;return Nr(e,t)}var PM0=Object.defineProperty,CM0=Object.getOwnPropertyDescriptor,IM0=(t,e,r,a)=>{for(var f=a>1?void 0:a?CM0(e,r):e,n=t.length-1,l;n>=0;n--)(l=t[n])&&(f=(a?l(e,r,f):l(f))||f);return a&&f&&PM0(e,r,f),f};let d6=class{constructor(){this.priceMap=new Map}async alchemyPrePay(t){t.evn=jc.wallet.env,t.version=uN;let e=await kM0(t);if(e.errcode)throw new Error(e.errmsg);if(!e.data)throw new Error("No data returned");const r=e.data.url;if(!r)throw new Error("No url returned");return console.log("pay url::",r),e.data}async getGasPrice(t){const e=`gasprice_${t}`;if(this.priceMap.has(e))setTimeout(async()=>{let r=await new jc.wallet.web3.eth.getGasPrice;this.priceMap.set(e,r+"")},100);else{let r=await new jc.wallet.web3.eth.getGasPrice;this.priceMap.set(e,r+"")}return console.log("gas price",this.priceMap.get(e)),this.priceMap.get(e)}async updateTokenPrice(t,e,r){const a=`crypto_usd_${t}_${e}_${r}`;let f=await TM0(e,t,r);console.log("ETH price data",JSON.stringify(f));let n=f.data.price;this.priceMap.set(a,n+"")}async queryTokenPrice(t,e,r="release"){t=t.toUpperCase(),e=e.toUpperCase();const a=`crypto_usd_${t}_${e}_${r}`;if(this.priceMap.has(a))setTimeout(async()=>{try{await this.updateTokenPrice(t,e,r)}catch(f){console.log("ETH price err",f)}},100);else try{await this.updateTokenPrice(t,e,r)}catch(f){console.log("ETH price err",f)}return console.log("ETH price",this.priceMap.get(a)),this.priceMap.get(a)}async fetchFiatList(){return BM0()}async queryGoogleProducts(t){return await new bf().queryProducts(t.join(","))}async queryGooglePurchases(){let t=await new bf().queryPurchase(),e=JSON.parse(t+"");if(console.log("query purchase result:: "+e),e.length===0)throw new Xt(10,"no records");let r=await QD({list:e});if(r.errcode)throw new Xt(r.errcode,r.errmsg);return r.data}async buyGoogleProduct(t,e){let r=await new bf().buyProduct(t,e),a=JSON.parse(r+"");if(console.log("native buy result:: "+a),a.length===0)throw new Xt(10,"no records");let f=await QD({list:a});if(f.errcode)throw new Xt(f.errcode,f.errmsg);return f.data}async queryIOSProducts(t){return await new bf().queryProducts(t.join(","))}async queryIOSPurchases(){let t=await new bf().queryPurchase(),e=JSON.parse(t+"");if(console.log("query apple purchase result:: "+t),e.length===0)throw new Xt(10,"no records");let r=await e$({list:e});if(r.errcode)throw new Xt(r.errcode,r.errmsg);if(r.data.length>0)for(let a=0;a0)for(let n=0;n{for(var f=a>1?void 0:a?OM0(e,r):e,n=t.length-1,l;n>=0;n--)(l=t[n])&&(f=(a?l(e,r,f):l(f))||f);return a&&f&&RM0(e,r,f),f};let oy=class{async ethRecords(t,e,r){t=t|0,e=e|0;let a={start:t,limit:e,chain:jc.wallet.currentChain.id};return Object.assign(a,r),yN(a)}async tokenRecords({address:t,tokenId:e,start:r,limit:a,moreParam:f}){r=r|0,a=a|0;let n={start:r,limit:a,chain:jc.wallet.currentChain.id,"details.address":t};return e&&(n["details.id"]=e+""),Object.assign(n,f),yN(n)}};oy=NM0([$c],oy);var O1={},L8={},vs=Ft,DM0=t1.ec,dy=new DM0("secp256k1"),s6=dy.curve;L8.privateKeyExport=function(t,e){var r=new vs(t);if(r.ucmp(s6.n)>=0)throw new Error("couldn't export to DER format");var a=dy.g.mul(r);return t$(a.getX(),a.getY(),e)},L8.privateKeyModInverse=function(t){var e=new vs(t);if(e.ucmp(s6.n)>=0||e.isZero())throw new Error("private key range is invalid");return e.invm(s6.n).toArrayLike(Q,"be",32)},L8.signatureImport=function(t){var e=new vs(t.r);e.ucmp(s6.n)>=0&&(e=new vs(0));var r=new vs(t.s);return r.ucmp(s6.n)>=0&&(r=new vs(0)),Q.concat([e.toArrayLike(Q,"be",32),r.toArrayLike(Q,"be",32)])},L8.ecdhUnsafe=function(t,e,r){var a=dy.keyFromPublic(t),f=new vs(e);if(f.ucmp(s6.n)>=0||f.isZero())throw new Error("scalar was invalid (zero or overflow)");var n=a.pub.mul(f);return t$(n.getX(),n.getY(),r)};var t$=function(e,r,a){var f=void 0;return a?(f=Q.alloc(33),f[0]=r.isOdd()?3:2,e.toArrayLike(Q,"be",32).copy(f,1)):(f=Q.alloc(65),f[0]=4,e.toArrayLike(Q,"be",32).copy(f,1),r.toArrayLike(Q,"be",32).copy(f,33)),f},Nh={},$M0=Q.from([48,129,211,2,1,1,4,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,160,129,133,48,129,130,2,1,1,48,44,6,7,42,134,72,206,61,1,1,2,33,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,255,255,252,47,48,6,4,1,0,4,1,7,4,33,2,121,190,102,126,249,220,187,172,85,160,98,149,206,135,11,7,2,155,252,219,45,206,40,217,89,242,129,91,22,248,23,152,2,33,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,186,174,220,230,175,72,160,59,191,210,94,140,208,54,65,65,2,1,1,161,36,3,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),UM0=Q.from([48,130,1,19,2,1,1,4,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,160,129,165,48,129,162,2,1,1,48,44,6,7,42,134,72,206,61,1,1,2,33,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,255,255,252,47,48,6,4,1,0,4,1,7,4,65,4,121,190,102,126,249,220,187,172,85,160,98,149,206,135,11,7,2,155,252,219,45,206,40,217,89,242,129,91,22,248,23,152,72,58,218,119,38,163,196,101,93,164,251,252,14,17,8,168,253,23,180,72,166,133,84,25,156,71,208,143,251,16,212,184,2,33,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,186,174,220,230,175,72,160,59,191,210,94,140,208,54,65,65,2,1,1,161,68,3,66,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]);Nh.privateKeyExport=function(t,e,r){var a=Q.from(r?$M0:UM0);return t.copy(a,r?8:9),e.copy(a,r?181:214),a},Nh.privateKeyImport=function(t){var e=t.length,r=0;if(e2||e1?t[r+a-2]<<8:0);return r+=a,e32||ea)||t[f++]!==2)return null;var l=t[f++];if(l&128){if(n=l-128,f+n>a)return null;for(;n>0&&t[f]===0;f+=1,n-=1);for(l=0;n>0;f+=1,n-=1)l=(l<<8)+t[f]}if(l>a-f)return null;var m=f;if(f+=l,t[f++]!==2)return null;var y=t[f++];if(y&128){if(n=y-128,f+n>a)return null;for(;n>0&&t[f]===0;f+=1,n-=1);for(y=0;n>0;f+=1,n-=1)y=(y<<8)+t[f]}if(y>a-f)return null;var _=f;for(f+=y;l>0&&t[m]===0;l-=1,m+=1);if(l>32)return null;var E=t.slice(m,m+l);for(E.copy(e,32-E.length);y>0&&t[_]===0;y-=1,_+=1);if(y>32)return null;var A=t.slice(_,_+y);return A.copy(r,32-A.length),{r:e,s:r}};var Na=Pi,Dh=L8,sy=Nh,r$=function(e){return e.length!==32?!1:Na.privateKeyVerify(Uint8Array.from(e))},LM0=function(e,r){if(e.length!==32)throw new RangeError("private key length is invalid");var a=Dh.privateKeyExport(e,r);return sy.privateKeyExport(e,a,r)},FM0=function(e){if(e=sy.privateKeyImport(e),e!==null&&e.length===32&&r$(e))return e;throw new Error("couldn't import from DER format")},jM0=function(e){return Q.from(Na.privateKeyNegate(Uint8Array.from(e)))},zM0=function(e){if(e.length!==32)throw new Error("private key length is invalid");return Q.from(Dh.privateKeyModInverse(Uint8Array.from(e)))},qM0=function(e,r){return Q.from(Na.privateKeyTweakAdd(Uint8Array.from(e),r))},HM0=function(e,r){return Q.from(Na.privateKeyTweakMul(Uint8Array.from(e),Uint8Array.from(r)))},KM0=function(e,r){return Q.from(Na.publicKeyCreate(Uint8Array.from(e),r))},VM0=function(e,r){return Q.from(Na.publicKeyConvert(Uint8Array.from(e),r))},WM0=function(e){return e.length!==33&&e.length!==65?!1:Na.publicKeyVerify(Uint8Array.from(e))},GM0=function(e,r,a){return Q.from(Na.publicKeyTweakAdd(Uint8Array.from(e),Uint8Array.from(r),a))},ZM0=function(e,r,a){return Q.from(Na.publicKeyTweakMul(Uint8Array.from(e),Uint8Array.from(r),a))},YM0=function(e,r){var a=[];return e.forEach(function(f){a.push(Uint8Array.from(f))}),Q.from(Na.publicKeyCombine(a,r))},JM0=function(e){return Q.from(Na.signatureNormalize(Uint8Array.from(e)))},XM0=function(e){return Q.from(Na.signatureExport(Uint8Array.from(e)))},QM0=function(e){return Q.from(Na.signatureImport(Uint8Array.from(e)))},eE0=function(e){if(e.length===0)throw new RangeError("signature length is invalid");var r=sy.signatureImportLax(e);if(r===null)throw new Error("couldn't parse DER signature");return Dh.signatureImport(r)},tE0=function(e,r,a){if(a===null)throw new TypeError("options should be an Object");var f=void 0;if(a){if(f={},a.data===null)throw new TypeError("options.data should be a Buffer");if(a.data){if(a.data.length!==32)throw new RangeError("options.data length is invalid");f.data=new Uint8Array(a.data)}if(a.noncefn===null)throw new TypeError("options.noncefn should be a Function");a.noncefn&&(f.noncefn=function(l,m,y,_,E){var A=y!=null?Q.from(y):null,k=_!=null?Q.from(_):null,P=Q.from("");return a.noncefn&&(P=a.noncefn(Q.from(l),Q.from(m),A,k,E)),Uint8Array.from(P)})}var n=Na.ecdsaSign(Uint8Array.from(e),Uint8Array.from(r),f);return{signature:Q.from(n.signature),recovery:n.recid}},rE0=function(e,r,a){return Na.ecdsaVerify(Uint8Array.from(r),Uint8Array.from(e),a)},aE0=function(e,r,a,f){return Q.from(Na.ecdsaRecover(Uint8Array.from(r),a,Uint8Array.from(e),f))},iE0=function(e,r){return Q.from(Na.ecdh(Uint8Array.from(e),Uint8Array.from(r),{}))},nE0=function(e,r,a){if(e.length!==33&&e.length!==65)throw new RangeError("public key length is invalid");if(r.length!==32)throw new RangeError("private key length is invalid");return Q.from(Dh.ecdhUnsafe(Uint8Array.from(e),Uint8Array.from(r),a))},fE0={privateKeyVerify:r$,privateKeyExport:LM0,privateKeyImport:FM0,privateKeyNegate:jM0,privateKeyModInverse:zM0,privateKeyTweakAdd:qM0,privateKeyTweakMul:HM0,publicKeyCreate:KM0,publicKeyConvert:VM0,publicKeyVerify:WM0,publicKeyTweakAdd:GM0,publicKeyTweakMul:ZM0,publicKeyCombine:YM0,signatureNormalize:JM0,signatureExport:XM0,signatureImport:QM0,signatureImportLax:eE0,sign:tE0,verify:rE0,recover:aE0,ecdh:iE0,ecdhUnsafe:nE0};(function(t){var e=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(B){return typeof B}:function(B){return B&&typeof Symbol=="function"&&B.constructor===Symbol&&B!==Symbol.prototype?"symbol":typeof B},r=an,a=r.keccak224,f=r.keccak384,n=r.keccak256,l=r.keccak512,m=fE0,y=Lr,_=na,E=Ft,A=bi,k=ct.Buffer;Object.assign(t,Un),t.MAX_INTEGER=new E("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",16),t.TWO_POW256=new E("10000000000000000000000000000000000000000000000000000000000000000",16),t.KECCAK256_NULL_S="c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",t.SHA3_NULL_S=t.KECCAK256_NULL_S,t.KECCAK256_NULL=k.from(t.KECCAK256_NULL_S,"hex"),t.SHA3_NULL=t.KECCAK256_NULL,t.KECCAK256_RLP_ARRAY_S="1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",t.SHA3_RLP_ARRAY_S=t.KECCAK256_RLP_ARRAY_S,t.KECCAK256_RLP_ARRAY=k.from(t.KECCAK256_RLP_ARRAY_S,"hex"),t.SHA3_RLP_ARRAY=t.KECCAK256_RLP_ARRAY,t.KECCAK256_RLP_S="56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",t.SHA3_RLP_S=t.KECCAK256_RLP_S,t.KECCAK256_RLP=k.from(t.KECCAK256_RLP_S,"hex"),t.SHA3_RLP=t.KECCAK256_RLP,t.BN=E,t.rlp=_,t.secp256k1=m,t.zeros=function(B){return k.allocUnsafe(B).fill(0)},t.zeroAddress=function(){var B=20,I=t.zeros(B);return t.bufferToHex(I)},t.setLengthLeft=t.setLength=function(B,I,O){var H=t.zeros(I);return B=t.toBuffer(B),O?B.length0&&I.toString()==="0";)B=B.slice(1),I=B[0];return B},t.toBuffer=function(B){if(!k.isBuffer(B))if(Array.isArray(B))B=k.from(B);else if(typeof B=="string")t.isHexString(B)?B=k.from(t.padToEven(t.stripHexPrefix(B)),"hex"):B=k.from(B);else if(typeof B=="number")B=t.intToBuffer(B);else if(B==null)B=k.allocUnsafe(0);else if(E.isBN(B))B=B.toArrayLike(k);else if(B.toArray)B=k.from(B.toArray());else throw new Error("invalid type");return B},t.bufferToInt=function(B){return new E(t.toBuffer(B)).toNumber()},t.bufferToHex=function(B){return B=t.toBuffer(B),"0x"+B.toString("hex")},t.fromSigned=function(B){return new E(B).fromTwos(256)},t.toUnsigned=function(B){return k.from(B.toTwos(256).toArray())},t.keccak=function(B,I){switch(B=t.toBuffer(B),I||(I=256),I){case 224:return a(B);case 256:return n(B);case 384:return f(B);case 512:return l(B);default:throw new Error("Invald algorithm: keccak"+I)}},t.keccak256=function(B){return t.keccak(B)},t.sha3=t.keccak,t.sha256=function(B){return B=t.toBuffer(B),A("sha256").update(B).digest()},t.ripemd160=function(B,I){B=t.toBuffer(B);var O=A("rmd160").update(B).digest();return I===!0?t.setLength(O,32):O},t.rlphash=function(B){return t.keccak(_.encode(B))},t.isValidPrivate=function(B){return m.privateKeyVerify(B)},t.isValidPublic=function(B,I){return B.length===64?m.publicKeyVerify(k.concat([k.from([4]),B])):I?m.publicKeyVerify(B):!1},t.pubToAddress=t.publicToAddress=function(B,I){return B=t.toBuffer(B),I&&B.length!==64&&(B=m.publicKeyConvert(B,!1).slice(1)),y(B.length===64),t.keccak(B).slice(-20)};var P=t.privateToPublic=function(B){return B=t.toBuffer(B),m.publicKeyCreate(B,!1).slice(1)};t.importPublic=function(B){return B=t.toBuffer(B),B.length!==64&&(B=m.publicKeyConvert(B,!1).slice(1)),B},t.ecsign=function(B,I){var O=m.sign(B,I),H={};return H.r=O.signature.slice(0,32),H.s=O.signature.slice(32,64),H.v=O.recovery+27,H},t.hashPersonalMessage=function(B){var I=t.toBuffer(`Ethereum Signed Message: `+B.length.toString());return t.keccak(k.concat([I,B]))},t.ecrecover=function(B,I,O,H){var N=k.concat([t.setLength(O,32),t.setLength(H,32)],64),$=I-27;if($!==0&&$!==1)throw new Error("Invalid signature v value");var R=m.recover(B,N,$);return m.publicKeyConvert(R,!1).slice(1)},t.toRpcSig=function(B,I,O){if(B!==27&&B!==28)throw new Error("Invalid recovery id");return t.bufferToHex(k.concat([t.setLengthLeft(I,32),t.setLengthLeft(O,32),t.toBuffer(B-27)]))},t.fromRpcSig=function(B){if(B=t.toBuffer(B),B.length!==65)throw new Error("Invalid signature length");var I=B[64];return I<27&&(I+=27),{v:I,r:B.slice(0,32),s:B.slice(32,64)}},t.privateToAddress=function(B){return t.publicToAddress(P(B))},t.isValidAddress=function(B){return/^0x[0-9a-fA-F]{40}$/.test(B)},t.isZeroAddress=function(B){var I=t.zeroAddress();return I===t.addHexPrefix(B)},t.toChecksumAddress=function(B){B=t.stripHexPrefix(B).toLowerCase();for(var I=t.keccak(B).toString("hex"),O="0x",H=0;H=8?O+=B[H].toUpperCase():O+=B[H];return O},t.isValidChecksumAddress=function(B){return t.isValidAddress(B)&&t.toChecksumAddress(B)===B},t.generateAddress=function(B,I){return B=t.toBuffer(B),I=new E(I),I.isZero()?I=null:I=k.from(I.toArray()),t.rlphash([B,I]).slice(-20)},t.isPrecompiled=function(B){var I=t.unpad(B);return I.length===1&&I[0]>=1&&I[0]<=8},t.addHexPrefix=function(B){return typeof B!="string"||t.isHexPrefixed(B)?B:"0x"+B},t.isValidSignature=function(B,I,O,H){var N=new E("7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0",16),$=new E("fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",16);return!(I.length!==32||O.length!==32||B!==27&&B!==28||(I=new E(I),O=new E(O),I.isZero()||I.gt($)||O.isZero()||O.gt($))||H===!1&&new E(O).cmp(N)===1)},t.baToJSON=function(B){if(k.isBuffer(B))return"0x"+B.toString("hex");if(B instanceof Array){for(var I=[],O=0;O=U.length,"The field "+N.name+" must not have more "+N.length+" bytes")):!(N.allowZero&&U.length===0)&&N.length&&y(N.length===U.length,"The field "+N.name+" must have byte length of "+N.length),B.raw[$]=U}Object.defineProperty(B,N.name,{enumerable:!0,configurable:!0,get:R,set:q}),N.default&&(B[N.name]=N.default),N.alias&&Object.defineProperty(B,N.alias,{enumerable:!1,configurable:!0,set:q,get:R})}),O)if(typeof O=="string"&&(O=k.from(t.stripHexPrefix(O),"hex")),k.isBuffer(O)&&(O=_.decode(O)),Array.isArray(O)){if(O.length>B._fields.length)throw new Error("wrong number of fields in data");O.forEach(function(N,$){B[B._fields[$]]=t.toBuffer(N)})}else if((typeof O>"u"?"undefined":e(O))==="object"){var H=Object.keys(O);I.forEach(function(N){H.indexOf(N.name)!==-1&&(B[N.name]=O[N.name]),H.indexOf(N.alias)!==-1&&(B[N.alias]=O[N.alias])})}else throw new Error("invalid data")}})(O1);var $t=(t=>(t[t.INTERNAL=0]="INTERNAL",t[t.THIRD_PARTY=1]="THIRD_PARTY",t[t.INJECTED=2]="INJECTED",t[t.RELAY=3]="RELAY",t))($t||{});class cE0{constructor(e){this.web3=e}async checkEthEnough(e,r){r=r||jc.wallet.currentAccAddr;let a=await this.web3.eth.getGasPrice();console.log("gasPrice: "+new O1.BN(a));let f=await this.web3.eth.getBalance(r);return console.log("eth balance: "+new O1.BN(f)),new O1.BN(f).gte(new O1.BN(a).mul(new O1.BN(e)))}async getBalance(e){return e=e||jc.wallet.currentAccAddr,await this.web3.eth.getBalance(e)}async sendEth(e,r,a){if(jc.wallet.walletType===$t.RELAY)return jc.wallet.relaySvr.beginReq("chainCommon","sendEth",...arguments);let f=jc.wallet.currentAccAddr;const n=this.web3.utils.toWei(r+"","ether");let l=await this.web3.eth.estimateGas({from:f,to:e,value:"0"});if(a)return jc.wallet.generateGasShow(l);let m=await jc.wallet.fetchGasPrice();const y={from:f,to:e,gas:l,gasPrice:m,value:n};return Ia({gas:l,title:"transfer",details:[{address:"eth",from:f,to:e,value:n,id:"0"}]},this.web3.eth.sendTransaction(y))}}const $h=[{inputs:[{internalType:"string",name:"uri_",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"account",type:"address"},{indexed:!0,internalType:"address",name:"operator",type:"address"},{indexed:!1,internalType:"bool",name:"approved",type:"bool"}],name:"ApprovalForAll",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"operator",type:"address"},{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256[]",name:"ids",type:"uint256[]"},{indexed:!1,internalType:"uint256[]",name:"values",type:"uint256[]"}],name:"TransferBatch",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"operator",type:"address"},{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"id",type:"uint256"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"TransferSingle",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"string",name:"value",type:"string"},{indexed:!0,internalType:"uint256",name:"id",type:"uint256"}],name:"URI",type:"event"},{inputs:[{internalType:"address",name:"account",type:"address"},{internalType:"uint256",name:"id",type:"uint256"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address[]",name:"accounts",type:"address[]"},{internalType:"uint256[]",name:"ids",type:"uint256[]"}],name:"balanceOfBatch",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"},{internalType:"address",name:"operator",type:"address"}],name:"isApprovedForAll",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256[]",name:"ids",type:"uint256[]"},{internalType:"uint256[]",name:"amounts",type:"uint256[]"},{internalType:"bytes",name:"data",type:"bytes"}],name:"safeBatchTransferFrom",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"id",type:"uint256"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes",name:"data",type:"bytes"}],name:"safeTransferFrom",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"operator",type:"address"},{internalType:"bool",name:"approved",type:"bool"}],name:"setApprovalForAll",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"interfaceId",type:"bytes4"}],name:"supportsInterface",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"uri",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"}],oE0=new Error("timeout");async function dE0(t,e){const r=await fetch(t,e);if(!r.ok)throw new Error(`Fetch failed with status '${r.status}' for request '${t}'`);return r}async function a$(t,e,r=500){return Promise.race([dE0(t,e),new Promise((a,f)=>setTimeout(()=>{f(oE0)},r))])}const sE0=new O1.BN(0);function uy(t,e,r=5){const a=Uh(t||0,e),f=parseFloat(a);let n;if(f<1e-5&&f>0)n="< 0.00001";else{const l=Math.pow(10,r);n=(Math.round(f*l)/l).toString()}return n}function Uh(t,e){t=by(Number(t).toString(16));let r=F8(t);const a=r.lt(new O1.BN(0)),f=ya.utils.toBN(Math.pow(10,e).toString());a&&(r=r.mul(new O1.BN(-1)));let n=r.mod(f).toString(10);for(;n.length0)r="< 0.00001";else{const n=Math.pow(10,e);r=(Math.round(f*n)/n).toString()}}return r}function bE0(t,e){return t?(t*Math.pow(10,e)).toString(16):0}function hE0(t){return Number.isFinite(parseFloat(t))&&!Number.isNaN(parseFloat(t))&&!isNaN(+t)}function Tr(t){return ya.utils.toBN(t)}function by(t){return typeof t!="string"||t.match(/^-?0x/u)?t:t.match(/^-?0X/u)?t.replace("0X","0x"):t.startsWith("-")?t.replace("-","-0x"):`0x${t}`}function F8(t){const e=i$(t.toString())||"0";return f$(e)}function i$(t,e="."){t+="";const[r,a]=[t.indexOf(e),0];return t.substring(r,a)||t}function hy(t){return typeof t!="string"?t:t.slice(0,2)==="0x"?t.slice(2):t}function n$(t,e){let r=ya.utils.toBN(ya.utils.toWei(t+""));return e>18?r=r.mul(ya.utils.toBN(10).pow(ya.utils.toBN(e-18))):e<18&&(r=r.div(ya.utils.toBN(10).pow(ya.utils.toBN(18-e)))),r}function f$(t){if(typeof t=="string"||typeof t=="number"){var e=ya.utils.toBN(1),r=String(t).toLowerCase().trim(),a=r.substr(0,2)==="0x"||r.substr(0,3)==="-0x",f=hy(r);if(f.substr(0,1)==="-"&&(f=hy(f.slice(1)),e=ya.utils.toBN(-1)),f=f===""?"0":f,!f.match(/^-?[0-9]+$/)&&f.match(/^[0-9A-Fa-f]+$/)||f.match(/^[a-fA-F]+$/)||a===!0&&f.match(/^[0-9A-Fa-f]+$/)||(f.match(/^-?[0-9]+$/)||f==="")&&a===!1)return ya.utils.toBN(f).mul(e)}else if(typeof t=="object"&&t.toString&&!t.pop&&!t.push&&t.toString(10).match(/^-?[0-9]+$/)&&(t.mul||t.dividedToIntegerBy))return ya.utils.toBN(t.toString(10));throw new Error("[number-to-bn] while converting number "+JSON.stringify(t)+" to BN.js instance, error: invalid number value. Value must be an integer, hex string, BN or BigNumber instance. Note, decimals are not supported.")}function ly(t){if(t.startsWith("ipfs://ipfs/"))return t.replace("ipfs://ipfs/","");if(t.startsWith("ipfs://"))return t.replace("ipfs://","");throw new Error("this method should not be used with non ipfs urls")}function c$(t){const e=ly(t),r=e.indexOf("/"),a=r!==-1?e.substring(0,r):e,f=r!==-1?e.substring(r):void 0;return{cid:a,path:f}}function o$(t){return t.match(/(^http:\/\/)|(^https:\/\/)/u)?t:`https://${t}`}function j8(t,e,r){const{host:a,protocol:f,origin:n}=new URL(o$(t));if(r){const{cid:m,path:y}=c$(e);return`${f}//${m}.ipfs.${a}${y||""}`}const l=ly(e);return`${n}/ipfs/${l}`}function lE0(t){return t?t!=="0x"&&t!=="0x0":!1}function xE0(t){return t.length>=10?t.substring(0,6)+"..."+t.substring(t.length-4):t.length>0&&t.length<10?t:""}function pE0(t,e){return t==="-"?`- ${e}`:`${uy(t,18,4)} ${e}`}const vE0="ERC1155",mE0="0xd9b67a26",gE0="0x0e89341c",yE0="0x4e2312e0";class wE0{constructor(e){this.contractSupportsURIMetadataInterface=async r=>this.contractSupportsInterface(r,gE0),this.contractSupportsTokenReceiverInterface=async r=>this.contractSupportsInterface(r,yE0),this.contractSupportsBase1155Interface=async r=>this.contractSupportsInterface(r,mE0),this.getTokenURI=async(r,a)=>{const f=new this.web3.eth.Contract($h,r);return new Promise((n,l)=>{f.methods.tokenURI(a).call((m,y)=>{if(m){l(m);return}n(y)})})},this.getBalanceOf=async(r,a,f)=>{const n=new this.web3.eth.Contract($h,r);return new Promise((l,m)=>{n.methods.balanceOf(a,f,(y,_)=>{if(y){m(y);return}l(_)})})},this.contractSupportsInterface=async(r,a)=>{const f=new this.web3.eth.Contract($h,r);return new Promise((n,l)=>{f.methods.supportsInterface(a,(m,y)=>{if(m){l(m);return}n(y)})})},this.getDetails=async(r,a,f)=>{if(!await this.contractSupportsBase1155Interface(r))throw new Error("This isn't a valid ERC1155 contract");let n,l;if(f){n=await this.getTokenURI(r,f),n.startsWith("ipfs://")&&(n=j8(a,n,!0));try{l=(await(await a$(n)).json())?.image,l?.startsWith("ipfs://")&&(l=j8(a,l,!0))}catch{}}return{standard:vE0,tokenURI:n,image:l}},this.web3=e}async transferBatch({address:e,from:r,to:a,tokenIds:f,amounts:n,gas:l,estimate:m}){if(jc.wallet.walletType===$t.RELAY)return jc.wallet.relaySvr.beginReq("erc1155Standard","transferBatch",...arguments);r=r||jc.wallet.currentAccAddr;const y=new this.web3.eth.Contract($h,e);if(l||(l=await y.methods.safeBatchTransferFrom(r,a,f,n,[]).estimateGas()),l=l*Sr|1,m)return jc.wallet.generateGasShow(l);const _=[];for(let k=0,P=f.length;k{a.methods.balanceOf(r).call({from:r},(l,m)=>{if(l){n(l);return}console.log("getBalanceOf success "+m),f(m)})})}async getTokenDecimals(e){const r=new this.web3.eth.Contract(N1,e);return new Promise((a,f)=>{r.methods.decimals().call((n,l)=>{if(n){f(n);return}a(l.toString())})})}async getTokenSymbol(e){const r=new this.web3.eth.Contract(N1,e);return new Promise((a,f)=>{r.methods.symbol().call((n,l)=>{if(n){f(n);return}a(l.toString())})})}async getDetails(e,r){const[a,f]=await Promise.all([this.getTokenDecimals(e),this.getTokenSymbol(e)]);let n;return r&&(n=await this.getBalanceOf(e,r)),{decimals:a,symbol:f,balance:n,standard:"ERC20"}}async transfer({address:e,from:r,to:a,amount:f,decimal:n,gas:l,estimate:m}){if(jc.wallet.walletType===$t.RELAY)return jc.wallet.relaySvr.beginReq("erc20Standard","transfer",...arguments);r=r||jc.wallet.currentAccAddr;const y=new this.web3.eth.Contract(N1,e);n||(n=await this.getTokenDecimals(e));let _=n$(f,+n);if(!l){let k=m?"0":_;l=await y.methods.transfer(a,k).estimateGas({from:r}),await this.getBalanceOf(e,a)=="0"&&(l+=12e3)}if(l=l*Sr|1,m)return jc.wallet.generateGasShow(l);const E={gas:l,title:"transfer",details:[{address:e,from:r,to:a,value:_,id:"0"}]};let A=await jc.wallet.fetchGasPrice();return Ia(E,y.methods.transfer(a,_).send({from:r,gas:l,gasPrice:A}))}}const Zc=[{constant:!0,inputs:[{name:"interfaceID",type:"bytes4"}],name:"supportsInterface",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"name",outputs:[{name:"_name",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[{name:"_tokenId",type:"uint256"}],name:"getApproved",outputs:[{name:"",type:"address"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_approved",type:"address"},{name:"_tokenId",type:"uint256"}],name:"approve",outputs:[],payable:!0,stateMutability:"payable",type:"function"},{constant:!0,inputs:[],name:"totalSupply",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_from",type:"address"},{name:"_to",type:"address"},{name:"_tokenId",type:"uint256"}],name:"transferFrom",outputs:[],payable:!0,stateMutability:"payable",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"},{name:"_index",type:"uint256"}],name:"tokenOfOwnerByIndex",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_from",type:"address"},{name:"_to",type:"address"},{name:"_tokenId",type:"uint256"}],name:"safeTransferFrom",outputs:[],payable:!0,stateMutability:"payable",type:"function"},{constant:!0,inputs:[{name:"_index",type:"uint256"}],name:"tokenByIndex",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[{name:"_tokenId",type:"uint256"}],name:"ownerOf",outputs:[{name:"",type:"address"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"}],name:"balanceOf",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"symbol",outputs:[{name:"_symbol",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_operator",type:"address"},{name:"_approved",type:"bool"}],name:"setApprovalForAll",outputs:[],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!1,inputs:[{name:"_from",type:"address"},{name:"_to",type:"address"},{name:"_tokenId",type:"uint256"},{name:"data",type:"bytes"}],name:"safeTransferFrom",outputs:[],payable:!0,stateMutability:"payable",type:"function"},{constant:!0,inputs:[{name:"_tokenId",type:"uint256"}],name:"tokenURI",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"},{name:"_operator",type:"address"}],name:"isApprovedForAll",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"view",type:"function"},{anonymous:!1,inputs:[{indexed:!0,name:"_from",type:"address"},{indexed:!0,name:"_to",type:"address"},{indexed:!0,name:"_tokenId",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"_owner",type:"address"},{indexed:!0,name:"_approved",type:"address"},{indexed:!0,name:"_tokenId",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"_owner",type:"address"},{indexed:!0,name:"_operator",type:"address"},{indexed:!1,name:"_approved",type:"bool"}],name:"ApprovalForAll",type:"event"}],ME0="ERC721",EE0="0x80ac58cd",AE0="0x5b5e139f",SE0="0x780e9d63";class kE0{constructor(e){this.contractSupportsMetadataInterface=async r=>this.contractSupportsInterface(r,AE0),this.contractSupportsEnumerableInterface=async r=>this.contractSupportsInterface(r,SE0),this.contractSupportsBase721Interface=async r=>this.contractSupportsInterface(r,EE0),this.getCollectibleTokenId=async(r,a,f)=>{const n=new this.web3.eth.Contract(Zc,r);return new Promise((l,m)=>{n.methods.tokenOfOwnerByIndex(a,f).call((y,_)=>{if(y){m(y);return}l(_)})})},this.getBalance=async(r,a,f)=>{let n=this.web3;f&&parseInt(f)!==jc.wallet.currentChain.id&&(n=jc.wallet.generateWeb3(parseInt(f),!1));const l=new n.eth.Contract(Zc,r);return new Promise((m,y)=>{l.methods.balanceOf(a).call((_,E)=>{if(_){y(_);return}m(E)})})},this.getTokenURI=async(r,a)=>{const f=new this.web3.eth.Contract(Zc,r);if(!await this.contractSupportsMetadataInterface(r))throw new Error("Contract does not support ERC721 metadata interface.");return new Promise((n,l)=>{f.methods.tokenURI(a).call((m,y)=>{if(m){l(m);return}n(y)})})},this.getAssetName=async r=>{const a=new this.web3.eth.Contract(Zc,r);return new Promise((f,n)=>{a.methods.name().call((l,m)=>{if(l){n(l);return}f(m)})})},this.getAssetSymbol=async r=>{const a=new this.web3.eth.Contract(Zc,r);return new Promise((f,n)=>{a.methods.symbol().call((l,m)=>{if(l){n(l);return}f(m)})})},this.contractSupportsInterface=async(r,a)=>{const f=new this.web3.eth.Contract(Zc,r);return new Promise((n,l)=>{f.methods.supportsInterface(a).call((m,y)=>{if(m){l(m);return}n(y)})})},this.getDetails=async(r,a,f)=>{if(!await this.contractSupportsBase721Interface(r))throw new Error("This isn't a valid ERC721 contract");let n,l,m,y;try{m=await this.getAssetSymbol(r)}catch{}try{y=await this.getAssetName(r)}catch{}if(f)try{n=await this.getTokenURI(r,f),n.startsWith("ipfs://")&&(n=j8(a,n,!0));const _=await(await a$(n)).json();l=_?_.image:"",l.startsWith("ipfs://")&&(l=j8(a,l,!0))}catch{}return{standard:ME0,tokenURI:n,symbol:m,name:y,image:l}},this.web3=e}async getOwnerOf(e,r){const a=new this.web3.eth.Contract(Zc,e);return new Promise((f,n)=>{a.methods.ownerOf(r).call((l,m)=>{if(l){n(l);return}f(m)})})}async transfer({address:e,from:r,to:a,tokenId:f,gas:n,estimate:l}){if(jc.wallet.walletType===$t.RELAY)return jc.wallet.relaySvr.beginReq("erc721Standard","transfer",...arguments);r=r||jc.wallet.currentAccAddr;const m=new this.web3.eth.Contract(Zc,e);if(n||(n=await m.methods.safeTransferFrom(r,a,f).estimateGas({from:r})),n=n*Sr|1,l)return jc.wallet.generateGasShow(n);const y={gas:n,title:"transfer",details:[{address:e,from:r,to:a,id:f}]};let _=await jc.wallet.fetchGasPrice();return Ia(y,m.methods.safeTransferFrom(r,a,f).send({from:r,gas:n,gasPrice:_}))}}let d$=[{inputs:[],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"nftAddress",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!0,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"uint256",name:"startTime",type:"uint256"},{indexed:!1,internalType:"uint256[]",name:"ids",type:"uint256[]"}],name:"TokenMinted",type:"event"},{inputs:[{internalType:"address",name:"signer",type:"address"},{internalType:"bytes32",name:"hash",type:"bytes32"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"checkSigner",outputs:[],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"signer",type:"address"},{internalType:"bytes32",name:"structHash",type:"bytes32"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"checkSigner712",outputs:[],stateMutability:"view",type:"function"},{inputs:[],name:"executor",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getDuration",outputs:[{internalType:"uint256",name:"duration",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"tokenSupported",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"valNew",type:"uint256"}],name:"updateDuation",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"nftAddress",type:"address"},{internalType:"uint256[]",name:"tokenIds",type:"uint256[]"},{internalType:"uint256",name:"startTime",type:"uint256"},{internalType:"uint256",name:"saltNonce",type:"uint256"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"mintNft",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"nftToken",type:"address"}],name:"addTokenSupport",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"nftToken",type:"address"}],name:"removeTokenSupport",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"updateExecutor",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_to",type:"address"},{internalType:"address",name:"_nftAddress",type:"address"},{internalType:"uint256",name:"_startTime",type:"uint256"},{internalType:"uint256",name:"_saltNonce",type:"uint256"},{internalType:"uint256[]",name:"_ids",type:"uint256[]"}],name:"getMessageHash",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"pure",type:"function"}],z8=[{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"erc20",type:"address"}],name:"AddERC20Suppout",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"nftToken",type:"address"}],name:"AddNFTSuppout",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"tokenId",type:"uint256"},{indexed:!1,internalType:"uint256",name:"orderId",type:"uint256"},{indexed:!1,internalType:"address",name:"nftToken",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"address",name:"seller",type:"address"},{indexed:!1,internalType:"address",name:"buyer",type:"address"},{indexed:!1,internalType:"address",name:"erc20",type:"address"},{indexed:!1,internalType:"uint256",name:"price",type:"uint256"}],name:"BuyOrder",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"orderId",type:"uint256"},{indexed:!0,internalType:"address",name:"nftToken",type:"address"},{indexed:!0,internalType:"uint256",name:"tokenId",type:"uint256"}],name:"CancelOrder",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"orderId",type:"uint256"},{indexed:!0,internalType:"address",name:"nftToken",type:"address"},{indexed:!0,internalType:"uint256",name:"tokenId",type:"uint256"},{indexed:!1,internalType:"uint256",name:"priceOld",type:"uint256"},{indexed:!1,internalType:"uint256",name:"price",type:"uint256"}],name:"PriceUpdate",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"erc20",type:"address"}],name:"RemoveERC20Suppout",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"nftToken",type:"address"}],name:"RemoveNFTSuppout",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"tokenId",type:"uint256"},{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"nftToken",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"orderId",type:"uint256"},{indexed:!1,internalType:"address",name:"currency",type:"address"},{indexed:!1,internalType:"uint256",name:"price",type:"uint256"}],name:"SellOrder",type:"event"},{inputs:[],name:"MAX_TRANSACTION_FEE",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"MAX_TRANSACTION_TAX",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"MIN_TRANSACTION_FEE",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"MIN_TRANSACTION_TAX",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"erc1155Supported",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"erc1155SupportedHistory",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"erc20Supported",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"erc721Supported",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"erc721SupportedHistory",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"feeToAddress",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"incrId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"nftPriceMaxLimit",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"nftPriceMinLimit",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"",type:"uint256[]"},{internalType:"uint256[]",name:"",type:"uint256[]"},{internalType:"bytes",name:"",type:"bytes"}],name:"onERC1155BatchReceived",outputs:[{internalType:"bytes4",name:"",type:"bytes4"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"",type:"bytes"}],name:"onERC1155Received",outputs:[{internalType:"bytes4",name:"",type:"bytes4"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"",type:"bytes"}],name:"onERC721Received",outputs:[{internalType:"bytes4",name:"",type:"bytes4"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"orderInfos",outputs:[{internalType:"uint256",name:"orderId",type:"uint256"},{internalType:"uint256",name:"tokenId",type:"uint256"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"address",name:"owner",type:"address"},{internalType:"uint256",name:"price",type:"uint256"},{internalType:"address",name:"nftToken",type:"address"},{internalType:"address",name:"currency",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"interfaceId",type:"bytes4"}],name:"supportsInterface",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"taxToAddress",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"tranFeeTotal",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"tranTaxTotal",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"transactionFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"transactionTax",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"nftToken",type:"address"},{internalType:"address",name:"currency",type:"address"},{internalType:"uint256",name:"tokenId",type:"uint256"},{internalType:"uint256",name:"price",type:"uint256"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"sell",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"orderId",type:"uint256"},{internalType:"uint256",name:"price",type:"uint256"}],name:"buy",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"orderId",type:"uint256"}],name:"cancelOrder",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"orderId",type:"uint256"},{internalType:"uint256",name:"price",type:"uint256"}],name:"updatePrice",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"nftToken",type:"address"}],name:"addERC721Support",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"nftToken",type:"address"}],name:"removeERC721Support",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"nftToken",type:"address"}],name:"addERC1155Support",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"nftToken",type:"address"}],name:"removeERC1155Support",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"erc20",type:"address"}],name:"addERC20Support",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"erc20",type:"address"}],name:"removeERC20Support",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"nftToken",type:"address"},{internalType:"uint256",name:"maxLimit",type:"uint256"}],name:"setNFTPriceMaxLimit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"nftToken",type:"address"},{internalType:"uint256",name:"minLimit",type:"uint256"}],name:"setNFTPriceMinLimit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_transactionFee",type:"uint256"}],name:"setTransactionFee",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_feeToAddress",type:"address"}],name:"setFeeToAddress",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_transactionTax",type:"uint256"}],name:"setTransactionTax",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_taxToAddress",type:"address"}],name:"setTaxToAddress",outputs:[],stateMutability:"nonpayable",type:"function"}],TE0=[{inputs:[],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"erc20",type:"address"}],name:"AddERC20Suppout",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"nftToken",type:"address"}],name:"AddNFTSuppout",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"buyer",type:"address"},{indexed:!0,internalType:"uint256",name:"orderId",type:"uint256"},{indexed:!1,internalType:"address",name:"currency",type:"address"},{indexed:!1,internalType:"uint256",name:"price",type:"uint256"},{indexed:!1,internalType:"address[]",name:"nftAddresses",type:"address[]"},{indexed:!1,internalType:"uint256[]",name:"ids",type:"uint256[]"},{indexed:!1,internalType:"uint256[]",name:"amounts",type:"uint256[]"}],name:"BuyTransaction",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"erc20",type:"address"}],name:"RemoveERC20Suppout",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"nftToken",type:"address"}],name:"RemoveNFTSuppout",type:"event"},{inputs:[{internalType:"address",name:"erc20",type:"address"}],name:"addERC20Support",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"signer",type:"address"},{internalType:"bytes32",name:"hash",type:"bytes32"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"checkSigner",outputs:[],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"signer",type:"address"},{internalType:"bytes32",name:"structHash",type:"bytes32"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"checkSigner712",outputs:[],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"erc1155Supported",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"erc20Supported",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"erc721Supported",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"executor",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"feeToAddress",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getDuration",outputs:[{internalType:"uint256",name:"duration",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"erc20",type:"address"}],name:"removeERC20Support",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_feeToAddress",type:"address"}],name:"setFeeToAddress",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"valNew",type:"uint256"}],name:"updateDuation",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"updateExecutor",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"nftToken",type:"address"}],name:"addERC721Support",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"nftToken",type:"address"}],name:"removeERC721Support",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"nftToken",type:"address"}],name:"addERC1155Support",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"nftToken",type:"address"}],name:"removeERC1155Support",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"currency",type:"address"},{internalType:"address[]",name:"nftAddresses",type:"address[]"},{internalType:"uint256[]",name:"ids",type:"uint256[]"},{internalType:"uint256[]",name:"amounts",type:"uint256[]"},{internalType:"uint256[]",name:"values",type:"uint256[]"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"buyNFT",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_tokenAddress",type:"address"},{internalType:"address",name:"_buyerAddress",type:"address"},{internalType:"address[]",name:"_nftAddresses",type:"address[]"},{internalType:"uint256[]",name:"_datas",type:"uint256[]"}],name:"getMessageHash",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"pure",type:"function"}],BE0=[{inputs:[],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"erc20",type:"address"}],name:"AddERC20Suppout",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"buyer",type:"address"},{indexed:!0,internalType:"address",name:"seller",type:"address"},{indexed:!0,internalType:"uint256",name:"orderId",type:"uint256"},{indexed:!1,internalType:"address",name:"currency",type:"address"},{indexed:!1,internalType:"uint256",name:"price",type:"uint256"}],name:"ItemSoldOut",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"erc20",type:"address"}],name:"RemoveERC20Suppout",type:"event"},{inputs:[],name:"MAX_TRANSACTION_FEE",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"MIN_TRANSACTION_FEE",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"erc20",type:"address"}],name:"addERC20Support",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"signer",type:"address"},{internalType:"bytes32",name:"hash",type:"bytes32"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"checkSigner",outputs:[],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"signer",type:"address"},{internalType:"bytes32",name:"structHash",type:"bytes32"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"checkSigner712",outputs:[],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"erc20Supported",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"executor",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"feeToAddress",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getDuration",outputs:[{internalType:"uint256",name:"duration",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"orderIdUsed",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"erc20",type:"address"}],name:"removeERC20Support",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_feeToAddress",type:"address"}],name:"setFeeToAddress",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"transactionFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"valNew",type:"uint256"}],name:"updateDuation",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"updateExecutor",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"orderId",type:"uint256"},{internalType:"address",name:"seller",type:"address"},{internalType:"address",name:"currency",type:"address"},{internalType:"uint256",name:"price",type:"uint256"},{internalType:"uint256",name:"startTime",type:"uint256"},{internalType:"uint256",name:"saltNonce",type:"uint256"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"buy",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_transactionFee",type:"uint256"}],name:"setTransactionFee",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_buyer",type:"address"},{internalType:"address",name:"_seller",type:"address"},{internalType:"uint256",name:"_orderId",type:"uint256"},{internalType:"address",name:"_currency",type:"address"},{internalType:"uint256",name:"_price",type:"uint256"},{internalType:"uint256",name:"_startTime",type:"uint256"},{internalType:"uint256",name:"_saltNonce",type:"uint256"}],name:"getMessageHash",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"pure",type:"function"}],PE0=[{inputs:[],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"erc20",type:"address"}],name:"AddERC20Suppout",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"buyer",type:"address"},{indexed:!0,internalType:"uint256",name:"orderId",type:"uint256"},{indexed:!1,internalType:"address",name:"currency",type:"address"},{indexed:!1,internalType:"uint256",name:"price",type:"uint256"}],name:"ItemSoldOut",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"erc20",type:"address"}],name:"RemoveERC20Suppout",type:"event"},{inputs:[{internalType:"address",name:"erc20",type:"address"}],name:"addERC20Support",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"signer",type:"address"},{internalType:"bytes32",name:"hash",type:"bytes32"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"checkSigner",outputs:[],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"signer",type:"address"},{internalType:"bytes32",name:"structHash",type:"bytes32"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"checkSigner712",outputs:[],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"erc20Supported",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"executor",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"feeToAddress",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getDuration",outputs:[{internalType:"uint256",name:"duration",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"orderIdUsed",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"erc20",type:"address"}],name:"removeERC20Support",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_feeToAddress",type:"address"}],name:"setFeeToAddress",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"valNew",type:"uint256"}],name:"updateDuation",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"updateExecutor",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"orderId",type:"uint256"},{internalType:"address",name:"currency",type:"address"},{internalType:"uint256",name:"price",type:"uint256"},{internalType:"uint256",name:"startTime",type:"uint256"},{internalType:"uint256",name:"saltNonce",type:"uint256"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"buy",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_buyer",type:"address"},{internalType:"uint256",name:"_orderId",type:"uint256"},{internalType:"address",name:"_currency",type:"address"},{internalType:"uint256",name:"_price",type:"uint256"},{internalType:"uint256",name:"_startTime",type:"uint256"},{internalType:"uint256",name:"_saltNonce",type:"uint256"}],name:"getMessageHash",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"pure",type:"function"}],xy=[{inputs:[{internalType:"address[]",name:"nfts",type:"address[]"},{internalType:"uint256[]",name:"tokenIds",type:"uint256[]"},{internalType:"uint64[]",name:"staketimes",type:"uint64[]"}],name:"stake",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address[]",name:"nfts",type:"address[]"},{internalType:"uint256[]",name:"tokenIds",type:"uint256[]"}],name:"redeem",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint64",name:"",type:"uint64"}],name:"periods",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"cooldownSeconds",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"erc721Supported",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"},{internalType:"uint256",name:"",type:"uint256"}],name:"stakingMap",outputs:[{internalType:"address",name:"user",type:"address"},{internalType:"address",name:"nft",type:"address"},{internalType:"uint256",name:"tokenId",type:"uint256"},{internalType:"uint64",name:"start",type:"uint64"},{internalType:"uint64",name:"stakeTime",type:"uint64"}],stateMutability:"view",type:"function"}],CE0=[{inputs:[{internalType:"address",name:"nftAddress",type:"address"},{internalType:"uint256[]",name:"tokenIds",type:"uint256[]"},{internalType:"uint256",name:"startTime",type:"uint256"},{internalType:"uint256",name:"saltNonce",type:"uint256"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"mintNft",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"nftAddress",type:"address"},{internalType:"uint256[]",name:"tokenIds",type:"uint256[]"},{internalType:"uint256",name:"startTime",type:"uint256"},{internalType:"uint256",name:"saltNonce",type:"uint256"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"decomposeNft",outputs:[],stateMutability:"nonpayable",type:"function"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"nftAddress",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!0,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"uint256",name:"startTime",type:"uint256"},{indexed:!1,internalType:"uint256[]",name:"ids",type:"uint256[]"}],name:"TokenDecomposed",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"nftAddress",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!0,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"uint256",name:"startTime",type:"uint256"},{indexed:!1,internalType:"uint256[]",name:"ids",type:"uint256[]"}],name:"TokenMinted",type:"event"}],IE0=[{inputs:[{internalType:"address",name:"_tokenAddress",type:"address"},{internalType:"address",name:"_seller",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"erc20",type:"address"}],name:"AddERC20Suppout",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"buyer",type:"address"},{indexed:!1,internalType:"address",name:"tokenAddress",type:"address"},{indexed:!1,internalType:"address",name:"currency",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"tokenAmount",type:"uint256"}],name:"BuyTransaction",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"erc20",type:"address"}],name:"RemoveERC20Suppout",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"seller",type:"address"}],name:"SellerUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"tokenAddress",type:"address"}],name:"TokenAddressUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"currency",type:"address"},{indexed:!1,internalType:"uint256",name:"price",type:"uint256"},{indexed:!1,internalType:"uint256",name:"pricePre",type:"uint256"}],name:"UpdateTokenPrice",type:"event"},{inputs:[{internalType:"address",name:"erc20",type:"address"}],name:"addERC20Support",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"erc20Supported",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"executor",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"feeToAddress",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"prices",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"erc20",type:"address"}],name:"removeERC20Support",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"seller",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"_feeToAddress",type:"address"}],name:"setFeeToAddress",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"tokenAddress",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"updateExecutor",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_tokenAddress",type:"address"}],name:"updateTokenAddress",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_seller",type:"address"}],name:"updateSeller",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"currency",type:"address"},{internalType:"uint256",name:"price",type:"uint256"}],name:"updateTokenPrice",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"currency",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"buyToken",outputs:[],stateMutability:"nonpayable",type:"function"}];class RE0{constructor(e){this.web3=e}async mintNFT({address:e,tokenIds:r,startTime:a,saltNonce:f,signature:n,gas:l,estimate:m}){if(jc.wallet.walletType===$t.RELAY)return jc.wallet.relaySvr.beginReq("jcStandard","mintNFT",...arguments);const y=jc.wallet.currentChainCfg.contracts.minterFactory;console.log("addressFactory:: ",y),console.log("address",e),console.log("tokenIds",r),console.log("startTime",a),console.log("saltNonce",f),console.log("signature",n),console.log("gas",l),console.log("estimate",m);const _=new this.web3.eth.Contract(d$,y,{from:jc.wallet.currentAccAddr});if(l||(l=await _.methods.mintNft(e,r,a,f,n).estimateGas()),l=l*Sr|1,m)return jc.wallet.generateGasShow(l);let E=[{address:y,from:jc.wallet.currentAccAddr,to:y}];for(let P of r)E.push({address:e,from:Jm,to:jc.wallet.currentAccAddr,id:P});const A={gas:l,title:"mint_nft",details:E};let k=await jc.wallet.fetchGasPrice();return Ia(A,_.methods.mintNft(e,r,a,f,n).send({gas:l,gasPrice:k}))}async marketSellNFT({nftToken:e,currency:r,tokenId:a,price:f,amount:n,gas:l,estimate:m}){if(jc.wallet.walletType===$t.RELAY)return jc.wallet.relaySvr.beginReq("jcStandard","marketSellNFT",...arguments);const y=jc.wallet.currentChainCfg;m=parseInt(m+"");const _=y.contracts.nftmarket;console.log("addressMarket:: ",_);const E=new this.web3.eth.Contract(z8,_,{from:jc.wallet.currentAccAddr}),A=new this.web3.eth.Contract(Zc,e,{from:jc.wallet.currentAccAddr});let k=await A.methods.getApproved(a),P=0,B=await jc.wallet.fetchGasPrice();if(k!=_&&(P=await A.methods.approve(_,a).estimateGas(),P=P*Sr|1,await A.methods.approve(_,a).send({gas:P,gasPrice:B})),l||(l=await E.methods.sell(e,r,a,f,n).estimateGas()),l=l*Sr|1,m)return jc.wallet.generateGasShow(l+P);let I=[{address:_,from:jc.wallet.currentAccAddr,to:_},{address:e,from:jc.wallet.currentAccAddr,to:_,id:a}];return Ia({gas:l,title:"market_sell",details:I},E.methods.sell(e,r,a,f,n).send({gas:l,gasPrice:B}))}async marketUpdatePrice({orderId:e,price:r,gas:a,estimate:f}){if(jc.wallet.walletType===$t.RELAY)return jc.wallet.relaySvr.beginReq("jcStandard","marketUpdatePrice",...arguments);const n=jc.wallet.currentChainCfg;f=parseInt(f+"");const l=n.contracts.nftmarket;console.log("addressMarket:: ",l);const m=new this.web3.eth.Contract(z8,l,{from:jc.wallet.currentAccAddr});if(a||(a=await m.methods.updatePrice(e,r).estimateGas()),a=a*Sr|1,f)return jc.wallet.generateGasShow(a);let y=[{address:l,from:jc.wallet.currentAccAddr,to:l}];const _={gas:a,title:"market_update_price",details:y};let E=await jc.wallet.fetchGasPrice();return Ia(_,m.methods.updatePrice(e,r).send({gas:a,gasPrice:E}))}async marketCancelOrder({orderId:e,gas:r,estimate:a}){const f=jc.wallet.currentChainCfg;a=parseInt(a+"");const n=f.contracts.nftmarket;console.log("addressMarket:: ",n);const l=new this.web3.eth.Contract(z8,n,{from:jc.wallet.currentAccAddr});if(r||(r=await l.methods.cancelOrder(e).estimateGas()),r=r*Sr|1,a)return jc.wallet.generateGasShow(r);let m=await l.methods.orderInfos(e).call();if(!m.orderId)throw new Xt(100,`order info with id: ${e} not found`);let y=[{address:n,from:jc.wallet.currentAccAddr,to:n},{address:m.nftToken,from:n,to:jc.wallet.currentAccAddr,id:m.tokenId}],_=await jc.wallet.fetchGasPrice();return Ia({gas:r,title:"market_cancel_order",details:y},l.methods.cancelOrder(e).send({gas:r,gasPrice:_}))}async marketBuy({orderId:e,gas:r,price:a,estimate:f}){if(jc.wallet.walletType===$t.RELAY)return jc.wallet.relaySvr.beginReq("jcStandard","marketBuy",...arguments);const n=jc.wallet.currentChainCfg;f=parseInt(f+"");const l=n.contracts.nftmarket;console.log("addressMarket:: ",l);const m=new this.web3.eth.Contract(z8,l,{from:jc.wallet.currentAccAddr});let y=await m.methods.orderInfos(e).call();if(!y.orderId)throw new Xt(100,`order info with id: ${e} not found`);if(!Tr(a).eq(Tr(y.price)))throw new Xt(101,`price must equal to ${y.price}`);const _=new this.web3.eth.Contract(N1,y.currency,{from:jc.wallet.currentAccAddr});let E=await _.methods.allowance(jc.wallet.currentAccAddr,l).call();console.log("approved:: ",E);let A=0,k=await jc.wallet.fetchGasPrice();if(Tr(E).lt(Tr(a))&&(A=await _.methods.approve(l,a).estimateGas(),A=A*Sr|1,await _.methods.approve(l,a).send({gas:A,gasPrice:k})),r||(r=await m.methods.buy(e,a).estimateGas()),r=r*Sr|1,f)return jc.wallet.generateGasShow(r+A);let P=[{address:l,from:jc.wallet.currentAccAddr,to:l},{address:y.nftToken,from:l,to:jc.wallet.currentAccAddr,id:y.tokenId,value:y.amount},{address:y.currency,from:jc.wallet.currentAccAddr,to:l,id:y.price}];return Ia({gas:r,title:"market_buy",details:P},m.methods.buy(e,a).send({gas:r,gasPrice:k}))}async marketOrderInfo(e){const r=jc.wallet.currentChainCfg.contracts.nftmarket;return console.log("addressMarket:: ",r),await new this.web3.eth.Contract(z8,r,{from:jc.wallet.currentAccAddr}).methods.orderInfos(e).call()}async gameMallBuy({orderId:e,currency:r,price:a,startTime:f,saltNonce:n,signature:l,gas:m,estimate:y}){if(jc.wallet.walletType===$t.RELAY)return jc.wallet.relaySvr.beginReq("jcStandard","gameMallBuy",...arguments);const _=jc.wallet.currentChainCfg;y=parseInt(y+"");const E=_.contracts.gamemall;console.log("addressGameMall:: ",E);const A=new this.web3.eth.Contract(PE0,E,{from:jc.wallet.currentAccAddr}),k=new this.web3.eth.Contract(N1,r,{from:jc.wallet.currentAccAddr});let P=await k.methods.allowance(jc.wallet.currentAccAddr,E).call();console.log("approved:: ",P);let B=0,I=await jc.wallet.fetchGasPrice();if(Tr(P).lt(Tr(a))&&(B=await k.methods.approve(E,a).estimateGas(),B=B*Sr|1,console.log("gasApprove:: ",B),await k.methods.approve(E,a).send({gas:B,gasPrice:I})),m||(m=await A.methods.buy(e,r,a,f,n,l).estimateGas()),m=m*Sr|1,y)return jc.wallet.generateGasShow(m+B);let O=await A.methods.feeToAddress().call(),H=[{address:E,from:jc.wallet.currentAccAddr,to:E},{address:r,from:jc.wallet.currentAccAddr,to:O,value:a}];return Ia({gas:m,title:"game_mall_buy",details:H},A.methods.buy(e,r,a,f,n,l).send({gas:m,gasPrice:I}))}async gameMarketBuy({orderId:e,seller:r,currency:a,price:f,startTime:n,saltNonce:l,signature:m,gas:y,estimate:_}){if(jc.wallet.walletType===$t.RELAY)return jc.wallet.relaySvr.beginReq("jcStandard","gameMarketBuy",...arguments);const E=jc.wallet.currentChainCfg;_=parseInt(_+"");const A=E.contracts.gamemarket;console.log("addressGameMarket:: ",A);const k=new this.web3.eth.Contract(BE0,A,{from:jc.wallet.currentAccAddr}),P=new this.web3.eth.Contract(N1,a,{from:jc.wallet.currentAccAddr});let B=await P.methods.allowance(jc.wallet.currentAccAddr,A).call();console.log("approved:: ",B);let I=0,O=await jc.wallet.fetchGasPrice();if(Tr(B).lt(Tr(f))&&(I=await P.methods.approve(A,f).estimateGas(),I=I*Sr|1,await P.methods.approve(A,f).send({gas:I,gasPrice:O})),console.log("gasApprove: "+I),y||(y=await k.methods.buy(e,r,a,f,n,l,m).estimateGas()),y=y*Sr|1,console.log("gas: "+y),_)return jc.wallet.generateGasShow(y+I);let H=await k.methods.feeToAddress().call(),N=[{address:A,from:jc.wallet.currentAccAddr,to:A},{address:a,from:jc.wallet.currentAccAddr,to:H,value:f}];return Ia({gas:y,title:"game_market_buy",details:N},k.methods.buy(e,r,a,f,n,l,m).send({gas:y,gasPrice:O}))}async buyTokenWithErc20({currency:e,amount:r,estimate:a}){if(jc.wallet.walletType===$t.RELAY)return jc.wallet.relaySvr.beginReq("jcStandard","buyTokenWithErc20",...arguments);const f=jc.wallet.currentChainCfg;a=parseInt(a+"");const n=f.contracts.tokenmall;console.log("addressMall:: ",n);const l=new this.web3.eth.Contract(IE0,n,{from:jc.wallet.currentAccAddr}),m=new this.web3.eth.Contract(N1,e,{from:jc.wallet.currentAccAddr});let y=await m.methods.allowance(jc.wallet.currentAccAddr,n).call();console.log("approved:: ",y);let _=await jc.wallet.fetchGasPrice();console.log("gas price: "+_);let E=0;Tr(y).lt(Tr(r))&&(E=await m.methods.approve(n,r).estimateGas(),E=E*Sr|1,await m.methods.approve(n,r).send({gas:E,gasPrice:_}));let A=await l.methods.buyToken(e,r).estimateGas();if(A=A*Sr|1,a)return jc.wallet.generateGasShow(A+E);let k=[{address:n,from:jc.wallet.currentAccAddr,to:n},{address:e,from:jc.wallet.currentAccAddr,to:n,value:r}],P=await l.methods.tokenAddress().call(),B=await m.methods.decimals().call(),I=await l.methods.prices(e).call(),O=Tr(I).mul(Tr(r)).mul(Tr(10).pow(Tr(10).sub(Tr(B)))).div(Tr("1000000"));return console.log(`buyTokenWithErc20: currency: ${e}, amount: ${r}, tokenAmount: ${O}`),k.push({address:P,from:n,to:jc.wallet.currentAccAddr,value:O}),Ia({gas:A,title:"mall_buy_token",details:k},l.methods.buyToken(e,r).send({gas:A,gasPrice:_}))}async mallBuy({currency:e,addresses:r,ids:a,amounts:f,values:n,signature:l,gas:m,estimate:y}){if(jc.wallet.walletType===$t.RELAY)return jc.wallet.relaySvr.beginReq("jcStandard","mallBuy",...arguments);const _=jc.wallet.currentChainCfg;y=parseInt(y+"");const E=_.contracts.nftmall;console.log("addressMall:: ",E);const A=new this.web3.eth.Contract(TE0,E,{from:jc.wallet.currentAccAddr}),k=new this.web3.eth.Contract(N1,e,{from:jc.wallet.currentAccAddr});let P=await k.methods.allowance(jc.wallet.currentAccAddr,E).call();console.log("approved:: ",P);let B=await jc.wallet.fetchGasPrice();console.log("gas price: "+B);let I=0;if(Tr(P).lt(Tr(n[1]))&&(I=await k.methods.approve(E,n[1]).estimateGas(),I=I*Sr|1,await k.methods.approve(E,n[1]).send({gas:I,gasPrice:B})),m||(m=await A.methods.buyNFT(e,r,a,f,n,l).estimateGas()),m=m*Sr|1,y)return jc.wallet.generateGasShow(m+I);let O=[{address:E,from:jc.wallet.currentAccAddr,to:E},{address:e,from:jc.wallet.currentAccAddr,to:E,value:n[1]}];for(let H=0;H`- ${_}`)].join(` `));const y=m.join(` diff --git a/app/AndroidManifest.xml b/app/AndroidManifest.xml index 3284e3d..fa1b798 100644 --- a/app/AndroidManifest.xml +++ b/app/AndroidManifest.xml @@ -176,25 +176,9 @@ android:launchMode="singleTask" android:taskAffinity="com.cege.games.release" android:exported="true" /> - - - - - - - - - - @@ -204,8 +188,8 @@ + android:scheme="cfoauthcb" + android:path="/login_result" /> { - Intent intent = new Intent(this, AppleLoginActivity.class); - intent.putExtra("funId", funId); - startActivity(intent); - }); - } - public void showPage(String fid, final String url) { runOnUiThread(() -> { Intent intent = new Intent(this, WebPageActivity.class); diff --git a/app/src/com/cege/games/release/apple/AppleLoginActivity.java b/app/src/com/cege/games/release/apple/AppleLoginActivity.java deleted file mode 100644 index 986d2bb..0000000 --- a/app/src/com/cege/games/release/apple/AppleLoginActivity.java +++ /dev/null @@ -1,80 +0,0 @@ -package com.cege.games.release.apple; - -import android.annotation.SuppressLint; -import android.app.Activity; -import android.content.Intent; -import android.graphics.Rect; -import android.net.Uri; -import android.util.Log; -import android.view.ViewGroup; -import android.view.Window; -import android.webkit.CookieManager; -import android.webkit.WebResourceRequest; -import android.webkit.WebSettings; -import android.webkit.WebView; -import android.webkit.WebViewClient; - -import com.cege.games.release.Constants; -import com.cege.games.release.R; - -public class AppleLoginActivity extends Activity { - private static final String TAG = AppleLoginActivity.class.getSimpleName(); - @SuppressLint("SetJavaScriptEnabled") - @Override - public void onCreate(android.os.Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - Intent intent = getIntent(); - setContentView(R.layout.activity_web_page); - - WebView.setWebContentsDebuggingEnabled(true); - WebView mWebView = findViewById(R.id.web_view); - WebSettings webSettings = mWebView.getSettings(); - webSettings.setJavaScriptEnabled(true); - webSettings.setDomStorageEnabled(true); - webSettings.setDatabaseEnabled(true); - webSettings.setAllowContentAccess(true); - webSettings.setAppCacheEnabled(true); - webSettings.setBuiltInZoomControls(true); - webSettings.setUseWideViewPort(true); - webSettings.setLoadWithOverviewMode(true); - webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); - CookieManager.getInstance().setAcceptThirdPartyCookies(mWebView,true); - // get url from intent - String funId = intent.getStringExtra("funId"); - String url = Constants.APPLE_AUTH_URL - + "?response_type=code%20id_token&v=1.1.6&response_mode=form_post&client_id=" - + Constants.APPLE_CLIENT_ID + "&scope=" + Constants.APPLE_SCOPE + "&state=" + funId + "&redirect_uri=" - + Constants.APPLE_REDIRECT_URI; - // show web view - mWebView.loadUrl(url); - mWebView.setWebViewClient(new WebViewClient() { - @Override - public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { - String url = request.getUrl().toString(); - Log.i(TAG, url); - if (url.startsWith("cebg")) { - // Close the dialog after getting the authorization code - Intent myapp_intent = new Intent(Intent.ACTION_VIEW); - myapp_intent.setData(Uri.parse(url)); - startActivity(myapp_intent); - finish(); - return true; - } - return false; - } - -// @Override -// public void onPageFinished(WebView view, String url) { -// super.onPageFinished(view, url); -// Rect displayRectangle = new Rect(); -// Window window = getWindow(); -// window.getDecorView().getWindowVisibleDisplayFrame(displayRectangle); -// ViewGroup.LayoutParams layoutparms = view.getLayoutParams(); -// layoutparms.height = displayRectangle.height(); -// layoutparms.width = displayRectangle.width(); -// view.setLayoutParams(layoutparms); -// } - }); - } - -} diff --git a/app/src/com/cege/games/release/apple/AppleLoginCbActivity.java b/app/src/com/cege/games/release/apple/AppleLoginCbActivity.java deleted file mode 100644 index cbd0dd1..0000000 --- a/app/src/com/cege/games/release/apple/AppleLoginCbActivity.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.cege.games.release.apple; - -import android.app.Activity; -import android.content.Intent; -import android.net.Uri; -import android.os.Bundle; -import android.util.Log; - -import androidx.annotation.Nullable; - -import com.jc.jcfw.JcSDK; - -public class AppleLoginCbActivity extends Activity { - private static final String TAG = AppleLoginCbActivity.class.getSimpleName(); - - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - Log.d(TAG, "receive apple login callback"); - Intent intent = getIntent(); - if (Intent.ACTION_VIEW.equals(intent.getAction())) { - Uri uri = intent.getData(); - String error = uri.getQueryParameter("error"); - String state = uri.getQueryParameter("state"); - if (null != error && !error.isEmpty()) { - JcSDK.nativeCb(state, error, null); - } else { - String token = uri.getQueryParameter("token"); - JcSDK.nativeCb(state, null, token); - } - finish(); - } - } -} diff --git a/app/src/com/cege/games/release/discord/DiscordLoginCbActivity.java b/app/src/com/cege/games/release/oauth/OAuthLoginCbActivity.java similarity index 80% rename from app/src/com/cege/games/release/discord/DiscordLoginCbActivity.java rename to app/src/com/cege/games/release/oauth/OAuthLoginCbActivity.java index 3b07d9a..84bfe39 100644 --- a/app/src/com/cege/games/release/discord/DiscordLoginCbActivity.java +++ b/app/src/com/cege/games/release/oauth/OAuthLoginCbActivity.java @@ -1,4 +1,4 @@ -package com.cege.games.release.discord; +package com.cege.games.release.oauth; import android.app.Activity; import android.content.Intent; @@ -11,13 +11,13 @@ import androidx.annotation.Nullable; import com.cege.games.release.MainActivity; import com.jc.jcfw.JcSDK; -public class DiscordLoginCbActivity extends Activity{ - private static final String TAG = DiscordLoginCbActivity.class.getSimpleName(); +public class OAuthLoginCbActivity extends Activity { + private static final String TAG = OAuthLoginCbActivity.class.getSimpleName(); @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - Log.d(TAG, "receive discord login callback"); + Log.d(TAG, "receive oauth login callback"); Intent intent = getIntent(); if (Intent.ACTION_VIEW.equals(intent.getAction())) { diff --git a/app/src/com/cege/games/release/oauth/OAuthUtil.java b/app/src/com/cege/games/release/oauth/OAuthUtil.java new file mode 100644 index 0000000..f1c287e --- /dev/null +++ b/app/src/com/cege/games/release/oauth/OAuthUtil.java @@ -0,0 +1,61 @@ +package com.cege.games.release.oauth; + +import android.app.Activity; +import android.content.Intent; +import android.net.Uri; + + +import net.openid.appauth.AuthorizationRequest; +import net.openid.appauth.AuthorizationService; +import net.openid.appauth.AuthorizationServiceConfiguration; + +import org.json.JSONException; +import org.json.JSONObject; + +public class OAuthUtil { + private final Activity mActivity; + + public OAuthUtil(Activity activity) { + this.mActivity = activity; + } + + /** + * + * @param funId + * @param jsonData: { + * "endpoint": "", + * "client_id": "", + * "redirect_uri": "", + * "response_type": "code", + * "response_mode": "form_post", nullable + * "scopes": "", + * } + * @throws JSONException + */ + public void startLogin(String funId, String jsonData) throws JSONException { + JSONObject data = new JSONObject(jsonData); + AuthorizationServiceConfiguration config = new AuthorizationServiceConfiguration( + Uri.parse(data.getString("endpoint")), + Uri.parse("") + ); + AuthorizationRequest.Builder authRequestBuilder = new AuthorizationRequest.Builder( + config, + data.getString("client_id"), + data.getString("response_type"), + Uri.parse(data.getString("redirect_uri")) + ); + String[] scopes = data.getString("scopes").split(" +"); + if (data.has("response_mode")) { + authRequestBuilder.setResponseMode(data.getString("response_mode")); + } + AuthorizationRequest authRequest = authRequestBuilder + .setScopes(scopes) + .setCodeVerifier(null, null, null) + .setState(funId) + .setNonce(funId) + .build(); + AuthorizationService service = new AuthorizationService(this.mActivity); + Intent authIntent = service.getAuthorizationRequestIntent(authRequest); + this.mActivity.startActivity(authIntent); + } +} diff --git a/app/src/com/jc/jcfw/JcSDK.java b/app/src/com/jc/jcfw/JcSDK.java index ee27829..834a2b9 100644 --- a/app/src/com/jc/jcfw/JcSDK.java +++ b/app/src/com/jc/jcfw/JcSDK.java @@ -129,11 +129,11 @@ public class JcSDK { } public static void signWithApple(String funid) { - MainActivity.app.signWithApple(funid); +// MainActivity.app.signWithApple(funid); } - public static void signWithDiscord(String funid) { - MainActivity.app.signWithDiscord(funid); + public static void signWithOAuth(String funid, String jsonData) { + MainActivity.app.oauthLogin(funid, jsonData); } public static void signOutGoogle(String funid) {