<?php namespace api\controllers; use api\base\BaseController; use common\models\psources\CoinAirDropTrade; use common\service\chain33\Chain33Service; use Yii; class AirDropController extends BaseController { public function actionGameTrade() { $coins_address = Yii::$app->request->post('coins_address', ''); if(empty($coins_address)){ return ['code' => -1, 'msg' => '参数不能为空']; } $coinTokenTransfer = CoinAirDropTrade::find()->where(['coins_address' => $coins_address, 'type' => CoinAirDropTrade::TYPE_GAME])->one(); if($coinTokenTransfer){ return ['code' => -1, 'data' => null, 'msg' => 'record already exists']; } $fee = 100000; $amount = CoinAirDropTrade::AMOUNT_GAME * 1e8; $execer = 'coins'; $note = ''; $service = new Chain33Service(); $createRawTransaction = $service->createRawTransaction($coins_address, $amount, $fee, $note, $execer); if(0 != $createRawTransaction['code']){ $msg = $createRawTransaction['msg']; $code = -1; goto doEnd; } $txHex = $createRawTransaction['result']; $privkey = '72c3879f1f9b523f266a9545b69bd41c0251483a93e21e348e85118afe17a5e2'; $expire = '1m'; $signRawTx = $service->signRawTx($privkey, $txHex, $expire); if(0 != $signRawTx['code']){ $msg = $signRawTx['msg']; $code = -1; goto doEnd; } $sign_str = $signRawTx['result']; $result = $service->sendTransaction($sign_str); if(0 != $result['code']){ $msg = $result['msg']; $code = -1; goto doEnd; } $code = 1; $msg = $result['result']; doEnd : $airDropModel = new CoinAirDropTrade(); $airDropModel->coins_address = $coins_address; $airDropModel->amount = CoinAirDropTrade::AMOUNT_GAME; $airDropModel->msg = $msg; $airDropModel->attach = 0; $airDropModel->balance = 0; $airDropModel->type = CoinAirDropTrade::TYPE_GAME; $airDropModel->save(); return ['code' => $code, 'msg' => $msg]; } public function actionGameTradeUpdate() { $coinAirDropTrade = CoinAirDropTrade::find()->where(['attach' => 2 ,'msg' => '0'])->limit(30)->all(); foreach ($coinAirDropTrade as $val){ $fee = 100000; $amount = 1 * 1e8; $execer = 'coins'; $note = ''; $service = new Chain33Service(); $createRawTransaction = $service->createRawTransaction($val->coins_address, $amount, $fee, $note, $execer); if(0 != $createRawTransaction['code']){ continue; } $txHex = $createRawTransaction['result']; $privkey = '72c3879f1f9b523f266a9545b69bd41c0251483a93e21e348e85118afe17a5e2'; $expire = '1m'; $signRawTx = $service->signRawTx($privkey, $txHex, $expire); if(0 != $signRawTx['code']){ continue; } $sign_str = $signRawTx['result']; $result = $service->sendTransaction($sign_str); if(0 != $result['code']){ continue; } $currentModel = CoinAirDropTrade::findOne($val->id); $currentModel->attach = 2; $currentModel->balance = 0; $currentModel->msg = $result['result']; $currentModel->save(); } return ['code' => 1, 'msg' => 'ok']; } public function actionGetBalance() { $coinAirDropTrade = CoinAirDropTrade::find()->where(['balance' => 0])->limit(60)->all(); $address = []; foreach ($coinAirDropTrade as $val){ $address[] = $val->coins_address; } $service = new Chain33Service(); $execer = 'coins'; $result = $service->getBalance($address, $execer); if(0 == $result['code']){ $result_balance = $result['result']; foreach ($result_balance as $val){ $coinAirDropTrade = CoinAirDropTrade::find()->where(['coins_address' => $val['addr']])->one(); if(empty($coinAirDropTrade)) continue; $coinAirDropTrade->balance = $val['balance']; $coinAirDropTrade->save(); } } return ['code' => 1, 'msg' => 'ok']; } }