Commit f5f24cf7 authored by shajiaiming's avatar shajiaiming

fix

parent c5a9ccb8
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
namespace console\controllers; namespace console\controllers;
use common\models\psources\CoinIssueRevokeRecord; use common\models\psources\CoinIssueRevokeRecord;
use common\models\psources\CoinPlatformWithHold;
use Yii; use Yii;
use yii\console\Controller; use yii\console\Controller;
use yii\helpers\ArrayHelper; use yii\helpers\ArrayHelper;
...@@ -63,9 +64,11 @@ class IssueChainTransferController extends Controller ...@@ -63,9 +64,11 @@ class IssueChainTransferController extends Controller
return 0; return 0;
} }
$node = Yii::$app->params['chain_nodes']['STO'];
$chain_service = new Chain33Service($node);
foreach ($model as $val) { foreach ($model as $val) {
$platform = CoinPlatformWithHold::find()->select('platform')->where(['id' => $val->coin->chain_id])->one();
$node = Yii::$app->params['chain_nodes'][strtoupper($platform->platform)];
$chain_service = new Chain33Service($node);
//执行1.2构造 //执行1.2构造
$result = $chain_service->createRawTokenFinishTx($val->coin->symbol, $val->coin->owner); $result = $chain_service->createRawTokenFinishTx($val->coin->symbol, $val->coin->owner);
if (null != $result['error']) { if (null != $result['error']) {
...@@ -79,7 +82,6 @@ class IssueChainTransferController extends Controller ...@@ -79,7 +82,6 @@ class IssueChainTransferController extends Controller
$txHex = $result['result']; $txHex = $result['result'];
$privkey = '8ac19c0b8858ccd6ed34e2bce0f11be2fc696e658d0b98fb1d3ef85ec5a3992c'; $privkey = '8ac19c0b8858ccd6ed34e2bce0f11be2fc696e658d0b98fb1d3ef85ec5a3992c';
#$privkey = $val->coin->chain->private_key;
$expire = '1m'; $expire = '1m';
//执行1.2签名 //执行1.2签名
$signRawTx = $chain_service->signRawTx($privkey, $txHex, $expire); $signRawTx = $chain_service->signRawTx($privkey, $txHex, $expire);
...@@ -141,10 +143,11 @@ class IssueChainTransferController extends Controller ...@@ -141,10 +143,11 @@ class IssueChainTransferController extends Controller
return 0; return 0;
} }
$node = Yii::$app->params['chain_nodes']['STO'];
$service = new Chain33Service($node);
$current_time = time(); $current_time = time();
foreach ($model as $val) { foreach ($model as $val) {
$platform = CoinPlatformWithHold::find()->select('platform')->where(['id' => $val->coin->chain_id])->one();
$node = Yii::$app->params['chain_nodes'][strtoupper($platform->platform)];
if (1 == $step) { if (1 == $step) {
$result = $this->queryTransaction($node, $val->pre_send_transaction); $result = $this->queryTransaction($node, $val->pre_send_transaction);
#$result = $service->QueryTransaction($val->pre_send_transaction); #$result = $service->QueryTransaction($val->pre_send_transaction);
......
<?php
namespace console\controllers;
use common\models\psources\Coin;
use common\models\psources\CoinIssueCoin;
use common\models\psources\CoinIssueRecord;
use common\models\psources\CoinIssueTransfer;
use common\service\chain33\Chain33Service;
use Yii;
use yii\console\Controller;
use yii\helpers\ArrayHelper;
class IssueCoinController extends Controller
{
/**
* 手续费划转
* @return
*/
public function actionPayCharge()
{
$issue_coin_model = CoinIssueCoin::find()
->select('id')->where(['charge_pay' => CoinIssueCoin::ALLOW_PAY])->asArray()->all();
if (false == $issue_coin_model) {
echo date('Y-m-d H:i:s') . '暂无手续费划转任务' . PHP_EOL;
return 0;
}
$issue_transfer = CoinIssueTransfer::find()
->where(['unissue' => 1])
->andWhere(['in', 'issue_coin_id', ArrayHelper::getColumn($issue_coin_model, 'id')])
->asArray()
->all();
if (false == $issue_transfer) {
echo date('Y-m-d H:i:s') . '暂无手续费划转任务' . PHP_EOL;
return 0;
}
$node = Yii::$app->params['chain_nodes']['STO'];
$service = new Chain33Service($node);
foreach ($issue_transfer as $val) {
$result = $service->sendTransaction($val['txhex']);
if (0 == $result['code']) {
$send_result = $result['result'];
$currentModel = CoinIssueTransfer::findOne($val['id']);
$currentModel->send_result = $send_result;
$currentModel->msg = 0;
$currentModel->save();
} else {
$currentModel = CoinIssueTransfer::findOne($val['id']);
$currentModel->msg = $result['msg'];
$currentModel->save();
}
}
echo date('Y-m-d H:i:s') . '手续费划转任务完成' . PHP_EOL;
return 0;
}
/**
* 手续费划转状态确认
* @return
*/
public function actionPayChargeStatus()
{
$unissue = -1;
$model = CoinIssueTransfer::find()->where(['<>', 'send_result', '0'])->andWhere(['msg' => '0'])->asArray()->all();
if (empty($model)) {
echo date('Y-m-d H:i:s') . '暂无需要确认的手续费划转状态' . PHP_EOL;
return 0;
}
$node = \Yii::$app->params['chain_parallel']['primary'];
$service = new Chain33Service($node);
foreach ($model as $val) {
$send_result = $val['send_result'];
$result = $service->QueryTransaction($send_result);
if (isset($result['result']['actionName']) && 'unknown' == $result['result']['actionName']) {
$query_result = 'success';
$msg = 'success';
goto doEnd;
} else if (isset($result['result']['receipt']['ty']) && 2 == $result['result']['receipt']['ty']) {
$query_result = 'success';
$msg = 'success';
goto doEnd;
} else {
if (isset($result['result']['receipt']['logs'])) {
foreach ($result['result']['receipt']['logs'] as $log) {
if (isset($log['tyName']) && 'LogErr' == $log['tyName']) {
$msg = $log['tyName'];
break;
}
}
} else {
$msg = $result['msg'];
}
$query_result = $result['code'];
goto doEnd;
}
doEnd :
if ('success' == $msg) {
$unissue = 0;
$coin_issue_coin = CoinIssueCoin::find()->where(['id' => $val['issue_coin_id']])->one();
$coin_issue_coin->charge_pay = CoinIssueCoin::SUCCESS_PAY;
$coin_issue_coin->save();
}
$currentModel = CoinIssueTransfer::findOne($val['id']);
$currentModel->query_result = $query_result;
if ($unissue > -1) {
$currentModel->unissue = $unissue;
}
$currentModel->msg = $msg;
$currentModel->save();
}
}
/**
* 自动发币
* @param $type 0 未开启人工 1 已开启人工
* @return
*/
public function actionAutoTransfer()
{
$issue_coin_model = CoinIssueCoin::find()
->select('id, step_one_tx')
->where(['step_one_result' => 0])
->andWhere(['<>', 'step_one_tx', ''])
->asArray()
->all();
if (false == $issue_coin_model) {
echo date('Y-m-d H:i:s') . '暂无1.1执行任务' . PHP_EOL;
return 0;
}
$node = Yii::$app->params['chain_nodes']['STO'];
$service = new Chain33Service($node);
foreach ($issue_coin_model as $val) {
go(function () use ($val, $service) {
\Co::sleep(0.5);
$result = $service->sendTransaction($val['step_one_tx']);
$send_result = $result['result'];
$currentModel = CoinIssueCoin::findOne($val['id']);
$currentModel->step_one_result = $send_result;
$currentModel->save();
});
}
echo date('Y-m-d H:i:s') . '1.1 交易完成' . PHP_EOL;
return 0;
}
/**
* 自动发币
* @param $type 0 未开启人工 1 已开启人工
* @return
*/
public function actionAutoIssue($type)
{
if (0 == $type) {
$status = CoinIssueCoin::UN_AUDIT;
$manual_review = Yii::$app->redis->get('issue_chain_manual_review');
if ('close' == $manual_review) {
return 0;
}
}
if (1 == $type) {
$status = CoinIssueCoin::ALLOW_ISSUE;
}
$issue_coin_model = CoinIssueCoin::find()
->select('id, name, platform_id, chain_id, symbol, introduction, total, category, owner')
->where(['status' => $status])
->andWhere(['<>', 'step_one_result', 0])
->all();
if (false == $issue_coin_model) {
echo date('Y-m-d H:i:s') . '暂无发行任务' . PHP_EOL;
return 0;
}
$node = Yii::$app->params['chain_nodes']['STO'];
$chain_service = new Chain33Service($node);
foreach ($issue_coin_model as $issue_coin) {
//执行1.2构造
$result = $chain_service->createRawTokenFinishTx($issue_coin->symbol, $issue_coin->owner);
if (null != $result['error']) {
$data = [
'status' => CoinIssueCoin::FAIL_ISSUE,
'msg' => $result['msg']
];
goto doEnd;
}
$txHex = $result['result'];
#$privkey = '72c3879f1f9b523f266a9545b69bd41c0251483a93e21e348e85118afe17a5e21';
$privkey = $issue_coin->chain->private_key;
$expire = '1m';
//执行1.2签名
$signRawTx = $chain_service->signRawTx($privkey, $txHex, $expire);
if (0 != $signRawTx['code']) {
$data = [
'status' => CoinIssueCoin::FAIL_ISSUE,
'msg' => $result['msg']
];
goto doEnd;
}
//执行1.2交易
$result = $chain_service->sendTransaction($signRawTx['result']);
if (0 != $result['code']) {
$data = [
'status' => CoinIssueCoin::FAIL_ISSUE,
'msg' => $result['msg']
];
goto doEnd;
}
$data = [
'msg' => $result['result'],
'status' => CoinIssueCoin::SUCCESS_ISSUE,
'charge_pay' => CoinIssueCoin::ALLOW_PAY
];
$params['platform_id'] = $issue_coin->platform_id;
$params['platform'] = $issue_coin->chain->platform;
$this->syncRecord($params);
$this->syncCoin($params);
doEnd :
CoinIssueCoin::updateAll($data, [
'id' => $issue_coin->id,
]);
}
echo date('Y-m-d H:i:s') . '发行成功' . PHP_EOL;
return 0;
$params = [
'name' => $issue_coin->name,
'symbol' => $issue_coin->symbol,
'introduction' => $issue_coin->introduction,
'total' => (int)$issue_coin->total,
'price' => isset($issue_coin->platform->issue_charge) ? (int)$issue_coin->platform->issue_charge : 0,
'category' => (int)$issue_coin->category,
'owner' => $issue_coin->owner
];
$result = $chain_service->createRawTokenPreCreateTx($params);
if (null == $result['error'] && false == $result['code']) {
$data = [
'msg' => $result['result'],
'status' => CoinIssueCoin::SUCCESS_ISSUE,
'charge_pay' => CoinIssueCoin::ALLOW_PAY
];
$params['platform_id'] = $issue_coin->platform_id;
$params['platform'] = $issue_coin->chain->platform;
#$this->syncTransfer($issue_transfer['id']);
$this->syncRecord($params);
$this->syncCoin($params);
} else {
$data = [
'status' => CoinIssueCoin::FAIL_ISSUE,
];
}
if ($data['status'] > CoinIssueCoin::REFUSE_ISSUE) {
CoinIssueCoin::updateAll($data, [
'id' => $issue_coin->id,
]);
}
}
public function syncCoin($params = [])
{
$model_coin = Coin::find()->where(['name' => $params['name'], 'platform' => $params['platform']])->one();
if (false == $model_coin) {
$model = new Coin();
$model->name = $params['symbol'];
$model->sid = $params['name'];
$model->platform = $params['platform'];
$model->chain = 'BTY';
$model->treaty = 1;
$model->save();
}
}
public function syncRecord($params = [])
{
$coin_issue_record = new CoinIssueRecord();
$coin_issue_record->platform_id = $params['platform_id'];
$coin_issue_record->total = $params['total'];
$coin_issue_record->save();
}
public function syncTransfer($id)
{
$issue_transfer = CoinIssueTransfer::find()->where(['id' => $id])->one();
$issue_transfer->unissue = 0;
$issue_transfer->save();
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment