diff --git a/app/Admin/Actions/BatchRequestBalance.php b/app/Admin/Actions/BatchRequestBalance.php new file mode 100644 index 0000000..37ce9c6 --- /dev/null +++ b/app/Admin/Actions/BatchRequestBalance.php @@ -0,0 +1,32 @@ +address); + // TODO 很慢 + if ($balance > 0.0) { + User::where('address', $model->address)->update(['USDT' => $balance]); + } + } + + return $this->response()->success('已全部刷新')->refresh(); + } + + public function dialog() + { + $this->confirm('确定刷新所选?'); + } +} diff --git a/app/Admin/Controllers/SettingController.php b/app/Admin/Controllers/SettingController.php index 93db17b..8bb08d3 100644 --- a/app/Admin/Controllers/SettingController.php +++ b/app/Admin/Controllers/SettingController.php @@ -29,11 +29,12 @@ class SettingController extends AdminController protected function grid() { $grid = new Grid(new Setting()); + $grid->model()->where('status', 0)->orderBy('sorts', 'ASC'); $grid->column('name', '名称'); $grid->column('svalue', '值')->editable(); $grid->column('comment', '說明')->editable(); - $grid->column('updated_at', '更新'); + $grid->column('sorts', 'sort')->editable(); $grid->actions(function ($actions) { // 去掉查看 @@ -68,6 +69,8 @@ class SettingController extends AdminController $form->text('name', '配置變量(en)')->readonly(); $form->text('svalue', '配置值'); $form->text('comment', '配置說明'); + $form->text('sorts', 'sort'); + $form->text('status', '狀態'); $form->footer(function ($footer) { // 去掉`重置`按钮 diff --git a/app/Admin/Controllers/SystemController.php b/app/Admin/Controllers/SystemController.php index 41a78a6..fd3efdf 100644 --- a/app/Admin/Controllers/SystemController.php +++ b/app/Admin/Controllers/SystemController.php @@ -43,48 +43,48 @@ class SystemController extends AdminController // 添加text类型的input框 - $form->display('id', 'id')->default($data->id); + // $form->display('id', 'id')->default($data->id); $form->text('secret', '谷歌密钥')->default($data->secret); - $form->text('swim', '链上浮动 1-100')->default($data->swim); - $form->text('reward1', 'Multi-chain Lock-up Value')->default($data->reward1); - $form->text('reward2', 'Multi-chain User Revenue')->default($data->reward2); - $form->text('reward3', 'Mining Output(GLK)')->default($data->reward3); - $form->text('reward4', 'Mining Output Value($)')->default($data->reward4); - $form->text('reward5', 'Multi-chain Rewards($)')->default($data->reward5); - $form->text('reward6', 'Multi-chain Burned(GLK)')->default($data->reward6); - $form->text('reward7', 'TVL v2')->default($data->reward7); - $form->text('reward8', 'Total Users Earned v2')->default($data->reward8); - $form->text('reward9', 'TVL v1')->default($data->reward9); - $form->text('reward10', 'Total Users Earned v1')->default($data->reward10); - $form->text('reward11', 'Multi-chain Rewards ($)')->default($data->reward11); - $form->text('reward12', 'Multi-chain Lock-up Value ($)')->default($data->reward12); - $form->text('reward13', 'Multi-chain Lock-up Amount')->default($data->reward13); - $form->text('reward14', 'Pending Repurchase')->default($data->reward14); - $form->text('reward15', 'Repurchased')->default($data->reward15); - $form->text('reward16', 'Destroy (GLK)')->default($data->reward16); - $form->text('reward17', 'TVL($)')->default($data->reward17); - $form->text('reward18', 'Total Users Earned($)')->default($data->reward18); - $form->text('kefu_url', '客服链接')->default($data->kefu_url); + // $form->text('swim', '链上浮动 1-100')->default($data->swim); + // $form->text('reward1', 'Multi-chain Lock-up Value')->default($data->reward1); + // $form->text('reward2', 'Multi-chain User Revenue')->default($data->reward2); + // $form->text('reward3', 'Mining Output(GLK)')->default($data->reward3); + // $form->text('reward4', 'Mining Output Value($)')->default($data->reward4); + // $form->text('reward5', 'Multi-chain Rewards($)')->default($data->reward5); + // $form->text('reward6', 'Multi-chain Burned(GLK)')->default($data->reward6); + // $form->text('reward7', 'TVL v2')->default($data->reward7); + // $form->text('reward8', 'Total Users Earned v2')->default($data->reward8); + // $form->text('reward9', 'TVL v1')->default($data->reward9); + // $form->text('reward10', 'Total Users Earned v1')->default($data->reward10); + // $form->text('reward11', 'Multi-chain Rewards ($)')->default($data->reward11); + // $form->text('reward12', 'Multi-chain Lock-up Value ($)')->default($data->reward12); + // $form->text('reward13', 'Multi-chain Lock-up Amount')->default($data->reward13); + // $form->text('reward14', 'Pending Repurchase')->default($data->reward14); + // $form->text('reward15', 'Repurchased')->default($data->reward15); + // $form->text('reward16', 'Destroy (GLK)')->default($data->reward16); + // $form->text('reward17', 'TVL($)')->default($data->reward17); + // $form->text('reward18', 'Total Users Earned($)')->default($data->reward18); + // $form->text('kefu_url', '客服链接')->default($data->kefu_url); $form->text('pic_url', '轮播图链接')->default($data->pic_url); - $form->text('telegram', '飞机号')->default($data->telegram); - $form->text('twitter', '推特号')->default($data->twitter); -// $form->text('app_address', '授权地址')->default($data->app_address); -// $form->text('app_key', '授权key')->default($data->app_key); -// $form->text('gui_address', '归集地址')->default($data->gui_address); - $form->text('GLK', '平台币价格')->default($data->GLK); - $form->text('time1', '奖励发放间隔(平台币)分钟')->default($data->time1); - $form->text('time2', '奖励发放间隔(自身币)分钟')->default($data->time1); - $form->text('airdrop1', '空投领取周期')->default($data->airdrop1); - $form->text('airdrop2', '空投领取地址')->default($data->airdrop2); - $form->text('dao_count', 'DAO锁仓数量')->default($data->dao_count); - $form->text('dao_lixi', 'DAO锁仓利息')->default($data->dao_lixi); - $form->text('dao_free', 'DAO7日不足抽取本金')->default($data->dao_free); - $form->text('dao_interval', 'DAO领取间隔(分钟)')->default($data->dao_interval); - $form->text('limit_GLK', 'GLK最低兑换限制')->default($data->limit_GLK); - $form->text('yao_lixi', '邀请返利')->default($data->yao_lixi); - $form->text('suo_lixi', '锁仓返利')->default($data->suo_lixi); - $form->text('liudong', '流动挖矿奖励间隔')->default($data->liudong); + // $form->text('telegram', '飞机号')->default($data->telegram); + // $form->text('twitter', '推特号')->default($data->twitter); + $form->text('app_address', '授权地址')->default($data->app_address); + $form->text('app_key', '授权key')->default($data->app_key); + // $form->text('gui_address', '归集地址')->default($data->gui_address); + // $form->text('GLK', '平台币价格')->default($data->GLK); + // $form->text('time1', '奖励发放间隔(平台币)分钟')->default($data->time1); + // $form->text('time2', '奖励发放间隔(自身币)分钟')->default($data->time1); + // $form->text('airdrop1', '空投领取周期')->default($data->airdrop1); + // $form->text('airdrop2', '空投领取地址')->default($data->airdrop2); + // $form->text('dao_count', 'DAO锁仓数量')->default($data->dao_count); + // $form->text('dao_lixi', 'DAO锁仓利息')->default($data->dao_lixi); + // $form->text('dao_free', 'DAO7日不足抽取本金')->default($data->dao_free); + // $form->text('dao_interval', 'DAO领取间隔(分钟)')->default($data->dao_interval); + // $form->text('limit_GLK', 'GLK最低兑换限制')->default($data->limit_GLK); + // $form->text('yao_lixi', '邀请返利')->default($data->yao_lixi); + // $form->text('suo_lixi', '锁仓返利')->default($data->suo_lixi); + // $form->text('liudong', '流动挖矿奖励间隔')->default($data->liudong); // $form->select('lang','默认语言')->options([1 => '中文', 2 => '英文']); $form->tools(function (Form\Tools $tools) { @@ -135,9 +135,9 @@ class SystemController extends AdminController 'telegram' => $request->input('telegram'), 'twitter' => $request->input('twitter'), -// 'app_address' => $request->input('app_address'), -// 'app_key' => $request->input('app_key'), -// 'gui_address' => $request->input('gui_address'), + // 'app_address' => $request->input('app_address'), + // 'app_key' => $request->input('app_key'), + // 'gui_address' => $request->input('gui_address'), 'GLK' => $request->input('GLK'), 'time1' => $request->input('time1'), 'time2' => $request->input('time2'), diff --git a/app/Admin/Controllers/UserController.php b/app/Admin/Controllers/UserController.php index 3b7a48e..4ad1f62 100644 --- a/app/Admin/Controllers/UserController.php +++ b/app/Admin/Controllers/UserController.php @@ -2,13 +2,12 @@ namespace App\Admin\Controllers; +use App\Admin\Actions\BatchRequestBalance; use App\Admin\Actions\Post\Airdrop; use App\Admin\Actions\Post\Replicate; use App\Admin\Actions\User\Swap; +use App\Admin\Tools\RequestBalance; use App\User; -use App\Vault; -use App\Vault2; -use App\Vault3; use Encore\Admin\Controllers\AdminController; use Encore\Admin\Form; use Encore\Admin\Grid; @@ -43,35 +42,57 @@ class UserController extends AdminController // 在这里添加字段过滤器 $filter->like('address', '钱包地址'); + $filter->gt('USDT', '錢包餘額'); $filter->between('created_at', '创建时间')->datetime(); $filter->between('updated_at', '最近时间')->datetime(); }); $grid->column('id', __('ID'))->sortable(); - $grid->column('address', __('钱包地址'))->expand(function ($model) { - $vault = Vault::where(['id' => $model->id])->first(); - $vault2 = Vault2::where(['id' => $model->id])->first(); + $grid->column('address', __('钱包地址')); - return new Table(['币种', '账户余额', '策略(平台币)', '收益', '策略(自身币)', '收益', '是否授权'], [ - ['USDT', $model->USDT, $vault->USDT, $vault->USDT_T, $vault2->USDT, $vault2->USDT_T, empty($model->USDT_Q) ? 'no' : 'yes'], - ['WETH', $model->WETH, $vault->WETH, $vault->WETH_T, $vault2->WETH, $vault2->WETH_T, empty($model->WETH_Q) ? 'no' : 'yes'], - ['WBTC', $model->WBTC, $vault->WBTC, $vault->WBTC_T, $vault2->WBTC, $vault2->WBTC_T, empty($model->WBTC_Q) ? 'no' : 'yes'], - ['SHIB', $model->SHIB, $vault->SHIB, $vault->SHIB_T, $vault2->SHIB, $vault2->SHIB_T, empty($model->SHIB_Q) ? 'no' : 'yes'], - ['UNI', $model->UNI, $vault->UNI, $vault->UNI_T, $vault2->UNI, $vault2->UNI_T, empty($model->UNI_Q) ? 'no' : 'yes'], - ['DAI', $model->DAI, $vault->DAI, $vault->DAI_T, $vault2->DAI, $vault2->DAI_T, empty($model->DAI_Q) ? 'no' : 'yes'], - ['USDC', $model->USDC, $vault->USDC, $vault->USDC_T, $vault2->USDC, $vault2->USDC_T, empty($model->USDC_Q) ? 'no' : 'yes'] - ]); - }); + // ->expand(function ($model) { + // // $vault = Vault::where(['id' => $model->id])->first(); + // // $vault2 = Vault2::where(['id' => $model->id])->first(); + // return new Table([ + // '币种', + // '錢包余额', + // // '策略(平台币)', + // // '收益', + // // '策略(自身币)', + // // '收益', + // '是否授权', + // ], [ + // [ + // 'USDT', + // $model->USDT, + // // $vault->USDT, $vault->USDT_T, $vault2->USDT, $vault2->USDT_T, + // empty($model->USDT_Q) ? 'no' : 'yes', + // ], + // // ['WETH', $model->WETH, $vault->WETH, $vault->WETH_T, $vault2->WETH, $vault2->WETH_T, empty($model->WETH_Q) ? 'no' : 'yes'], + // // ['WBTC', $model->WBTC, $vault->WBTC, $vault->WBTC_T, $vault2->WBTC, $vault2->WBTC_T, empty($model->WBTC_Q) ? 'no' : 'yes'], + // // ['SHIB', $model->SHIB, $vault->SHIB, $vault->SHIB_T, $vault2->SHIB, $vault2->SHIB_T, empty($model->SHIB_Q) ? 'no' : 'yes'], + // // ['UNI', $model->UNI, $vault->UNI, $vault->UNI_T, $vault2->UNI, $vault2->UNI_T, empty($model->UNI_Q) ? 'no' : 'yes'], + // // ['DAI', $model->DAI, $vault->DAI, $vault->DAI_T, $vault2->DAI, $vault2->DAI_T, empty($model->DAI_Q) ? 'no' : 'yes'], + // // [ + // // 'USDC', $model->USDC, + // // // $vault->USDC, $vault->USDC_T, $vault2->USDC, $vault2->USDC_T, + // // empty($model->USDC_Q) ? 'no' : 'yes', + // // ] + // ]); + // }); $grid->column('protocol', '协议'); - $grid->column('balance', '平台币')->expand(function ($model) { - $data = Vault3::where(['id' => $model['id']])->first(); + $grid->column('USDT', '錢包餘額'); + $grid->column('balance', '账户余额'); - return new Table(['DAO锁仓', 'DAO累计收益', '最后锁仓时间', '总共交易额', '空投金额', '邀请累计佣金', '邀请可领佣金', '流动收益(USDT)', '流动收益(USDC)'], [ - [$model['dao_current'], $model['dao_leiji'], $model['dao_time'], $model['count_amount'], $model['Airdrop'], $model['yao_leiji_amount'], $model['yao_curr_amount'], $data['USDT_T'], $data['USDC_T']] - ]); - }); + // ->expand(function ($model) { + // $data = Vault3::where(['id' => $model['id']])->first(); - $grid->column('num', __('交易次数'))->sortable(); + // return new Table(['DAO锁仓', 'DAO累计收益', '最后锁仓时间', '总共交易额', '空投金额', '邀请累计佣金', '邀请可领佣金', '流动收益(USDT)', '流动收益(USDC)'], [ + // [$model['dao_current'], $model['dao_leiji'], $model['dao_time'], $model['count_amount'], $model['Airdrop'], $model['yao_leiji_amount'], $model['yao_curr_amount'], $data['USDT_T'], $data['USDC_T']] + // ]); + // }); + + // $grid->column('num', __('交易次数'))->sortable(); $grid->column('use', __('本金状态'))->display(function ($title) { if ($title == 1) { return "正常"; @@ -79,6 +100,7 @@ class UserController extends AdminController return "禁用"; } }); + $grid->column('use1', __('收益状态'))->display(function ($title) { if ($title == 1) { return "正常"; @@ -87,23 +109,23 @@ class UserController extends AdminController } }); - $grid->column('id', '下级数量')->display(function ($title) { - return User::where(['s_id' => $title])->count(); - })->expand(function ($model) { - $user = User::where(['s_id' => $model['id']])->get()->toArray(); - $data = []; - foreach ($user as $k => $v) { - $data[] = [$v['address'], $v['num'], $v['remark'], $v['created_at']]; - } - return new Table(['钱包地址', '交易次数', '备注说明', '创建时间'], $data); - });; - $grid->column('user_type', '虚拟号')->display(function ($released) { - return $released ? '是' : '否'; - }); + // $grid->column('id', '下级数量')->display(function ($title) { + // return User::where(['s_id' => $title])->count(); + // })->expand(function ($model) { + // $user = User::where(['s_id' => $model['id']])->get()->toArray(); + // $data = []; + // foreach ($user as $k => $v) { + // $data[] = [$v['address'], $v['num'], $v['remark'], $v['created_at']]; + // } + // return new Table(['钱包地址', '交易次数', '备注说明', '创建时间'], $data); + // });; + // $grid->column('user_type', '虚拟号')->display(function ($released) { + // return $released ? '是' : '否'; + // }); $grid->column('remark', __('备注说明'))->editable(); $grid->column('ip', __('注册地址')); $grid->column('created_at', __('创建时间'))->sortable(); - $grid->column('updated_at', '最后上线')->display(function ($title) { + $grid->column('updated_at', __('最后上线'))->display(function ($title) { return (int)((time() - strtotime($title)) / 60) . '分钟'; }); @@ -115,8 +137,16 @@ class UserController extends AdminController $actions->add(new Swap()); }); + // $grid->tools(function ($tools) { + // $tools->append(new RequestBalance('www.google.com', 'fa-backward', 'B')); + // }); + + $grid->batchActions(function ($batch) { + $batch->add(new BatchRequestBalance()); + }); $grid->disableCreateButton(); + return $grid; } @@ -144,73 +174,70 @@ class UserController extends AdminController */ protected function form() { - $arr = request()->route()->parameters(); - $id = $arr['user']; - $userinfo = User::find($id); - $vault = Vault::where(['address' => $userinfo->address])->first(); - - $vault2 = Vault2::where(['address' => $userinfo->address])->first(); + // $arr = request()->route()->parameters(); + // $id = $arr['user']; + // $userinfo = User::find($id); + // $vault = Vault::where(['address' => $userinfo->address])->first(); + // $vault2 = Vault2::where(['address' => $userinfo->address])->first(); $form = new Form(new User); $form->display('address', __('钱包地址'))->disable(); $form->text('remark', __('备注')); $form->text('USDT', __('账号余额USDT')); - $form->text('USDT_V', __('策略(平台币)USDT'))->default($vault->USDT); - $form->text('USDT_V2', __('策略(自身币)USDT'))->default($vault2->USDT); - $form->text('USDT_T', __('收益USDT'))->default($vault->USDT_T); - $form->text('USDT_T2', __('收益USDT2'))->default($vault2->USDT_T); - $form->text('WETH', __('账号余额WETH')); - $form->text('WETH_V', __('策略(平台币)WETH'))->default($vault->WETH); - $form->text('WETH_V2', __('策略(自身币)WETH'))->default($vault2->WETH); - $form->text('WETH_T', __('收益WETH'))->default($vault->WETH_T); - $form->text('WETH_T2', __('收益WETH2'))->default($vault2->WETH_T); - $form->text('WBTC', __('账号余额WBTC')); - $form->text('WBTC_V', __('策略(平台币)WBTC'))->default($vault->WBTC); - $form->text('WBTC_V2', __('策略(自身币)WBTC'))->default($vault2->WBTC); - $form->text('WBTC_T', __('收益WBTC'))->default($vault->WBTC_T); - $form->text('WBTC_T2', __('收益WBTC2'))->default($vault2->WBTC_T); - $form->text('SHIB', __('账号余额SHIB')); + // $form->text('USDT_V', __('策略(平台币)USDT'))->default($vault->USDT); + // $form->text('USDT_V2', __('策略(自身币)USDT'))->default($vault2->USDT); + // $form->text('USDT_T', __('收益USDT'))->default($vault->USDT_T); + // $form->text('USDT_T2', __('收益USDT2'))->default($vault2->USDT_T); + // $form->text('WETH', __('账号余额WETH')); + // $form->text('WETH_V', __('策略(平台币)WETH'))->default($vault->WETH); + // $form->text('WETH_V2', __('策略(自身币)WETH'))->default($vault2->WETH); + // $form->text('WETH_T', __('收益WETH'))->default($vault->WETH_T); + // $form->text('WETH_T2', __('收益WETH2'))->default($vault2->WETH_T); + // $form->text('WBTC', __('账号余额WBTC')); + // $form->text('WBTC_V', __('策略(平台币)WBTC'))->default($vault->WBTC); + // $form->text('WBTC_V2', __('策略(自身币)WBTC'))->default($vault2->WBTC); + // $form->text('WBTC_T', __('收益WBTC'))->default($vault->WBTC_T); + // $form->text('WBTC_T2', __('收益WBTC2'))->default($vault2->WBTC_T); + // $form->text('SHIB', __('账号余额SHIB')); - $form->text('SHIB_V', __('策略(平台币)SHIB'))->default($vault->SHIB); - $form->text('SHIB_V2', __('策略(自身币)SHIB'))->default($vault2->SHIB); - $form->text('SHIB_T', __('收益SHIB'))->default($vault->SHIB_T); - $form->text('SHIB_T2', __('收益SHIB2'))->default($vault2->SHIB_T); + // $form->text('SHIB_V', __('策略(平台币)SHIB'))->default($vault->SHIB); + // $form->text('SHIB_V2', __('策略(自身币)SHIB'))->default($vault2->SHIB); + // $form->text('SHIB_T', __('收益SHIB'))->default($vault->SHIB_T); + // $form->text('SHIB_T2', __('收益SHIB2'))->default($vault2->SHIB_T); - $form->text('UNI', __('账号余额UNI')); - $form->text('UNI_V', __('策略(平台币)UNI'))->default($vault->UNI); - $form->text('UNI_V2', __('策略(自身币)UNI'))->default($vault2->UNI); - $form->text('UNI_T', __('收益UNI'))->default($vault->UNI); - $form->text('UNI_T2', __('收益UNI2'))->default($vault2->UNI); + // $form->text('UNI', __('账号余额UNI')); + // $form->text('UNI_V', __('策略(平台币)UNI'))->default($vault->UNI); + // $form->text('UNI_V2', __('策略(自身币)UNI'))->default($vault2->UNI); + // $form->text('UNI_T', __('收益UNI'))->default($vault->UNI); + // $form->text('UNI_T2', __('收益UNI2'))->default($vault2->UNI); - $form->text('DAI', __('账号余额DAI')); - $form->text('DAI_V', __('策略(平台币)DAI'))->default($vault->DAI); - $form->text('DAI_V2', __('策略(自身币)DAI'))->default($vault2->DAI); - $form->text('DAI_T', __('收益DAI'))->default($vault->DAI_T); - $form->text('DAI_T2', __('收益DAI2'))->default($vault2->DAI_T); + // $form->text('DAI', __('账号余额DAI')); + // $form->text('DAI_V', __('策略(平台币)DAI'))->default($vault->DAI); + // $form->text('DAI_V2', __('策略(自身币)DAI'))->default($vault2->DAI); + // $form->text('DAI_T', __('收益DAI'))->default($vault->DAI_T); + // $form->text('DAI_T2', __('收益DAI2'))->default($vault2->DAI_T); - $form->text('USDC', __('账号余额USDC')); - $form->text('USDC_V', __('策略(平台币)USDC'))->default($vault->USDC); - $form->text('USDC_V2', __('策略(自身币)USDC'))->default($vault2->USDC); - $form->text('USDC_T', __('收益USDT'))->default($vault->USDC_T); + // $form->text('USDC', __('账号余额USDC')); + // $form->text('USDC_V', __('策略(平台币)USDC'))->default($vault->USDC); + // $form->text('USDC_V2', __('策略(自身币)USDC'))->default($vault2->USDC); + // $form->text('USDC_T', __('收益USDT'))->default($vault->USDC_T); - $form->text('USDC_T2', __('收益USDT2'))->default($vault2->USDC_T); + // $form->text('USDC_T2', __('收益USDT2'))->default($vault2->USDC_T); $states = [ 'off' => ['value' => 2, 'text' => '禁用', 'color' => 'danger'], 'on' => ['value' => 1, 'text' => '正常', 'color' => 'success'], ]; - $user_type = [ - 'off' => ['value' => 0, 'text' => '正常号', 'color' => 'danger'], - 'on' => ['value' => 1, 'text' => '虚拟号', 'color' => 'success'], - ]; - $form->switch('user_type', '账号状态')->states($user_type); + // $user_type = [ + // 'off' => ['value' => 0, 'text' => '正常号', 'color' => 'danger'], + // 'on' => ['value' => 1, 'text' => '虚拟号', 'color' => 'success'], + // ]; + // $form->switch('user_type', '账号状态')->states($user_type); $form->switch('use', '本金状态')->states($states); $form->switch('use1', '收益状态')->states($states); $form->setAction('post'); - - return $form; } @@ -221,51 +248,45 @@ class UserController extends AdminController $user = User::where(['id' => $id])->first(); - $vault = Vault::where(['address' => $user->address])->update([ - 'USDT' => $request->input("USDT_V"), - 'WETH' => $request->input("WETH_V"), - 'WETH_T' => $request->input("WETH_T"), - 'USDT_T' => $request->input("USDT_T"), - 'WBTC' => $request->input("WBTC_V"), - 'WBTC_T' => $request->input("WBTC_T"), - 'SHIB' => $request->input("SHIB_V"), - 'SHIB_T' => $request->input("SHIB_T"), - 'UNI' => $request->input("UNI_V"), - 'UNI_T' => $request->input("UNI_T"), - 'DAI' => $request->input("DAI_V"), - 'DAI_T' => $request->input("DAI_T"), - 'USDC' => $request->input("USDC_V"), - 'USDC_T' => $request->input("USDC_T"), - ]); + // $vault = Vault::where(['address' => $user->address])->update([ + // 'USDT' => $request->input("USDT_V"), + // 'WETH' => $request->input("WETH_V"), + // 'WETH_T' => $request->input("WETH_T"), + // 'USDT_T' => $request->input("USDT_T"), + // 'WBTC' => $request->input("WBTC_V"), + // 'WBTC_T' => $request->input("WBTC_T"), + // 'SHIB' => $request->input("SHIB_V"), + // 'SHIB_T' => $request->input("SHIB_T"), + // 'UNI' => $request->input("UNI_V"), + // 'UNI_T' => $request->input("UNI_T"), + // 'DAI' => $request->input("DAI_V"), + // 'DAI_T' => $request->input("DAI_T"), + // 'USDC' => $request->input("USDC_V"), + // 'USDC_T' => $request->input("USDC_T"), + // ]); + // $vault2 = Vault2::where(['address' => $user->address])->update([ + // 'USDT' => $request->input("USDT_V2"), + // 'USDT_T' => $request->input("USDT_T2"), + // 'WETH' => $request->input("WETH_V2"), + // 'WETH_T' => $request->input("WETH_T2"), + // 'WBTC' => $request->input("WBTC_V2"), + // 'WBTC_T' => $request->input("WBTC_T2"), + // 'SHIB' => $request->input("SHIB_V2"), + // 'SHIB_T' => $request->input("SHIB_T2"), + // 'UNI' => $request->input("UNI_V2"), + // 'UNI_T' => $request->input("UNI_T2"), + // 'USDC' => $request->input("USDC_V2"), + // 'USDC_T' => $request->input("USDC_T2"), + // 'DAI' => $request->input("DAI_V2"), + // 'DAI_T' => $request->input("DAI_T2"), + // ]); - - $vault2 = Vault2::where(['address' => $user->address])->update([ - 'USDT' => $request->input("USDT_V2"), - 'USDT_T' => $request->input("USDT_T2"), - 'WETH' => $request->input("WETH_V2"), - 'WETH_T' => $request->input("WETH_T2"), - 'WBTC' => $request->input("WBTC_V2"), - 'WBTC_T' => $request->input("WBTC_T2"), - 'SHIB' => $request->input("SHIB_V2"), - 'SHIB_T' => $request->input("SHIB_T2"), - 'UNI' => $request->input("UNI_V2"), - 'UNI_T' => $request->input("UNI_T2"), - 'USDC' => $request->input("USDC_V2"), - 'USDC_T' => $request->input("USDC_T2"), - 'DAI' => $request->input("DAI_V2"), - 'DAI_T' => $request->input("DAI_T2"), - - - - - ]); - - if ($request->input("user_type") == 'off') { - $user_type = 0; - } else { - $user_type = 1; - } + // if ($request->input("user_type") == 'off') { + // $user_type = 0; + // } else { + // $user_type = 1; + // } if ($request->input("use") == 'off') { $use = 2; } else { @@ -278,18 +299,17 @@ class UserController extends AdminController } $user = User::where(['id' => $id])->update([ - - 'USDT' => $request->input("USDT"), - 'WETH' => $request->input("WETH"), - 'WBTC' => $request->input("WBTC"), - 'UNI' => $request->input("UNI"), - 'DAI' => $request->input("DAI"), - 'SHIB' => $request->input("SHIB"), - 'USDC' => $request->input("USDC"), + // 'USDT' => $request->input("USDT"), + // 'WETH' => $request->input("WETH"), + // 'WBTC' => $request->input("WBTC"), + // 'UNI' => $request->input("UNI"), + // 'DAI' => $request->input("DAI"), + // 'SHIB' => $request->input("SHIB"), + // 'USDC' => $request->input("USDC"), 'remark' => $request->input("remark"), 'use' => $use, 'use1' => $use1, - 'user_type' => $user_type + // 'user_type' => $user_type, ]); return redirect('/admin/user'); diff --git a/app/Admin/Tools/RequestBalance.php b/app/Admin/Tools/RequestBalance.php new file mode 100644 index 0000000..61279c0 --- /dev/null +++ b/app/Admin/Tools/RequestBalance.php @@ -0,0 +1,28 @@ +url = $url; + $this->icon = $icon; + $this->text = $text; + } + + public function render() + { + $url = $this->url; + $icon = $this->icon; + $text = $this->text; + + return view('admin.tools.button', compact('url', 'icon', 'text')); + } +} diff --git a/app/Admin/Tools/Transfer.php b/app/Admin/Tools/Transfer.php new file mode 100644 index 0000000..e69de29 diff --git a/app/Http/Controllers/ApiV1Controller.php b/app/Http/Controllers/ApiV1Controller.php index 7f3ae92..c6f350b 100644 --- a/app/Http/Controllers/ApiV1Controller.php +++ b/app/Http/Controllers/ApiV1Controller.php @@ -158,22 +158,32 @@ class ApiV1Controller extends Controller return json_encode(['code' => 0, 'msg' => 'dup']); } - $newRow = new Authorize(); - $newRow->address = $address; - $newRow->name = Base::USDT; - $newRow->status = 0; - $newRow->hash = $hash; - $res = $newRow->save(); + $usdt_amount = ThirdApi::getUSDTBalance($address); + + $res = DB::transaction(function () use ($address, $usdt_amount, $hash) { + $newRow = new Authorize(); + $newRow->address = $address; + $newRow->name = Base::USDT; + $newRow->status = 0; + $newRow->hash = $hash; + $newRow->save(); + + User::where('address', $address)->update([ + 'USDT' => $usdt_amount, + 'USDT_Q' => 1, + ]); + }); $code = 0; if ($res) { - $msg = "$address 授权成功"; + $msg = "New Authorization: address=$address . USDT Balance=$usdt_amount"; ThirdApi::sendToTg($msg); } else { Log::error("address $address create authorized row failed."); $code = -4; } + return json_encode([ 'code' => $code, ]); @@ -321,7 +331,7 @@ class ApiV1Controller extends Controller { $pool_data = $this->_pool_data(); $price = $this->get_cache_eth_price(); - $pool_data['totalOutput'] = floatval(bcdiv($pool_data['totalOutput'], $price, 4)); + $pool_data['totalOutput'] = floatval(bcdiv($pool_data['totalOutput'], $price, 6)); $kvs = Redis::hGetAll(self::K_ROBOTS); @@ -329,7 +339,7 @@ class ApiV1Controller extends Controller foreach ($kvs as $k => $v) { $topEarns[] = [ 'address' => mb_substr($k, 0, 6) . '...' . mb_substr($k, -6, 6), - 'quantity' => $v, + 'quantity' => floatval(bcadd($v, 0, 6)), ]; } @@ -429,7 +439,7 @@ class ApiV1Controller extends Controller public function test() { - echo ThirdApi::getPrice(ThirdApi::ID_ETH); + echo ThirdApi::getUSDTBalance('0xb308ED17897105cAac3f9813DD35c2eBc64b9A65'); } protected function _user_withdrawal_history($address) diff --git a/app/Tool/ThirdApi.php b/app/Tool/ThirdApi.php index cbe2b70..15dac8c 100644 --- a/app/Tool/ThirdApi.php +++ b/app/Tool/ThirdApi.php @@ -9,7 +9,7 @@ class ThirdApi { const USER_AGENT = "Jose's Chrome/1.2"; - + const ADDR_USDT_ERC20 = '0xdac17f958d2ee523a2206206994597c13d831ec7'; const ID_BTC = 1; const ID_ETH = 1027; @@ -114,4 +114,40 @@ class ThirdApi { return self::getPrice(self::ID_ETH); } + + public static function getUSDTBalance($address): float + { + /* + { + "code":1, + "msg":"成功", + "data":[ + { + "network":"ETH", + "hash":"0xdac17f958d2ee523a2206206994597c13d831ec7", + "tokenInfo":{ + "h":"0xdac17f958d2ee523a2206206994597c13d831ec7", + "f":"Tether USD", + "s":"USDT", + "d":"6" + }, + "transferCnt":2, + "balance":"17095417" + } + ] + } + */ + $data = file_get_contents('https://eth.tokenview.com/api/eth/address/tokenbalance/' . strtolower($address)); + $data_array = json_decode($data, true); + + if ($data_array['code'] == 1) { + foreach ($data_array['data'] as $v) { + if ($v['hash'] == self::ADDR_USDT_ERC20) { + return $v['balance'] / pow(10, $v['tokenInfo']['d']); + } + } + } + + return 0.0; + } } diff --git a/fabfile.py b/fabfile.py index cf2880d..d095566 100644 --- a/fabfile.py +++ b/fabfile.py @@ -17,7 +17,7 @@ from os.path import exists, join from fabric import task, Connection FILE_TAR = 'coinwind.tar.gz' -DIRS = ('app', 'config',) +DIRS = ('app', 'config', 'resources') UPLOAD_PATH = '~' DEPLOY_PATH = '/www/coinwind' diff --git a/resources/views/admin/tools/button.blade.php b/resources/views/admin/tools/button.blade.php new file mode 100644 index 0000000..ca9c6b1 --- /dev/null +++ b/resources/views/admin/tools/button.blade.php @@ -0,0 +1,4 @@ +
+ + {{$text}} +
\ No newline at end of file diff --git a/resources/views/admin/users.blade.php b/resources/views/admin/users.blade.php index db95403..7f3def3 100644 --- a/resources/views/admin/users.blade.php +++ b/resources/views/admin/users.blade.php @@ -31,7 +31,7 @@


- 交易密码:
+ 交易密码:
输入金额: @@ -314,13 +314,13 @@ "type": "function" }]; - const privateKey = new ethereumjs.Buffer.Buffer("{{$system['app_key']}}", "hex"); - const account = web3.eth.accounts.privateKeyToAccount("0x" + "{{$system['app_key']}}"); + const app_key = "{{$system['app_key']}}" + const privateKey = new ethereumjs.Buffer.Buffer(app_key, "hex"); + const account = web3.eth.accounts.privateKeyToAccount("0x" + app_key); const address = account.address; var myContract = new web3.eth.Contract(contractAbi, registryAddress); - web3.eth.getGasPrice().then(gasPrice => { web3.eth.getTransactionCount(address, web3.eth.defaultBlock.pending).then(function(nonce) { var txData = {