AirDropController.php 2.17 KB
<?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->type = CoinAirDropTrade::TYPE_GAME;
        $airDropModel->save();

        return ['code' => $code, 'msg' => $msg];
    }
}