Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
T
token
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wallet
token
Commits
1a2f737a
Commit
1a2f737a
authored
Aug 13, 2019
by
shajiaiming
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'feature/airdrop' into 'master'
Feature/airdrop See merge request
!85
parents
bb2e349a
a405b83c
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
260 additions
and
109 deletions
+260
-109
IndexAsset.php
backend/assets/airDrop/IndexAsset.php
+2
-2
AirDropController.php
backend/controllers/AirDropController.php
+28
-52
add.php
backend/views/air-drop/add.php
+19
-0
form.php
backend/views/air-drop/form.php
+0
-0
list.php
backend/views/air-drop/list.php
+14
-0
list.php
backend/views/coin-transfer/list.php
+0
-15
list.js
backend/web/js/air-drop/list.js
+83
-0
CoinAirDropTransfer.php
common/models/psources/CoinAirDropTransfer.php
+40
-40
AirDropController.php
console/controllers/AirDropController.php
+74
-0
No files found.
backend/assets/
coinTransfer
/IndexAsset.php
→
backend/assets/
airDrop
/IndexAsset.php
View file @
1a2f737a
<?php
namespace
backend\assets\
coinTransfer
;
namespace
backend\assets\
airDrop
;
use
yii\web\AssetBundle
;
use
yii\web\View
;
class
IndexAsset
extends
AssetBundle
{
public
$sourcePath
=
'@backend/web/js/
coin-transfer
'
;
public
$sourcePath
=
'@backend/web/js/
air-drop
'
;
public
$js
=
[
'list.js'
,
];
...
...
backend/controllers/
CoinTransfer
Controller.php
→
backend/controllers/
AirDrop
Controller.php
View file @
1a2f737a
<?php
/**
* Created by PhpStorm.
* User: shaji
* Date: 2019/4/23
* Time: 10:04
*/
namespace
backend\controllers
;
use
backend\models\Coin
;
use
common\service\chain33\Chain33Service
;
use
Yii
;
use
common\models\psources\CoinTransfer
;
use
yii\web\UploadedFile
;
use
common\models\psources\CoinAirDropTransfer
;
class
CoinTransfer
Controller
extends
BaseController
class
AirDrop
Controller
extends
BaseController
{
public
$enableCsrfValidation
=
false
;
...
...
@@ -27,7 +20,7 @@ class CoinTransferController extends BaseController
if
(
Yii
::
$app
->
request
->
isAjax
)
{
Yii
::
$app
->
response
->
format
=
'json'
;
$condition
=
[];
$data
=
CoinTransfer
::
getList
(
$page
,
$limit
,
$condition
);
$data
=
Coin
AirDrop
Transfer
::
getList
(
$page
,
$limit
,
$condition
);
return
$data
;
}
return
$this
->
render
(
'list'
);
...
...
@@ -50,12 +43,17 @@ class CoinTransferController extends BaseController
if
(
ctype_digit
(
$data
[
0
][
0
]))
{
array_shift
(
$data
);
}
foreach
(
$data
as
$key
=>
&
$value
){
foreach
(
$data
as
$key
=>
&
$value
)
{
$value
[
0
]
=
trim
(
$value
[
0
]);
$value
[
1
]
=
trim
(
$value
[
1
]);
}
if
(
$data
)
{
if
(
CoinTransfer
::
loadArray
(
$data
))
{
$additional
=
[
1
,
'0'
,
' '
,
0
];
foreach
(
$data
as
$key
=>
&
$val
)
{
$val
=
array_merge
(
$val
,
$additional
);
}
if
(
CoinAirDropTransfer
::
loadArray
(
$data
))
{
return
[
'code'
=>
0
,
'msg'
=>
'succeed'
];
}
}
...
...
@@ -65,48 +63,27 @@ class CoinTransferController extends BaseController
}
}
public
function
action
BatchTransfer
()
public
function
action
Add
()
{
$model
=
CoinTransfer
::
find
()
->
where
([
'status'
=>
0
])
->
limit
(
30
)
->
all
();
foreach
(
$model
as
$val
){
$id
=
$val
->
id
;
$to
=
$val
->
address
;
$amount
=
$val
->
amount
*
1e8
;
$fee
=
100000
;
$note
=
''
;
$execer
=
'user.p.tschain.coins'
;
$isExist
=
CoinTransfer
::
find
()
->
where
([
'address'
=>
$val
->
address
,
'status'
=>
1
])
->
one
();
if
(
$isExist
)
continue
;
$service
=
new
Chain33Service
();
$createRawTransaction
=
$service
->
createRawTransaction
(
$to
,
$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
;
$this
->
layout
=
false
;
if
(
Yii
::
$app
->
request
->
isPost
)
{
Yii
::
$app
->
response
->
format
=
'json'
;
$post
=
Yii
::
$app
->
request
->
post
();
$model
=
new
CoinAirDropTransfer
();
$model
->
setScenario
(
CoinAirDropTransfer
::
SCENARIOS_CREATE
);
$post
[
'txhash'
]
=
'0'
;
$post
[
'msg'
]
=
''
;
$post
[
'balance'
]
=
0
;
$post
[
'origin'
]
=
CoinAirDropTransfer
::
ORIGIN_ADD
;
if
(
$model
->
load
(
$post
,
''
)
&&
$model
->
save
())
{
return
[
'code'
=>
0
,
'msg'
=>
'succeed'
];
}
$sign_str
=
$signRawTx
[
'result'
];
$result
=
$service
->
sendTransaction
(
$sign_str
);
if
(
0
!=
$result
[
'code'
]){
continue
;
$error
=
$model
->
errors
;
if
(
$error
)
{
return
[
'code'
=>
-
1
,
'msg'
=>
current
(
$model
->
firstErrors
)];
}
$hash
=
$result
[
'result'
];
$current_model
=
CoinTransfer
::
findOne
(
$id
);
$current_model
->
hash
=
$hash
;
$current_model
->
status
=
1
;
$current_model
->
save
();
echo
$val
->
address
.
"-----"
.
$hash
.
"<br/>"
;
}
else
{
return
$this
->
render
(
'add'
);
}
}
}
\ No newline at end of file
backend/views/air-drop/add.php
0 → 100644
View file @
1a2f737a
<div
style=
"padding: 5px 20px;"
>
<br>
<form
id=
"addData"
>
<input
name=
"_csrf"
type=
"hidden"
value=
"
<?=
Yii
::
$app
->
request
->
getCsrfToken
()
?>
"
>
<div
class=
"input-group my-group"
>
<span
class=
"input-group-addon"
>
打币地址
</span>
<input
name=
"to_address"
type=
"text"
class=
"form-control"
lay-verify=
"required"
>
</div>
<div
class=
"input-group my-group"
>
<span
class=
"input-group-addon"
>
打币数量
</span>
<input
name=
"amount"
type=
"text"
class=
"form-control"
lay-verify=
"required"
>
</div>
<div
class=
"input-group my-group"
>
<span
class=
"input-group-addon"
>
币种名称
</span>
<input
name=
"coin_name"
type=
"text"
class=
"form-control"
lay-verify=
"required"
>
</div>
</form>
</div>
\ No newline at end of file
backend/views/
coin-transfer
/form.php
→
backend/views/
air-drop
/form.php
View file @
1a2f737a
File moved
backend/views/air-drop/list.php
0 → 100644
View file @
1a2f737a
<?php
use
backend\assets\airDrop\IndexAsset
;
IndexAsset
::
register
(
$this
);
?>
<div
class=
"layui-row"
>
<button
class=
"layui-btn layui-btn-sm"
lay-event=
"import"
id=
"import"
>
名单导入
</button>
<button
class=
"layui-btn layui-btn-sm"
lay-event=
"add"
id=
"add"
>
单笔添加
</button>
<!-- <button class="layui-btn layui-btn-sm" lay-event="transfer" id="transfer">批量打币</button>-->
</div>
<div
class=
"layui-row"
>
<table
class=
"layui-table"
id=
"table1"
></table>
</div>
backend/views/coin-transfer/list.php
deleted
100644 → 0
View file @
bb2e349a
<?php
use
backend\assets\coinTransfer\IndexAsset
;
IndexAsset
::
register
(
$this
);
?>
<div
class=
"layui-row"
>
<button
class=
"layui-btn layui-btn-sm"
lay-event=
"implode"
id=
"implode"
>
名单导入
</button>
<button
class=
"layui-btn layui-btn-sm"
lay-event=
"transfer"
id=
"transfer"
>
批量打币
</button>
</div>
<div
class=
"layui-row"
>
<div
class=
"layui-col-md8"
>
<table
class=
"layui-table"
id=
"table1"
lay-filter=
"table1"
></table>
</div>
</div>
backend/web/js/air-drop/list.js
0 → 100644
View file @
1a2f737a
var
table
=
layui
.
table
;
var
upload
=
layui
.
upload
;
table
.
render
({
elem
:
"#table1"
,
url
:
'/admin/air-drop/list'
,
page
:
1
,
limit
:
10
,
cols
:
[[
{
field
:
'id'
,
width
:
100
,
title
:
'ID'
,
sort
:
true
},
{
field
:
'to_address'
,
width
:
400
,
title
:
'地址'
},
{
field
:
'amount'
,
title
:
'数量'
},
{
field
:
'coin_name'
,
title
:
'币种名称'
},
{
field
:
'txhash'
,
width
:
400
,
title
:
'hash'
},
{
field
:
'msg'
,
width
:
200
,
title
:
'返回结果'
},
{
field
:
'create_time'
,
title
:
'添加时间'
},
{
field
:
'update_time'
,
title
:
'处理时间'
}
]]
,
done
:
function
()
{
//$("[data-field='id']").css('display','none');
}
});
$
(
'#add'
).
click
(
function
()
{
//打开弹窗
$
.
get
(
'/admin/air-drop/add'
,
{},
function
(
str
)
{
var
index
=
layer
.
open
({
type
:
1
,
title
:
'添加数据'
,
id
:
'add-one'
,
skin
:
'layui-layer-lan'
,
area
:
[
'320px'
,
'auto'
],
content
:
str
,
btn
:
[
'确认'
,
'取消'
],
btn1
:
function
()
{
$
.
post
(
'/admin/air-drop/add'
,
$
(
"#addData"
).
serialize
(),
function
(
rev
)
{
layer
.
msg
(
rev
.
msg
);
if
(
rev
.
code
==
0
)
{
layer
.
close
(
index
);
table
.
reload
(
"table1"
,
{});
}
});
}
});
layui
.
form
.
render
();
});
return
false
;
});
upload
.
render
({
elem
:
"#import"
,
url
:
"/admin/air-drop/load-file"
,
accept
:
'file'
,
exts
:
'csv'
,
done
:
function
(
res
)
{
if
(
res
.
code
==
0
){
layer
.
msg
(
res
.
msg
);
table
.
reload
(
'table1'
,
{
curr
:
1
});
}
else
{
layer
.
msg
(
res
.
msg
);
}
},
before
:
function
(
obj
)
{
//obj参数包含的信息,跟 choose回调完全一致,可参见上文。
layer
.
load
();
//上传loading
}
});
$
(
'#transfer'
).
click
(
function
()
{
//var data = obj.data; //得到所在行所有键值
$
.
get
(
'/admin/air-drop/batch-transfer'
,
{},
function
(
rev
)
{
layer
.
msg
(
rev
.
msg
);
if
(
0
==
rev
.
code
)
{
table
.
reload
(
'table1'
,
{
page
:
{
curr
:
1
}
});
}
});
});
\ No newline at end of file
common/models/psources/CoinTransfer.php
→
common/models/psources/Coin
AirDrop
Transfer.php
View file @
1a2f737a
...
...
@@ -2,21 +2,14 @@
namespace
common\models\psources
;
use
common\core\BaseActiveRecord
;
use
Yii
;
use
common\core\BaseActiveRecord
;
/**
* CoinReleaseMember
*
* @property int $id
* @property int $status
* @property string $address
* @property string $amount
*/
class
CoinTransfer
extends
BaseActiveRecord
class
CoinAirDropTransfer
extends
BaseActiveRecord
{
const
SCENARIOS_ADD
=
'add'
;
const
SCENARIOS_UPDATE
=
'update'
;
const
ORIGIN_IMPORT
=
1
;
const
ORIGIN_ADD
=
2
;
const
ORIGIN_API
=
3
;
public
static
function
getDb
()
{
...
...
@@ -25,51 +18,57 @@ class CoinTransfer extends BaseActiveRecord
public
static
function
tableName
()
{
return
'{{%coin_
transfer}}'
;
return
'{{%coin_
airdrop_transfer}}'
;
}
public
function
attributeLabels
()
{
return
[
'id'
=>
'ID'
,
'address'
=>
'地址'
,
'amount'
=>
'数量'
,
'hash'
=>
'交易hash'
,
'status'
=>
'状态'
,
];
}
//定义场景
const
SCENARIOS_CREATE
=
'create'
;
const
SCENARIOS_UPDATE
=
'update'
;
public
function
rules
()
{
return
[
[[
'address'
,
'amount'
,
'hash'
],
'string'
],
];
}
public
function
sercians
()
{
public
function
rules
()
{
return
[
self
::
SCENARIOS_ADD
=>
[
'address'
,
'amount'
,
'hash'
,
'status'
],
self
::
SCENARIOS_UPDATE
=>
[
'address'
,
'amount'
,
'hash'
,
'status'
],
[[
'to_address'
,
'amount'
,
'coin_name'
],
'required'
,
'message'
=>
"请输入
{
attribute
}
"
],
[[
'origin'
,
'txhash'
,
'msg'
,
'balance'
],
'safe'
],
];
}
/**
* 批量返回用户
*
* @param integer|array $ids
* @return array
* @inheritdoc
*/
public
static
function
getMemberByRuleIds
(
$ids
)
public
function
attributeLabels
()
{
return
CoinReleaseMember
::
find
()
->
where
([
'rule_id'
=>
$ids
])
->
andWhere
([
'>'
,
'freeze'
,
0
])
->
asArray
()
->
all
();
return
[
'to_address'
=>
'钱包地址'
,
'amount'
=>
'数量'
,
'coin_name'
=>
'币种名称'
,
'origin'
=>
'来源'
,
'txhash'
=>
'返回hash'
,
'msg'
=>
'返回结果'
,
'balance'
=>
'钱包余额'
,
];
}
public
function
scenarios
()
{
$scenarios
=
[
self
::
SCENARIOS_CREATE
=>
[
'to_address'
,
'amount'
,
'coin_name'
,
'origin'
],
];
return
array_merge
(
parent
::
scenarios
(),
$scenarios
);
}
public
static
function
loadArray
(
array
$data
)
{
return
self
::
getDb
()
->
createCommand
()
->
batchInsert
(
self
::
tableName
(),
[
'
address'
,
'amount'
],
[
'
to_address'
,
'coin_name'
,
'amount'
,
'origin'
,
'txhash'
,
'msg'
,
'balance'
],
$data
)
->
execute
();
}
public
static
function
getOrigin
()
{
return
[
self
::
ORIGIN_IMPORT
=>
'批量导入'
,
self
::
ORIGIN_ADD
=>
'单独添加'
,
self
::
ORIGIN_API
=>
'接口导入'
,
];
}
}
\ No newline at end of file
console/controllers/AirDropController.php
0 → 100644
View file @
1a2f737a
<?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
;
}
}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment