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
62933df4
Commit
62933df4
authored
Oct 10, 2019
by
szh
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add updateBlocks
parent
a4a04d65
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
102 additions
and
16 deletions
+102
-16
miner.go
miner/miner.go
+44
-15
transaction.go
models/transaction.go
+58
-1
No files found.
miner/miner.go
View file @
62933df4
...
...
@@ -10,6 +10,7 @@ import (
"github.com/33cn/chain33/types"
ttype
"github.com/33cn/plugin/plugin/dapp/ticket/types"
"github.com/jinzhu/gorm"
"golang.org/x/net/html/atom"
)
func
Setup
()
{
...
...
@@ -53,27 +54,56 @@ func SyncBlock() {
prev
.
lock
.
Lock
()
lastHeight
:=
prev
.
Height
startHeight
:=
prev
.
LocalHeight
maxDownload
:=
prev
.
DownloadHeight
if
lastHeight
>
startHeight
{
if
lastHeight
-
startHeight
>
prev
.
DownloadHeight
{
maxDownload
=
1
}
//速度模式
for
processHeight
:=
startHeight
+
1
;
processHeight
<=
lastHeight
;
processHeight
+=
prev
.
DownloadHeight
+
1
{
for
processHeight
:=
startHeight
+
1
;
processHeight
<=
lastHeight
;
processHeight
+=
maxDownload
+
1
{
statMap
:=
make
(
map
[
string
]
*
models
.
RaspMinerStat
,
0
)
txsMap
:=
make
(
map
[
int64
]
*
models
.
RaspMinerTxs
,
0
)
statList
:=
make
([]
*
models
.
RaspMinerStat
,
0
)
txsList
:=
make
([]
*
models
.
RaspMinerTxs
,
0
)
var
wg
sync
.
WaitGroup
for
height
:=
processHeight
;
height
<=
processHeight
+
prev
.
DownloadHeight
;
height
++
{
for
height
:=
processHeight
;
height
<=
processHeight
+
maxDownload
;
height
++
{
wg
.
Add
(
1
)
go
func
(
height
int64
)
{
defer
wg
.
Done
()
err
:=
DealBlock
(
height
)
stat
,
txs
,
err
:=
DealBlock
(
height
)
if
err
!=
nil
{
logging
.
Error
(
"DealBlock err"
,
err
)
panic
(
err
)
}
statList
=
append
(
statList
,
stat
)
txsList
=
append
(
txsList
,
txs
)
}(
height
)
}
//db.SetMainNetHeight(int(processHeight + types.MaxProcessBlocks + 1))
wg
.
Wait
()
for
_
,
v
:=
range
statList
{
if
v
!=
nil
&&
v
.
Addr
!=
""
{
if
_
,
ok
:=
statMap
[
v
.
Addr
];
!
ok
{
statMap
[
v
.
Addr
]
=
v
}
}
}
for
_
,
v
:=
range
txsList
{
if
v
!=
nil
&&
v
.
Height
>
0
{
if
_
,
ok
:=
txsMap
[
v
.
Height
];
!
ok
{
txsMap
[
v
.
Height
]
=
v
}
}
}
err
:=
models
.
UpdateBlocks
(
txsMap
,
statMap
,
processHeight
+
maxDownload
+
1
)
if
err
!=
nil
{
panic
(
err
)
}
prev
.
LocalHeight
+=
prev
.
DownloadHeight
+
1
logging
.
Info
(
"startHeight:"
,
processHeight
,
" endHeight:"
,
processHeight
+
maxDownload
+
1
)
}
t
=
time
.
Millisecond
*
50
}
else
{
prev
.
SetMainHeight
()
...
...
@@ -99,11 +129,11 @@ func (prev *prevHeight) SetMainHeight() error {
}
func
DealBlock
(
height
int64
)
error
{
func
DealBlock
(
height
int64
)
(
*
models
.
RaspMinerStat
,
*
models
.
RaspMinerTxs
,
error
)
{
blocks
,
err
:=
client
.
GetBlocks
(
&
types
.
ReqBlocks
{
Start
:
height
,
End
:
height
,
IsDetail
:
true
})
if
err
!=
nil
{
logging
.
Error
(
"GetBlocks err"
,
err
)
return
err
return
nil
,
nil
,
err
}
block
:=
blocks
.
GetItems
()[
0
]
rs
:=
&
RMinerStat
{}
...
...
@@ -114,7 +144,7 @@ func DealBlock(height int64) error {
rt1
,
rs1
,
err
:=
dealTx
(
v
)
if
err
!=
nil
{
logging
.
Error
(
"dealTx err "
,
err
)
return
err
return
nil
,
nil
,
err
}
if
rt1
!=
nil
&&
rt1
.
Miner
!=
""
{
rt
.
Miner
=
rt1
.
Miner
...
...
@@ -144,13 +174,12 @@ func DealBlock(height int64) error {
//}
raspStat
:=
NewMinerStat
(
rs
)
raspTxs
:=
NewMinerTxs
(
rt
)
err
=
models
.
UpdateBlock
(
raspTxs
,
raspStat
)
if
err
!=
nil
{
logging
.
Error
(
"UpdateBlock err "
,
err
)
return
err
}
logging
.
Info
(
"HEIGHT :"
,
height
,
" is ok "
)
return
nil
//err = models.UpdateBlock(raspTxs,raspStat)
//if err != nil {
// logging.Error("UpdateBlock err ",err)
// return err
//}
return
raspStat
,
raspTxs
,
nil
}
type
RMinerTxs
struct
{
...
...
models/transaction.go
View file @
62933df4
...
...
@@ -32,7 +32,7 @@ func UpdateBlock(rt *RaspMinerTxs,rs *RaspMinerStat) error {
MinedAmount
:
prev
.
MinedAmount
+
rs
.
MinedAmount
,
MinedTicketCount
:
prev
.
MinedTicketCount
+
rs
.
MinedTicketCount
,
MiningTicketCount
:
prev
.
MiningTicketCount
+
rs
.
MiningTicketCount
,
Height
:
rs
.
Time
,
Height
:
rs
.
Height
,
Time
:
rs
.
Time
,
})
.
Error
;
err
!=
nil
{
tx
.
Rollback
()
...
...
@@ -52,3 +52,60 @@ func UpdateBlock(rt *RaspMinerTxs,rs *RaspMinerStat) error {
return
tx
.
Commit
()
.
Error
}
func
UpdateBlocks
(
rt
map
[
int64
]
*
RaspMinerTxs
,
rs
map
[
string
]
*
RaspMinerStat
,
height
int64
)
error
{
tx
:=
db
.
Begin
()
defer
func
()
{
if
r
:=
recover
();
r
!=
nil
{
tx
.
Rollback
()
}
}()
if
err
:=
tx
.
Error
;
err
!=
nil
{
return
err
}
for
_
,
v
:=
range
rt
{
var
res
RaspMinerTxs
if
err
:=
tx
.
Where
(
&
RaspMinerTxs
{
Height
:
v
.
Height
})
.
Assign
(
v
)
.
FirstOrCreate
(
&
res
)
.
Error
;
err
!=
nil
{
tx
.
Rollback
()
return
err
}
}
for
_
,
v
:=
range
rs
{
var
prev
RaspMinerStat
err
:=
tx
.
Model
(
&
RaspMinerStat
{})
.
Where
(
&
RaspMinerStat
{
Addr
:
v
.
Addr
})
.
First
(
&
prev
)
.
Error
if
err
!=
nil
{
//不存在创建
if
err
==
gorm
.
ErrRecordNotFound
{
if
err
:=
tx
.
Create
(
v
)
.
Error
;
err
!=
nil
{
tx
.
Rollback
()
return
err
}
}
else
{
tx
.
Rollback
()
return
err
}
}
else
{
//存在 则更新状态
if
err
:=
tx
.
Model
(
&
RaspMinerStat
{})
.
Where
(
"Addr = ? "
,
v
.
Addr
)
.
Update
(
&
RaspMinerStat
{
MinedAmount
:
prev
.
MinedAmount
+
v
.
MinedAmount
,
MinedTicketCount
:
prev
.
MinedTicketCount
+
v
.
MinedTicketCount
,
MiningTicketCount
:
prev
.
MiningTicketCount
+
v
.
MiningTicketCount
,
Height
:
v
.
Height
,
Time
:
v
.
Time
,
})
.
Error
;
err
!=
nil
{
tx
.
Rollback
()
return
err
}
}
}
if
err
:=
tx
.
Model
(
&
RaspConfig
{})
.
Where
(
"config = ? "
,
"height"
)
.
Update
(
"Height"
,
height
)
.
Error
;
err
!=
nil
{
tx
.
Rollback
()
return
err
}
return
tx
.
Commit
()
.
Error
}
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