Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
C
chain33-pai
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
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
szh
chain33-pai
Commits
868518ae
Commit
868518ae
authored
Nov 04, 2019
by
szh
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
更新授权挖矿 地址统计数据逻辑
parent
c55e58e6
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
174 additions
and
34 deletions
+174
-34
raspberry.sql
docs/sql/raspberry.sql
+21
-5
miner.go
miner/miner.go
+140
-28
raspConfig.go
models/raspConfig.go
+1
-1
client.go
pkg/chain33/client.go
+4
-0
code.go
pkg/e/code.go
+8
-0
No files found.
docs/sql/raspberry.sql
View file @
868518ae
/*
Navicat MySQL Data Transfer
Source Server : localhost
_3306
Source Server Version : 50
553
Source Server : localhost
Source Server Version : 50
726
Source Host : localhost:3306
Source Database : raspberry
Target Server Type : MYSQL
Target Server Version : 50
553
Target Server Version : 50
726
File Encoding : 65001
Date: 2019-1
0-12 11:11:49
Date: 2019-1
1-04 11:26:08
*/
SET
FOREIGN_KEY_CHECKS
=
0
;
...
...
@@ -56,5 +56,21 @@ CREATE TABLE `rasp_miner_txs` (
`amount`
int
(
10
)
DEFAULT
'0'
COMMENT
'矿工挖矿获利'
,
`time`
int
(
11
)
DEFAULT
'0'
COMMENT
'挖矿时间'
,
PRIMARY
KEY
(
`height`
),
KEY
`miner`
(
`miner`
)
KEY
`miner`
(
`miner`
),
KEY
`return_addr`
(
`return_addr`
)
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8
;
-- ----------------------------
-- Table structure for rasp_tickets
-- ----------------------------
DROP
TABLE
IF
EXISTS
`rasp_tickets`
;
CREATE
TABLE
`rasp_tickets`
(
`id`
varchar
(
512
)
NOT
NULL
,
`miner`
varchar
(
66
)
DEFAULT
NULL
,
`return_address`
varchar
(
66
)
DEFAULT
NULL
,
`height`
int
(
11
)
DEFAULT
NULL
,
`pubhash`
varchar
(
255
)
DEFAULT
NULL
,
`status`
tinyint
(
2
)
DEFAULT
NULL
,
PRIMARY
KEY
(
`id`
),
KEY
`status`
(
`status`
)
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8mb4
;
miner/miner.go
View file @
868518ae
...
...
@@ -11,6 +11,8 @@ import (
ttype
"github.com/33cn/plugin/plugin/dapp/ticket/types"
"github.com/jinzhu/gorm"
"github.com/33cn/chain33/common"
"strings"
"chain33-pai/pkg/e"
)
func
Setup
()
{
...
...
@@ -85,6 +87,10 @@ func SyncBlock() {
statMap
[
vv
.
Addr
]
.
MinedTicketCount
+=
vv
.
MinedTicketCount
statMap
[
vv
.
Addr
]
.
MiningTicketCount
+=
vv
.
MiningTicketCount
statMap
[
vv
.
Addr
]
.
MinedAmount
+=
vv
.
MinedAmount
if
statMap
[
vv
.
Addr
]
.
Height
<
vv
.
Height
{
statMap
[
vv
.
Addr
]
.
Height
=
vv
.
Height
statMap
[
vv
.
Addr
]
.
Time
=
vv
.
Time
}
}
}
...
...
@@ -173,7 +179,7 @@ func DealBlock(height int64) ( []*models.RaspMinerStat, *models.RaspMinerTxs,er
//处理交易数据
for
k
,
v
:=
range
block
.
Block
.
Txs
{
if
block
.
Receipts
[
k
]
.
Ty
==
types
.
ExecOk
{
rt1
,
rs
1
,
err
:=
dealTx
(
v
)
rt1
,
rs
s
,
err
:=
dealTx
(
v
,
block
.
Receipts
[
k
],
block
.
Block
.
Height
,
block
.
Block
.
BlockTime
)
if
err
!=
nil
{
logging
.
Error
(
"dealTx err "
,
err
)
return
nil
,
nil
,
err
...
...
@@ -183,20 +189,29 @@ func DealBlock(height int64) ( []*models.RaspMinerStat, *models.RaspMinerTxs,er
rt
.
Amount
=
rt1
.
Amount
rt
.
Hash
=
rt1
.
Hash
}
if
rs1
!=
nil
&&
rs1
.
Addr
!=
""
{
rs
:=
&
RMinerStat
{}
if
_
,
ok
:=
rsMap
[
rs1
.
Addr
];
!
ok
{
rs
.
Addr
=
rs1
.
Addr
rs
.
MinedTicketCount
=
rs1
.
MinedTicketCount
rs
.
MiningTicketCount
=
rs1
.
MiningTicketCount
rs
.
MinedAmount
=
rs1
.
MinedAmount
rs
.
Time
=
block
.
Block
.
BlockTime
rs
.
Height
=
block
.
Block
.
Height
rsMap
[
rs1
.
Addr
]
=
rs
}
else
{
rsMap
[
rs1
.
Addr
]
.
MiningTicketCount
+=
rs1
.
MiningTicketCount
for
_
,
vv
:=
range
rss
{
if
vv
!=
nil
&&
vv
.
Addr
!=
""
{
rs
:=
&
RMinerStat
{}
if
_
,
ok
:=
rsMap
[
vv
.
Addr
];
!
ok
{
rs
.
Addr
=
vv
.
Addr
rs
.
MinedTicketCount
=
vv
.
MinedTicketCount
rs
.
MiningTicketCount
=
vv
.
MiningTicketCount
rs
.
MinedAmount
=
vv
.
MinedAmount
rs
.
Time
=
block
.
Block
.
BlockTime
rs
.
Height
=
block
.
Block
.
Height
rsMap
[
vv
.
Addr
]
=
rs
}
else
{
rsMap
[
vv
.
Addr
]
.
MiningTicketCount
+=
vv
.
MiningTicketCount
rsMap
[
vv
.
Addr
]
.
MinedAmount
+=
vv
.
MinedAmount
rsMap
[
vv
.
Addr
]
.
MinedTicketCount
+=
vv
.
MinedTicketCount
if
rsMap
[
vv
.
Addr
]
.
Height
<
vv
.
Height
{
rsMap
[
vv
.
Addr
]
.
Height
=
vv
.
Height
rsMap
[
vv
.
Addr
]
.
Time
=
vv
.
Time
}
}
}
}
}
}
...
...
@@ -252,9 +267,9 @@ type RMinerStat struct {
Time
int64
`json:"time"`
}
func
dealTx
(
tx
*
types
.
Transaction
)
(
*
RMinerTxs
,
*
RMinerStat
,
error
)
{
func
dealTx
(
tx
*
types
.
Transaction
,
receipt
*
types
.
ReceiptData
,
height
,
blocktime
int64
)
(
*
RMinerTxs
,[]
*
RMinerStat
,
error
)
{
var
rt
RMinerTxs
var
rs
RMinerStat
rss
:=
make
([]
*
RMinerStat
,
0
)
//只处理ticket合约
if
string
(
tx
.
Execer
)
==
"ticket"
{
var
miner
ttype
.
TicketAction
...
...
@@ -264,26 +279,46 @@ func dealTx(tx *types.Transaction) (*RMinerTxs,*RMinerStat,error) {
return
nil
,
nil
,
err
}
switch
miner
.
Ty
{
case
ttype
.
TicketActionMiner
:
rt
.
Amount
=
miner
.
GetMiner
()
.
Reward
rt
.
Miner
=
tx
.
From
()
rt
.
Hash
=
common
.
ToHex
(
tx
.
Hash
())
rs
.
MinedAmount
=
miner
.
GetMiner
()
.
Reward
rs
.
MinedTicketCount
=
int64
(
1
)
rs
.
Addr
=
tx
.
From
()
rt1
,
rs1
,
err
:=
DealMinerAction
(
tx
,
&
miner
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
rt
=
*
rt1
rt
.
Height
=
height
rt
.
Time
=
blocktime
rss
=
append
(
rss
,
rs1
)
case
ttype
.
TicketActionClose
:
rs
.
MiningTicketCount
=
-
int64
(
len
(
miner
.
GetTclose
()
.
TicketId
))
rs
.
Addr
=
tx
.
From
()
rslist
,
err
:=
DealCloseAction
(
&
miner
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
for
_
,
v
:=
range
rslist
{
v
.
Time
=
blocktime
v
.
Height
=
height
}
rss
=
append
(
rss
,
rslist
...
)
case
ttype
.
TicketActionOpen
:
rs
.
MiningTicketCount
=
int64
(
miner
.
GetTopen
()
.
Count
)
rs
.
Addr
=
tx
.
From
()
rs1
,
err
:=
DealOpenAction
(
&
miner
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
rs1
.
Height
=
height
rs1
.
Time
=
blocktime
rss
=
append
(
rss
,
rs1
)
case
ttype
.
TicketActionGenesis
:
rs
.
MiningTicketCount
=
int64
(
miner
.
GetGenesis
()
.
Count
)
rs
.
Addr
=
tx
.
From
()
rs1
,
err
:=
DealGenesisAction
(
&
miner
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
rs1
.
Time
=
blocktime
rs1
.
Height
=
height
rss
=
append
(
rss
,
rs1
)
}
}
return
&
rt
,
&
r
s
,
nil
return
&
rt
,
rs
s
,
nil
}
func
NewMinerStat
(
rs
*
RMinerStat
)
*
models
.
RaspMinerStat
{
...
...
@@ -307,6 +342,83 @@ func NewMinerTxs(rt *RMinerTxs) *models.RaspMinerTxs {
return
&
r
}
func
DealMinerAction
(
tx
*
types
.
Transaction
,
miner
*
ttype
.
TicketAction
)(
*
RMinerTxs
,
*
RMinerStat
,
error
)
{
var
rs
RMinerStat
var
rt
RMinerTxs
ticketparams
:=
strings
.
Split
(
miner
.
GetMiner
()
.
TicketId
,
":"
)
if
len
(
ticketparams
)
<
3
{
return
nil
,
nil
,
e
.
ErrWrongTicketId
}
realaddress
,
err
:=
GetRealAddress
(
ticketparams
[
1
])
if
err
!=
nil
{
return
nil
,
nil
,
err
}
rt
.
Amount
=
miner
.
GetMiner
()
.
Reward
rt
.
Miner
=
tx
.
From
()
rt
.
ReturnAddr
=
realaddress
rt
.
Hash
=
common
.
ToHex
(
tx
.
Hash
())
rs
.
MinedAmount
=
miner
.
GetMiner
()
.
Reward
rs
.
MinedTicketCount
=
int64
(
1
)
rs
.
Addr
=
realaddress
return
&
rt
,
&
rs
,
nil
}
func
DealOpenAction
(
open
*
ttype
.
TicketAction
)(
*
RMinerStat
,
error
)
{
var
rs
RMinerStat
rs
.
Addr
=
open
.
GetTopen
()
.
ReturnAddress
rs
.
MiningTicketCount
=
int64
(
open
.
GetTopen
()
.
Count
)
return
&
rs
,
nil
}
func
DealGenesisAction
(
genesis
*
ttype
.
TicketAction
)(
*
RMinerStat
,
error
)
{
var
rs
RMinerStat
rs
.
Addr
=
genesis
.
GetGenesis
()
.
ReturnAddress
rs
.
MiningTicketCount
=
int64
(
genesis
.
GetGenesis
()
.
Count
)
return
&
rs
,
nil
}
func
DealCloseAction
(
close
*
ttype
.
TicketAction
)([]
*
RMinerStat
,
error
)
{
rslist
:=
make
([]
*
RMinerStat
,
0
)
for
_
,
v
:=
range
close
.
GetTclose
()
.
TicketId
{
var
rs
RMinerStat
ticketparams
:=
strings
.
Split
(
v
,
":"
)
if
len
(
ticketparams
)
<
3
{
return
nil
,
e
.
ErrWrongTicketId
}
realaddress
,
err
:=
GetRealAddress
(
ticketparams
[
1
])
if
err
!=
nil
{
return
nil
,
err
}
rs
.
Addr
=
realaddress
rs
.
MiningTicketCount
=
int64
(
-
1
)
rslist
=
append
(
rslist
,
&
rs
)
}
return
rslist
,
nil
}
func
GetRealAddress
(
hash
string
)
(
string
,
error
)
{
client
:=
&
chain33
.
PaiClient
{}
hashb
,
err
:=
common
.
FromHex
(
hash
)
if
err
!=
nil
{
return
""
,
err
}
res
,
err
:=
client
.
QueryTransaction
(
hashb
)
if
err
!=
nil
{
return
""
,
err
}
var
payload
ttype
.
TicketAction
err
=
types
.
Decode
(
res
.
Tx
.
Payload
,
&
payload
)
if
err
!=
nil
{
return
""
,
err
}
switch
payload
.
Ty
{
case
ttype
.
TicketActionOpen
:
return
payload
.
GetTopen
()
.
ReturnAddress
,
nil
}
return
""
,
types
.
ErrActionNotSupport
}
func
bityuanMiner
(
height
int64
)
int64
{
// ForkChainParamV2
if
height
>=
2270000
{
...
...
models/raspConfig.go
View file @
868518ae
...
...
@@ -31,7 +31,7 @@ func UpdateHeight(height int64) error {
// AddArticle add a single article
func
InitHeight
()
error
{
config
:=
RaspConfig
{
Height
:
0
,
Height
:
-
1
,
Config
:
"height"
,
}
if
err
:=
db
.
Create
(
&
config
)
.
Error
;
err
!=
nil
{
...
...
pkg/chain33/client.go
View file @
868518ae
...
...
@@ -41,6 +41,10 @@ func (p *PaiClient) GetNetInfo() (*types.NodeNetInfo,error) {
return
paiClient
.
NetInfo
(
context
.
Background
(),
&
types
.
ReqNil
{})
}
func
(
p
*
PaiClient
)
QueryTransaction
(
hash
[]
byte
)
(
*
types
.
TransactionDetail
,
error
)
{
return
paiClient
.
QueryTransaction
(
context
.
Background
(),
&
types
.
ReqHash
{
Hash
:
hash
})
}
func
(
p
*
PaiClient
)
GetBlocks
(
req
*
types
.
ReqBlocks
)
(
*
types
.
BlockDetails
,
error
)
{
var
detail
types
.
BlockDetails
reply
,
err
:=
paiClient
.
GetBlocks
(
context
.
Background
(),
req
)
...
...
pkg/e/code.go
View file @
868518ae
package
e
import
"github.com/micro/go-micro/errors"
const
(
SUCCESS
=
200
ERROR
=
500
...
...
@@ -35,3 +37,8 @@ const (
ERROR_UPLOAD_CHECK_IMAGE_FAIL
=
30002
ERROR_UPLOAD_CHECK_IMAGE_FORMAT
=
30003
)
const
(
ErrWrongTicketId
=
errors
.
New
(
"ErrWrongTicketId"
)
)
\ 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