AirDropController.php 2.65 KB
<?php

namespace console\controllers;

use Yii;
use yii\console\Controller;
use common\service\chain33\Chain33Service;
use common\models\psources\CoinAirDropTransfer;

class AirDropController extends Controller
{
    /**
     * 获取游戏状态
     *
     * @return array
     */
    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;
    }
}