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
0
Merge Requests
0
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
ligaishun
chain33-pai
Commits
a1b68868
Commit
a1b68868
authored
Nov 04, 2019
by
szh
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add rspopen
parent
483c72b0
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
33 additions
and
15 deletions
+33
-15
miner.go
miner/miner.go
+24
-14
raspOpen.go
models/raspOpen.go
+1
-0
transaction.go
models/transaction.go
+8
-1
No files found.
miner/miner.go
View file @
a1b68868
...
@@ -68,6 +68,7 @@ func SyncBlock() {
...
@@ -68,6 +68,7 @@ func SyncBlock() {
txsMap
:=
make
(
map
[
int64
]
*
models
.
RaspMinerTxs
,
0
)
txsMap
:=
make
(
map
[
int64
]
*
models
.
RaspMinerTxs
,
0
)
//statList := make([]*models.RaspMinerStat,0)
//statList := make([]*models.RaspMinerStat,0)
txsList
:=
make
([]
*
models
.
RaspMinerTxs
,
0
)
txsList
:=
make
([]
*
models
.
RaspMinerTxs
,
0
)
openlist
:=
make
([]
*
models
.
RaspOpen
,
0
)
checkList
:=
make
(
map
[
int64
]
int64
,
0
)
checkList
:=
make
(
map
[
int64
]
int64
,
0
)
var
wg
sync
.
WaitGroup
var
wg
sync
.
WaitGroup
var
mutx
sync
.
Mutex
var
mutx
sync
.
Mutex
...
@@ -76,12 +77,13 @@ func SyncBlock() {
...
@@ -76,12 +77,13 @@ func SyncBlock() {
wg
.
Add
(
1
)
wg
.
Add
(
1
)
go
func
(
height
int64
)
{
go
func
(
height
int64
)
{
//defer wg.Done()
//defer wg.Done()
stat
,
txs
,
err
:=
DealBlock
(
height
)
stat
,
txs
,
open
,
err
:=
DealBlock
(
height
)
if
err
!=
nil
{
if
err
!=
nil
{
logging
.
Error
(
"DealBlock err"
,
err
)
logging
.
Error
(
"DealBlock err"
,
err
)
panic
(
err
)
panic
(
err
)
}
}
mutx
.
Lock
()
mutx
.
Lock
()
openlist
=
append
(
openlist
,
open
...
)
for
_
,
vv
:=
range
stat
{
for
_
,
vv
:=
range
stat
{
if
_
,
ok
:=
statMap
[
vv
.
Addr
];
!
ok
{
if
_
,
ok
:=
statMap
[
vv
.
Addr
];
!
ok
{
statMap
[
vv
.
Addr
]
=
vv
statMap
[
vv
.
Addr
]
=
vv
...
@@ -136,7 +138,7 @@ func SyncBlock() {
...
@@ -136,7 +138,7 @@ func SyncBlock() {
}
}
panic
(
"exception txs not eq expect"
)
panic
(
"exception txs not eq expect"
)
}
}
err
:=
models
.
UpdateBlocks
(
txsMap
,
statMap
,
processHeight
+
maxDownload
-
1
)
err
:=
models
.
UpdateBlocks
(
txsMap
,
statMap
,
openlist
,
processHeight
+
maxDownload
-
1
)
if
err
!=
nil
{
if
err
!=
nil
{
panic
(
err
)
panic
(
err
)
}
}
...
@@ -169,25 +171,29 @@ func (prev *prevHeight) SetMainHeight() error {
...
@@ -169,25 +171,29 @@ func (prev *prevHeight) SetMainHeight() error {
}
}
func
DealBlock
(
height
int64
)
(
[]
*
models
.
RaspMinerStat
,
*
models
.
RaspMinerTxs
,
error
)
{
func
DealBlock
(
height
int64
)
(
[]
*
models
.
RaspMinerStat
,
*
models
.
RaspMinerTxs
,
[]
*
models
.
RaspOpen
,
error
)
{
logging
.
Info
(
"dealheightstart"
,
height
)
logging
.
Info
(
"dealheightstart"
,
height
)
t1
:=
time
.
Now
()
.
Unix
()
t1
:=
time
.
Now
()
.
Unix
()
blocks
,
err
:=
client
.
GetBlocks
(
&
types
.
ReqBlocks
{
Start
:
height
,
End
:
height
,
IsDetail
:
true
})
blocks
,
err
:=
client
.
GetBlocks
(
&
types
.
ReqBlocks
{
Start
:
height
,
End
:
height
,
IsDetail
:
true
})
t2
:=
time
.
Now
()
.
Unix
()
t2
:=
time
.
Now
()
.
Unix
()
if
err
!=
nil
{
if
err
!=
nil
{
logging
.
Error
(
"GetBlocks err"
,
err
)
logging
.
Error
(
"GetBlocks err"
,
err
)
return
nil
,
nil
,
err
return
nil
,
nil
,
nil
,
err
}
}
block
:=
blocks
.
GetItems
()[
0
]
block
:=
blocks
.
GetItems
()[
0
]
rsMap
:=
make
(
map
[
string
]
*
RMinerStat
,
0
)
rsMap
:=
make
(
map
[
string
]
*
RMinerStat
,
0
)
openList
:=
make
([]
*
models
.
RaspOpen
,
0
)
rt
:=
&
RMinerTxs
{}
rt
:=
&
RMinerTxs
{}
//处理交易数据
//处理交易数据
for
k
,
v
:=
range
block
.
Block
.
Txs
{
for
k
,
v
:=
range
block
.
Block
.
Txs
{
if
block
.
Receipts
[
k
]
.
Ty
==
types
.
ExecOk
&&
string
(
v
.
Execer
)
==
"ticket"
{
if
block
.
Receipts
[
k
]
.
Ty
==
types
.
ExecOk
&&
string
(
v
.
Execer
)
==
"ticket"
{
rt1
,
rss
,
err
:=
dealTx
(
v
,
block
.
Receipts
[
k
],
block
.
Block
.
Height
,
block
.
Block
.
BlockTime
)
rt1
,
rss
,
open
,
err
:=
dealTx
(
v
,
block
.
Receipts
[
k
],
block
.
Block
.
Height
,
block
.
Block
.
BlockTime
)
if
err
!=
nil
{
if
err
!=
nil
{
logging
.
Error
(
"dealTx err "
,
err
)
logging
.
Error
(
"dealTx err "
,
err
)
return
nil
,
nil
,
err
return
nil
,
nil
,
nil
,
err
}
if
open
!=
nil
&&
open
.
Hash
!=
""
{
openList
=
append
(
openList
,
open
)
}
}
if
rt1
!=
nil
&&
rt1
.
Miner
!=
""
{
if
rt1
!=
nil
&&
rt1
.
Miner
!=
""
{
rt
.
Miner
=
rt1
.
Miner
rt
.
Miner
=
rt1
.
Miner
...
@@ -234,7 +240,7 @@ func DealBlock(height int64) ( []*models.RaspMinerStat, *models.RaspMinerTxs,er
...
@@ -234,7 +240,7 @@ func DealBlock(height int64) ( []*models.RaspMinerStat, *models.RaspMinerTxs,er
logging
.
Info
(
"dealheightend"
,
height
,
"getblock cost "
,
t2
-
t1
,
" dealtx cost "
,
t3
-
t2
)
logging
.
Info
(
"dealheightend"
,
height
,
"getblock cost "
,
t2
-
t1
,
" dealtx cost "
,
t3
-
t2
)
//logging.Info("txs",*raspTxs)
//logging.Info("txs",*raspTxs)
return
raspStatList
,
raspTxs
,
nil
return
raspStatList
,
raspTxs
,
openList
,
nil
}
}
type
RMinerTxs
struct
{
type
RMinerTxs
struct
{
...
@@ -259,23 +265,24 @@ type RMinerStat struct {
...
@@ -259,23 +265,24 @@ type RMinerStat struct {
Time
int64
`json:"time"`
Time
int64
`json:"time"`
}
}
func
dealTx
(
tx
*
types
.
Transaction
,
receipt
*
types
.
ReceiptData
,
height
,
blocktime
int64
)
(
*
RMinerTxs
,[]
*
RMinerStat
,
error
)
{
func
dealTx
(
tx
*
types
.
Transaction
,
receipt
*
types
.
ReceiptData
,
height
,
blocktime
int64
)
(
*
RMinerTxs
,[]
*
RMinerStat
,
*
models
.
RaspOpen
,
error
)
{
var
rt
RMinerTxs
var
rt
RMinerTxs
rss
:=
make
([]
*
RMinerStat
,
0
)
rss
:=
make
([]
*
RMinerStat
,
0
)
open
:=
&
models
.
RaspOpen
{}
//只处理ticket合约
//只处理ticket合约
if
string
(
tx
.
Execer
)
==
"ticket"
{
if
string
(
tx
.
Execer
)
==
"ticket"
{
var
miner
ttype
.
TicketAction
var
miner
ttype
.
TicketAction
err
:=
types
.
Decode
(
tx
.
Payload
,
&
miner
)
err
:=
types
.
Decode
(
tx
.
Payload
,
&
miner
)
if
err
!=
nil
{
if
err
!=
nil
{
logging
.
Error
(
"decode ticket err "
,
err
)
logging
.
Error
(
"decode ticket err "
,
err
)
return
nil
,
nil
,
err
return
nil
,
nil
,
nil
,
err
}
}
switch
miner
.
Ty
{
switch
miner
.
Ty
{
case
ttype
.
TicketActionMiner
:
case
ttype
.
TicketActionMiner
:
rt1
,
rs1
,
err
:=
DealMinerAction
(
tx
,
&
miner
)
rt1
,
rs1
,
err
:=
DealMinerAction
(
tx
,
&
miner
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
nil
,
err
return
nil
,
nil
,
nil
,
err
}
}
rt
=
*
rt1
rt
=
*
rt1
rt
.
Height
=
height
rt
.
Height
=
height
...
@@ -284,7 +291,7 @@ func dealTx(tx *types.Transaction,receipt *types.ReceiptData,height,blocktime in
...
@@ -284,7 +291,7 @@ func dealTx(tx *types.Transaction,receipt *types.ReceiptData,height,blocktime in
case
ttype
.
TicketActionClose
:
case
ttype
.
TicketActionClose
:
rslist
,
err
:=
DealCloseAction
(
&
miner
)
rslist
,
err
:=
DealCloseAction
(
&
miner
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
nil
,
err
return
nil
,
nil
,
nil
,
err
}
}
for
_
,
v
:=
range
rslist
{
for
_
,
v
:=
range
rslist
{
v
.
Time
=
blocktime
v
.
Time
=
blocktime
...
@@ -294,15 +301,18 @@ func dealTx(tx *types.Transaction,receipt *types.ReceiptData,height,blocktime in
...
@@ -294,15 +301,18 @@ func dealTx(tx *types.Transaction,receipt *types.ReceiptData,height,blocktime in
case
ttype
.
TicketActionOpen
:
case
ttype
.
TicketActionOpen
:
rs1
,
err
:=
DealOpenAction
(
&
miner
)
rs1
,
err
:=
DealOpenAction
(
&
miner
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
nil
,
err
return
nil
,
nil
,
nil
,
err
}
}
rs1
.
Height
=
height
rs1
.
Height
=
height
rs1
.
Time
=
blocktime
rs1
.
Time
=
blocktime
open
.
Hash
=
common
.
ToHex
(
tx
.
Hash
())
open
.
Miner
=
miner
.
GetTopen
()
.
MinerAddress
open
.
ReturnAddr
=
miner
.
GetTopen
()
.
ReturnAddress
rss
=
append
(
rss
,
rs1
)
rss
=
append
(
rss
,
rs1
)
case
ttype
.
TicketActionGenesis
:
case
ttype
.
TicketActionGenesis
:
rs1
,
err
:=
DealGenesisAction
(
&
miner
)
rs1
,
err
:=
DealGenesisAction
(
&
miner
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
nil
,
err
return
nil
,
nil
,
nil
,
err
}
}
rs1
.
Time
=
blocktime
rs1
.
Time
=
blocktime
rs1
.
Height
=
height
rs1
.
Height
=
height
...
@@ -310,7 +320,7 @@ func dealTx(tx *types.Transaction,receipt *types.ReceiptData,height,blocktime in
...
@@ -310,7 +320,7 @@ func dealTx(tx *types.Transaction,receipt *types.ReceiptData,height,blocktime in
}
}
}
}
return
&
rt
,
rss
,
nil
return
&
rt
,
rss
,
open
,
nil
}
}
func
NewMinerStat
(
rs
*
RMinerStat
)
*
models
.
RaspMinerStat
{
func
NewMinerStat
(
rs
*
RMinerStat
)
*
models
.
RaspMinerStat
{
...
...
models/raspOpen.go
View file @
a1b68868
...
@@ -7,6 +7,7 @@ type RaspOpen struct {
...
@@ -7,6 +7,7 @@ type RaspOpen struct {
ReturnAddr
string
`json:"return_addr"`
ReturnAddr
string
`json:"return_addr"`
}
}
// GetHeight get lastheight in chain33
// GetHeight get lastheight in chain33
func
GetReturnAddr
(
hash
string
)
(
string
,
error
)
{
func
GetReturnAddr
(
hash
string
)
(
string
,
error
)
{
var
open
RaspOpen
var
open
RaspOpen
...
...
models/transaction.go
View file @
a1b68868
...
@@ -53,7 +53,7 @@ func UpdateBlock(rt *RaspMinerTxs,rs *RaspMinerStat) error {
...
@@ -53,7 +53,7 @@ func UpdateBlock(rt *RaspMinerTxs,rs *RaspMinerStat) error {
return
tx
.
Commit
()
.
Error
return
tx
.
Commit
()
.
Error
}
}
func
UpdateBlocks
(
rt
map
[
int64
]
*
RaspMinerTxs
,
rs
map
[
string
]
*
RaspMinerStat
,
height
int64
)
error
{
func
UpdateBlocks
(
rt
map
[
int64
]
*
RaspMinerTxs
,
rs
map
[
string
]
*
RaspMinerStat
,
openlist
[]
*
RaspOpen
,
height
int64
)
error
{
tx
:=
db
.
Begin
()
tx
:=
db
.
Begin
()
defer
func
()
{
defer
func
()
{
if
r
:=
recover
();
r
!=
nil
{
if
r
:=
recover
();
r
!=
nil
{
...
@@ -70,6 +70,13 @@ func UpdateBlocks(rt map[int64]*RaspMinerTxs,rs map[string]*RaspMinerStat,height
...
@@ -70,6 +70,13 @@ func UpdateBlocks(rt map[int64]*RaspMinerTxs,rs map[string]*RaspMinerStat,height
return
err
return
err
}
}
}
}
for
_
,
v
:=
range
openlist
{
var
open
RaspOpen
if
err
:=
tx
.
Where
(
&
RaspOpen
{
Hash
:
v
.
Hash
})
.
Assign
(
v
)
.
FirstOrCreate
(
&
open
)
.
Error
;
err
!=
nil
{
tx
.
Rollback
()
return
err
}
}
for
_
,
v
:=
range
rs
{
for
_
,
v
:=
range
rs
{
var
prev
RaspMinerStat
var
prev
RaspMinerStat
...
...
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