UNPKG

flexbiz-server

Version:

Flexible Server

21 lines (20 loc) 8.24 kB
'use strict';const assbankSchema=new Schema({id_app:{type:String,required:!0},address:{type:String,required:!0,maxlength:2024,trim:!0},denom:{type:String,required:!0},amount:{type:Number,default:0}});(global.configs||{}).createIndexes&&(assbankSchema.index({id_app:1}),assbankSchema.index({address:1}),assbankSchema.index({denom:1}),assbankSchema.index({id_app:1,address:1,denom:1},{unique:!0}));const model=mongoose.models.assbank||mongoose.model("assbank",assbankSchema); model.getSystemAddress=()=>`${(global.configs||{}).ADDRESS_PREFIX||""}system`;model.getBalance=async($id_app$$,$address$$,$denom$$)=>(await model.find({id_app:$id_app$$,address:$address$$,denom:$denom$$}).lean()).map($b$$=>$b$$.amount).reduce(($a$$,$b$$)=>$a$$+$b$$,0); model.getBalances=async($id_app$$,$address$jscomp$0$$="",$denom$jscomp$0$$="")=>{$id_app$$={id_app:$id_app$$,amount:{$gt:0}};$address$jscomp$0$$&&($id_app$$.address=$address$jscomp$0$$);$denom$jscomp$0$$&&($id_app$$.denom=$denom$jscomp$0$$);return(await model.find($id_app$$).lean()).map($b$$=>{const {address:$address$$,denom:$denom$$,amount:$amount$$}=$b$$;return{address:$address$$,denom:$denom$$,amount:$amount$$}})}; model.getSupply=async($id_app$$,$denom$$)=>(await model.find({id_app:$id_app$$,denom:$denom$$}).lean()).map($b$$=>$b$$.amount).reduce(($a$$,$b$$)=>$a$$+$b$$,0);model.getSupplies=async $id_app$$=>await (await model.find({id_app:$id_app$$}).lean()).asyncGroupBy(["denom"],["amount"]); model.getInvestBalances=async($id_app$jscomp$4_query$$,$address$$="",$token$$="")=>{let $bl$$=(await model.getBalances($id_app$jscomp$4_query$$,$address$$,$token$$)).filter($b$$=>$b$$.address!=model.getSystemAddress());$bl$$.forEach($b$$=>{$b$$.location="wallet"});$id_app$jscomp$4_query$$={id_app:$id_app$jscomp$4_query$$,trang_thai:"0",con_lai:{$gt:0}};$address$$&&($id_app$jscomp$4_query$$.creator=$address$$);$token$$&&($id_app$jscomp$4_query$$.token=$token$$);$address$$=(await global.getModel("asssell").find($id_app$jscomp$4_query$$).lean()).map($s$$=> ({amount:$s$$.con_lai,denom:$s$$.token,address:$s$$.creator,location:"market"}));$bl$$=[...$bl$$,...$address$$];return await $bl$$.asyncGroupBy(["address","denom","location"],["amount"])}; model.sendCoins=async($id_app$$,$from_address$$,$to_address$$,$amount$$,$denom$$,$data$$={})=>{if($amount$$=Number($amount$$)){if(!($id_app$$&&$from_address$$&&$to_address$$&&$denom$$))throw console.error("Kh\u00f4ng th\u1ec3 g\u1eedi token do l\u1ec7nh g\u1eedi thi\u1ebfu m\u1ed9t trong nh\u1eefng tham s\u1ed1 sau: id_app,from_address,to_address,amount,denom",{id_app:$id_app$$,from_address:$from_address$$,to_address:$to_address$$,amount:$amount$$,denom:$denom$$,data:$data$$}),"Kh\u00f4ng th\u1ec3 g\u1eedi token"; $data$$.from_address=$from_address$$;$data$$.to_address=$to_address$$;$data$$.amount=$amount$$;$data$$.denom=$denom$$;var {creator:$creator$$}=$data$$;$creator$$||($creator$$=$from_address$$);var {event:$event$$}=$data$$;$event$$||($event$$="SENDCOINS");var {memo:$memo$$}=$data$$;$memo$$||($memo$$="Send coins");var $receiver_bank_sender_bank$$=await model.findOne({id_app:$id_app$$,address:$from_address$$,denom:$denom$$});if(!$receiver_bank_sender_bank$$||$receiver_bank_sender_bank$$.amount<$amount$$)throw`V\u00ed ${$from_address$$} kh\u00f4ng c\u00f3 \u0111\u1ee7 ${$amount$$} ${$denom$$}`; $receiver_bank_sender_bank$$.amount-=$amount$$;await $receiver_bank_sender_bank$$.save();($receiver_bank_sender_bank$$=await model.findOne({id_app:$id_app$$,address:$to_address$$,denom:$denom$$}))||($receiver_bank_sender_bank$$=new model({id_app:$id_app$$,address:$to_address$$,denom:$denom$$}));$receiver_bank_sender_bank$$.amount+=$amount$$;await $receiver_bank_sender_bank$$.save();await global.getModel("asstransaction").createTransaction({id_app:$id_app$$,creator:$creator$$,event:$event$$,memo:$memo$$, data:$data$$});(await global.getModel("asskey").find({id_app:$id_app$$,address:$from_address$$}).lean()).forEach($u$$=>{let $title$$=$memo$$;$title$$||($title$$=`TK ${$u$$.name}(address:${$u$$.address}) -${$amount$$}${$denom$$}`);global.getModel("user").emitEvent($u$$.username,"blockchain.wallet.changed",{id_app:$id_app$$,title:$title$$,receiver:$to_address$$,sender:$from_address$$,data:{amount:$amount$$,denom:$denom$$}})});(await global.getModel("asskey").find({id_app:$id_app$$,address:$from_address$$}).lean()).forEach($u$$=> {let $title$$=$memo$$;$title$$||($title$$=`TK ${$u$$.name}(address:${$u$$.address}) +${$amount$$}${$denom$$}`);global.getModel("user").emitEvent($u$$.username,"blockchain.wallet.changed",{id_app:$id_app$$,title:$title$$,receiver:$to_address$$,sender:$from_address$$,data:{amount:$amount$$,denom:$denom$$}})})}}; model.sendCoinsFromAccountToSystem=async($id_app$$,$from_address$$,$amount$$,$denom$$,$data$$={})=>{$data$$.creator=$data$$.creator||$from_address$$;let $to_address$$=model.getSystemAddress();return model.sendCoins($id_app$$,$from_address$$,$to_address$$,$amount$$,$denom$$,$data$$)}; model.sendCoinsFromSystemToAccount=async($id_app$$,$to_address$$,$amount$$,$denom$$,$data$$={})=>{let $from_address$$=model.getSystemAddress();$data$$.creator=$data$$.creator||$to_address$$;return model.sendCoins($id_app$$,$from_address$$,$to_address$$,$amount$$,$denom$$,$data$$)}; model.mintCoins=async($id_app$$,$creator$$,$amount$$,$denom$$,$data$jscomp$3_u$$={},$options$$={push_notify:!0})=>{if($amount$$){var $event$jscomp$1_receiver_bank$jscomp$1_title$$=await model.findOne({id_app:$id_app$$,address:$creator$$,denom:$denom$$});$event$jscomp$1_receiver_bank$jscomp$1_title$$||($event$jscomp$1_receiver_bank$jscomp$1_title$$=new model({id_app:$id_app$$,address:$creator$$,denom:$denom$$,amount:0}));$event$jscomp$1_receiver_bank$jscomp$1_title$$.amount+=$amount$$;await $event$jscomp$1_receiver_bank$jscomp$1_title$$.save(); $data$jscomp$3_u$$.to_address=$creator$$;$data$jscomp$3_u$$.amount=$amount$$;$data$jscomp$3_u$$.denom=$denom$$;({event:$event$jscomp$1_receiver_bank$jscomp$1_title$$}=$data$jscomp$3_u$$);$event$jscomp$1_receiver_bank$jscomp$1_title$$||($event$jscomp$1_receiver_bank$jscomp$1_title$$="MINT");var {memo:$memo$$}=$data$jscomp$3_u$$;$memo$$||($memo$$="Mint coins");await global.getModel("asstransaction").createTransaction({id_app:$id_app$$,creator:$creator$$,event:$event$jscomp$1_receiver_bank$jscomp$1_title$$, memo:$memo$$,data:$data$jscomp$3_u$$});if($data$jscomp$3_u$$=await global.getModel("asskey").findOne({id_app:$id_app$$,address:$creator$$}).lean())$event$jscomp$1_receiver_bank$jscomp$1_title$$=`TK ${$data$jscomp$3_u$$.name}(address:${$data$jscomp$3_u$$.address}) +${$amount$$}${$denom$$}`,global.getModel("user").emitEvent($data$jscomp$3_u$$.username,"blockchain.wallet.changed",{id_app:$id_app$$,title:$event$jscomp$1_receiver_bank$jscomp$1_title$$,receiver:$creator$$,data:{amount:$amount$$,denom:$denom$$}}, $options$$.push_notify)}};const {isSupperAdmin}=require("../libs/utils"); model.issueCoins=async($user$$,$data$$)=>{let $creator$$=$data$$.creator;if(!await global.getModel("asskey").findOne({id_app:$user$$.current_id_app,username:$user$$.email,address:$creator$$}).lean())throw"\u0110\u1ecba ch\u1ec9 v\u00ed n\u00e0y kh\u00f4ng thu\u1ed9c v\u1ec1 b\u1ea1n";if(global.configs.MAIN_DENOM==$data$$.denom){if(!isSupperAdmin($user$$.email.toLowerCase()))throw"Ch\u1ec9 ng\u01b0\u1eddi qu\u1ea3n tr\u1ecb h\u1ec7 th\u1ed1ng m\u1edbi c\u00f3 quy\u1ec1n ph\u00e1t h\u00e0nh token n\u00e0y";}else if(1> await model.getBalance($user$$.current_id_app,$creator$$,global.configs.MAIN_DENOM))throw"B\u1ea1n kh\u00f4ng \u0111\u1ee7 s\u1ed1 d\u01b0 token h\u1ec7 th\u1ed1ng \u0111\u1ec3 ph\u00e1t h\u00e0nh token n\u00e0y";try{global.configs.MAIN_DENOM!==$data$$.denom&&await model.sendCoinsFromAccountToSystem($user$$.current_id_app,$creator$$,1,global.configs.MAIN_DENOM,{...$data$$,memo:`S\u1eed d\u1ee5ng 1${global.configs.MAIN_DENOM} \u0111\u1ec3 ph\u00e1t h\u00e0nh ${$data$$.amount}${$data$$.denom}`})}catch($e$$){throw console.error("can't spend main coins to mining new coin", $e$$),$e$$;}try{await model.mintCoins($user$$.current_id_app,$creator$$,$data$$.amount,$data$$.denom,{...$data$$,memo:"Ph\u00e1t h\u00e0nh token",event:"ISSUE"})}catch($e$$){throw console.error("can't mint coins",$e$$),$e$$;}return $data$$};module.exports=model;