1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
<?php
/**
* Created by PhpStorm.
* User: ZCY
* Date: 2018/10/8
* Time: 11:00
*/
namespace console\controllers;
use common\business\Chain33Business;
use common\business\LotteryBusiness;
use common\models\psources\CoinLottery;
use yii\console\Controller;
use Yii;
class LotteryController extends Controller
{
/**
* 交易并开奖
*/
public function actionTradeAndLottery()
{
echo date('Y-m-d H:i:s').': '.'每天10点彩票活动准时和大家见面'.PHP_EOL;
$lottery_config = Yii::$app->params['lottery'];
//获取最新的区块高度
while(true){
try{
$last_header = Chain33Business::getLastHeader();
if ($last_header['code'] != 0) {
echo '获取区块高度失败: ' . $last_header['msg'].PHP_EOL;
sleep(2);
continue;
}
$last_header = $last_header['result'];
//获取最新竞猜期数以及区块高度
$last = CoinLottery::getMaxStage();
if($last && $last->stage == $lottery_config['period_num'] && $last->status == 1){ //达到40期并且开完奖
echo date('Y-m-d H:i:s').': '.'今天彩票期数已达到40期,下期明天10点不见不散'.PHP_EOL;
exit;
}
if ($last) {
$start_height = $last->start_height;
$end_height = $start_height + $lottery_config['period_total_step']; //某一期结束区块高度
if($last->status == 0){ //未开奖
if($last_header['height'] < $end_height){ //未到开奖区块高度
sleep(2);
continue;
}
if($last_header['height'] >= $end_height){
/*****************************开奖************************************/
echo date('Y-m-d H:i:s').': '.'开奖高度: '.$last_header['height'].PHP_EOL;
$lottery_result = LotteryBusiness::lottery();
echo date('Y-m-d H:i:s').': '.'开奖成功'.PHP_EOL;
if($lottery_result['code'] == 0){ //如果开奖成功
$last->status = 1;
$last->lottery_height = $last_header['height'];
$last->result = rand(10000,99999);
$last->save();
}else{
echo date('Y-m-d H:i:s').': '.'开奖异常: '.$lottery_result['msg'].PHP_EOL;
}
}
}else{ //已开奖
if($last_header['height'] > $end_height){ //到下期参与交易高度
/*****************************开始下期交易****************************/
echo date('Y-m-d H:i:s').': '.'区块交易高度: '.$last_header['height'].PHP_EOL;
$trade_result = LotteryBusiness::trade(1,12345,5,0);
echo date('Y-m-d H:i:s').': '.'交易成功 '.PHP_EOL;
if($trade_result['code'] == 0){
$start_height = $last_header['height'];
$end_height = $start_height + $lottery_config['period_total_step'];
$stage = $last->stage + 1;
CoinLottery::addOneRecord($start_height,$end_height,$stage);
}else{
echo date('Y-m-d H:i:s').': '.'参与交易异常: '.$trade_result['msg'].PHP_EOL;
}
sleep(2);
}
}
} else {
//第一期参与交易
$stage = 1;
$start_height = $last_header['height'];
$end_height = $last_header['height'] + $lottery_config['period_total_step'];
/***************************参与交易**********************************/
echo date('Y-m-d H:i:s').': '.'区块交易高度: '.$last_header['height'].PHP_EOL;
$trade_result = LotteryBusiness::trade(1,12345,5,0);
echo date('Y-m-d H:i:s').': '.'交易成功 '.PHP_EOL;
if($trade_result['code'] ==0){ //如果交易成功
CoinLottery::addOneRecord($start_height,$end_height,$stage);
}else{
echo date('Y-m-d H:i:s').': '.'参与交易异常: '.$trade_result['msg'].PHP_EOL;
}
sleep(2);
}
}catch (\Exception $e){
echo date('Y-m-d H:i:s').': '.'异常: '.$e->getMessage().PHP_EOL;
sleep(2);
}
}
exit;
}
public function actionTrade()
{
$res = LotteryBusiness::trade(1,12345,5,0);
}
public function actionLottery()
{
$res = LotteryBusiness::lottery();
var_dump($res);
}
}