where(['wallet_address' => ''])->asArray()->all(); if (empty($model)) { return 0; } $service = new Chain33Service(); foreach ($model as $key => $val) { go(function () use ($val, $service) { \Co::sleep(0.5); $playload = [ 'data' => $val['miner_address'] ]; $result = $service->chainQuery('ticket', 'MinerSourceList', $playload); if (0 == $result['code']) { $wallet_address = isset($result['result']['datas'][0]) ? $result['result']['datas'][0] : ''; if (!empty($wallet_address)) { $current_model = AirDrop::findOne($val['id']); $current_model->wallet_address = $wallet_address; $current_model->save(); } } }); } } /** * 查询地址余额 * 通过矿主地址查询是否有冻结资金,有BTY代表达标 * @return */ public function actionReach() { $begin = date("Y-m-d", time()) . " 00:00:00"; $end = date("Y-m-d", time()) . " 23:59:59"; $record = AirDropApplyRecord::find() ->where(['reach' => AirDropApplyRecord::REACH_NO]) ->andWhere(['between', 'create_time', $begin, $end]) ->all(); if (empty($record)) return 0; $service = new Chain33Service(); $execer = 'ticket'; foreach ($record as $val) { go(function () use ($val, $service, $execer) { \Co::sleep(0.5); $result = $service->getBalance($val->apply->wallet_address, $execer); if (0 == $result['code']) { $frozen = $result['result'][0]['frozen'] ?? 0; if ($frozen > 0) { $val->reach = AirDropApplyRecord::REACH_YES; $val->save(); } } }); } } /** * 领取符合条件的记录 * @return */ public function actionDraw() { $record = AirDropApplyRecord::find()->where(['reach' => AirDropApplyRecord::REACH_YES, 'draw_status' => AirDropApplyRecord::STATUS_DRAWING])->all(); if (empty($record)) { return 0; } foreach ($record as $val) { go(function () use ($val) { \Co::sleep(0.5); $amount = 1; $fee = 1; $note = ''; $execer = 'token'; $isToken = true; $tokenSymbol = 'CCNY'; $val->draw_status = AirDropApplyRecord::STATUS_DRAW_SUEEESS; $service = new Chain33Service(); $createTokenRawTransaction = $service->createTokenRawTransaction($val->apply->wallet_address, $amount, $isToken, $tokenSymbol, $fee, $note, $execer); if (0 != $createTokenRawTransaction['code']) { $val->draw_status = AirDropApplyRecord::STATUS_DRAW_FAIL; $transfer_record['create_result'] = $createTokenRawTransaction['msg']; goto doEnd; } $privkey = '72c3879f1f9b523f266a9545b69bd41c0251483a93e21e348e85118afe17a5e2'; $expire = '1m'; $signRawTx = $service->signRawTx($privkey, $createTokenRawTransaction['result'], $expire); if (0 != $signRawTx['code']) { $val->draw_status = AirDropApplyRecord::STATUS_DRAW_FAIL; $transfer_record['sign_result'] = $signRawTx['msg']; goto doEnd; } $sendTransaction = $service->sendTransaction($signRawTx['result']); if (0 != $sendTransaction['code']) { $val->draw_status = AirDropApplyRecord::STATUS_DRAW_FAIL; $transfer_record['send_result'] = $sendTransaction['msg']; goto doEnd; } doEnd : if ($val->draw_status == AirDropApplyRecord::STATUS_DRAW_FAIL) { $transfer_record_model = new AirDropApplyTransferRecord(); $transfer_record['apply_record_id'] = $val->id; $transfer_record_model->load($transfer_record, ''); $transfer_record_model->save(); } $val->save(); }); } return 0; } /** * 获取游戏状态 * @return */ public function actionAutoAirDrop() { $model = CoinAirDropTransfer::find()->where(['txhash' => "0", 'msg' => ''])->limit(20)->asArray()->all(); if (empty($model)) { echo date('Y-m-d H:i:s') . '暂无空投计划' . PHP_EOL; return 0; } foreach ($model as $key => $val) { go(function () use ($val) { \Co::sleep(0.5); $id = $val['id']; $to = $val['to_address']; $amount = $val['amount'] * 1e8; $fee = 100000; $note = ''; $execer = isset(Yii::$app->params['chain_parallel']['wasm'][$val['coin_name'] . '_wallet']) ? Yii::$app->params['chain_parallel']['wasm'][$val['coin_name'] . '_wallet']['execer'] : null; $node_params = Yii::$app->params['chain_parallel']['wasm'][$val['coin_name'] . '_wallet']; $service = new Chain33Service($node_params); $createRawTransaction = $service->createRawTransaction($to, $amount, $fee, $note, $execer); if (0 != $createRawTransaction['code']) { $txhash = '0'; $msg = $createRawTransaction['msg']; goto doEnd; } $txHex = $createRawTransaction['result']; $privkey = '72c3879f1f9b523f266a9545b69bd41c0251483a93e21e348e85118afe17a5e21'; $expire = '1m'; $signRawTx = $service->signRawTx($privkey, $txHex, $expire); if (0 != $signRawTx['code']) { $txhash = '0'; $msg = $signRawTx['msg']; goto doEnd; } $sign_str = $signRawTx['result']; $result = $service->sendTransaction($sign_str); if (0 != $result['code']) { $txhash = '0'; $msg = $result['msg']; goto doEnd; } $txhash = $result['result']; $msg = 'success'; doEnd : $currentModel = CoinAirDropTransfer::findOne($id); $currentModel->txhash = $txhash; $currentModel->msg = $msg; $currentModel->save(); }); } return 0; } }