Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
plugin
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
link33
plugin
Commits
ec2de227
Commit
ec2de227
authored
Jul 22, 2019
by
liuyuhang
Committed by
33cn
Aug 14, 2019
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add rule project localdb test
parent
17a57671
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
627 additions
and
117 deletions
+627
-117
board.go
plugin/dapp/autonomy/executor/board.go
+1
-1
board_test.go
plugin/dapp/autonomy/executor/board_test.go
+15
-14
boardaction.go
plugin/dapp/autonomy/executor/boardaction.go
+6
-4
project_test.go
plugin/dapp/autonomy/executor/project_test.go
+255
-0
projectaction.go
plugin/dapp/autonomy/executor/projectaction.go
+7
-6
rule_test.go
plugin/dapp/autonomy/executor/rule_test.go
+249
-0
ruleaction.go
plugin/dapp/autonomy/executor/ruleaction.go
+14
-13
ruleaction_test.go
plugin/dapp/autonomy/executor/ruleaction_test.go
+3
-3
board.proto
plugin/dapp/autonomy/proto/board.proto
+2
-1
rule.proto
plugin/dapp/autonomy/proto/rule.proto
+1
-1
board.pb.go
plugin/dapp/autonomy/types/board.pb.go
+37
-37
rule.pb.go
plugin/dapp/autonomy/types/rule.pb.go
+37
-37
No files found.
plugin/dapp/autonomy/executor/board.go
View file @
ec2de227
...
@@ -125,7 +125,7 @@ func (a *Autonomy) getProposalBoard(req *auty.ReqQueryProposalBoard) (types.Mess
...
@@ -125,7 +125,7 @@ func (a *Autonomy) getProposalBoard(req *auty.ReqQueryProposalBoard) (types.Mess
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
rep
.
Pro
Boards
=
append
(
rep
.
Pro
Boards
,
prop
)
rep
.
Pro
pBoards
=
append
(
rep
.
Prop
Boards
,
prop
)
}
}
return
&
rep
,
nil
return
&
rep
,
nil
}
}
...
...
plugin/dapp/autonomy/executor/board_test.go
View file @
ec2de227
...
@@ -194,11 +194,11 @@ func TestGetProposalBoard(t *testing.T) {
...
@@ -194,11 +194,11 @@ func TestGetProposalBoard(t *testing.T) {
}
}
rsp
,
err
:=
au
.
getProposalBoard
(
req
)
rsp
,
err
:=
au
.
getProposalBoard
(
req
)
require
.
NoError
(
t
,
err
)
require
.
NoError
(
t
,
err
)
require
.
Equal
(
t
,
len
(
rsp
.
(
*
auty
.
ReplyQueryProposalBoard
)
.
ProBoards
),
len
(
testcase2
))
require
.
Equal
(
t
,
len
(
rsp
.
(
*
auty
.
ReplyQueryProposalBoard
)
.
Pro
p
Boards
),
len
(
testcase2
))
k
:=
2
k
:=
2
for
_
,
tcase
:=
range
testcase2
{
for
_
,
tcase
:=
range
testcase2
{
require
.
Equal
(
t
,
rsp
.
(
*
auty
.
ReplyQueryProposalBoard
)
.
ProBoards
[
k
]
.
Height
,
tcase
.
height
)
require
.
Equal
(
t
,
rsp
.
(
*
auty
.
ReplyQueryProposalBoard
)
.
Pro
p
Boards
[
k
]
.
Height
,
tcase
.
height
)
require
.
Equal
(
t
,
rsp
.
(
*
auty
.
ReplyQueryProposalBoard
)
.
ProBoards
[
k
]
.
Index
,
int32
(
tcase
.
index
))
require
.
Equal
(
t
,
rsp
.
(
*
auty
.
ReplyQueryProposalBoard
)
.
Pro
p
Boards
[
k
]
.
Index
,
int32
(
tcase
.
index
))
k
--
k
--
}
}
...
@@ -211,10 +211,10 @@ func TestGetProposalBoard(t *testing.T) {
...
@@ -211,10 +211,10 @@ func TestGetProposalBoard(t *testing.T) {
}
}
rsp
,
err
=
au
.
getProposalBoard
(
req
)
rsp
,
err
=
au
.
getProposalBoard
(
req
)
require
.
NoError
(
t
,
err
)
require
.
NoError
(
t
,
err
)
require
.
Equal
(
t
,
len
(
rsp
.
(
*
auty
.
ReplyQueryProposalBoard
)
.
ProBoards
),
len
(
testcase2
))
require
.
Equal
(
t
,
len
(
rsp
.
(
*
auty
.
ReplyQueryProposalBoard
)
.
Pro
p
Boards
),
len
(
testcase2
))
for
i
,
tcase
:=
range
testcase2
{
for
i
,
tcase
:=
range
testcase2
{
require
.
Equal
(
t
,
rsp
.
(
*
auty
.
ReplyQueryProposalBoard
)
.
ProBoards
[
i
]
.
Height
,
tcase
.
height
)
require
.
Equal
(
t
,
rsp
.
(
*
auty
.
ReplyQueryProposalBoard
)
.
Pro
p
Boards
[
i
]
.
Height
,
tcase
.
height
)
require
.
Equal
(
t
,
rsp
.
(
*
auty
.
ReplyQueryProposalBoard
)
.
ProBoards
[
i
]
.
Index
,
int32
(
tcase
.
index
))
require
.
Equal
(
t
,
rsp
.
(
*
auty
.
ReplyQueryProposalBoard
)
.
Pro
p
Boards
[
i
]
.
Index
,
int32
(
tcase
.
index
))
}
}
// 翻页查找
// 翻页查找
...
@@ -226,9 +226,9 @@ func TestGetProposalBoard(t *testing.T) {
...
@@ -226,9 +226,9 @@ func TestGetProposalBoard(t *testing.T) {
}
}
rsp
,
err
=
au
.
getProposalBoard
(
req
)
rsp
,
err
=
au
.
getProposalBoard
(
req
)
require
.
NoError
(
t
,
err
)
require
.
NoError
(
t
,
err
)
require
.
Equal
(
t
,
len
(
rsp
.
(
*
auty
.
ReplyQueryProposalBoard
)
.
ProBoards
),
1
)
require
.
Equal
(
t
,
len
(
rsp
.
(
*
auty
.
ReplyQueryProposalBoard
)
.
Pro
p
Boards
),
1
)
height
:=
rsp
.
(
*
auty
.
ReplyQueryProposalBoard
)
.
ProBoards
[
0
]
.
Height
height
:=
rsp
.
(
*
auty
.
ReplyQueryProposalBoard
)
.
Pro
p
Boards
[
0
]
.
Height
index
:=
rsp
.
(
*
auty
.
ReplyQueryProposalBoard
)
.
ProBoards
[
0
]
.
Index
index
:=
rsp
.
(
*
auty
.
ReplyQueryProposalBoard
)
.
Pro
p
Boards
[
0
]
.
Index
require
.
Equal
(
t
,
height
,
testcase2
[
2
]
.
height
)
require
.
Equal
(
t
,
height
,
testcase2
[
2
]
.
height
)
require
.
Equal
(
t
,
index
,
int32
(
testcase2
[
2
]
.
index
))
require
.
Equal
(
t
,
index
,
int32
(
testcase2
[
2
]
.
index
))
//
//
...
@@ -240,9 +240,9 @@ func TestGetProposalBoard(t *testing.T) {
...
@@ -240,9 +240,9 @@ func TestGetProposalBoard(t *testing.T) {
Index
:
Index
,
Index
:
Index
,
}
}
rsp
,
err
=
au
.
getProposalBoard
(
req
)
rsp
,
err
=
au
.
getProposalBoard
(
req
)
require
.
Equal
(
t
,
len
(
rsp
.
(
*
auty
.
ReplyQueryProposalBoard
)
.
ProBoards
),
2
)
require
.
Equal
(
t
,
len
(
rsp
.
(
*
auty
.
ReplyQueryProposalBoard
)
.
Pro
p
Boards
),
2
)
require
.
Equal
(
t
,
rsp
.
(
*
auty
.
ReplyQueryProposalBoard
)
.
ProBoards
[
0
]
.
Height
,
testcase2
[
1
]
.
height
)
require
.
Equal
(
t
,
rsp
.
(
*
auty
.
ReplyQueryProposalBoard
)
.
Pro
p
Boards
[
0
]
.
Height
,
testcase2
[
1
]
.
height
)
require
.
Equal
(
t
,
rsp
.
(
*
auty
.
ReplyQueryProposalBoard
)
.
ProBoards
[
0
]
.
Index
,
int32
(
testcase2
[
1
]
.
index
))
require
.
Equal
(
t
,
rsp
.
(
*
auty
.
ReplyQueryProposalBoard
)
.
Pro
p
Boards
[
0
]
.
Index
,
int32
(
testcase2
[
1
]
.
index
))
require
.
Equal
(
t
,
rsp
.
(
*
auty
.
ReplyQueryProposalBoard
)
.
ProBoards
[
1
]
.
Height
,
testcase2
[
0
]
.
height
)
require
.
Equal
(
t
,
rsp
.
(
*
auty
.
ReplyQueryProposalBoard
)
.
Pro
p
Boards
[
1
]
.
Height
,
testcase2
[
0
]
.
height
)
require
.
Equal
(
t
,
rsp
.
(
*
auty
.
ReplyQueryProposalBoard
)
.
ProBoards
[
1
]
.
Index
,
int32
(
testcase2
[
0
]
.
index
))
require
.
Equal
(
t
,
rsp
.
(
*
auty
.
ReplyQueryProposalBoard
)
.
Pro
p
Boards
[
1
]
.
Index
,
int32
(
testcase2
[
0
]
.
index
))
}
}
\ No newline at end of file
plugin/dapp/autonomy/executor/boardaction.go
View file @
ec2de227
...
@@ -112,7 +112,7 @@ func (a *action) rvkPropBoard(rvkProb *auty.RevokeProposalBoard) (*types.Receipt
...
@@ -112,7 +112,7 @@ func (a *action) rvkPropBoard(rvkProb *auty.RevokeProposalBoard) (*types.Receipt
}
}
start
:=
cur
.
GetPropBoard
()
.
StartBlockHeight
start
:=
cur
.
GetPropBoard
()
.
StartBlockHeight
if
a
.
height
>
start
{
if
a
.
height
>
=
start
{
err
:=
auty
.
ErrRevokeProposalPeriod
err
:=
auty
.
ErrRevokeProposalPeriod
alog
.
Error
(
"rvkPropBoard "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"ProposalID"
,
alog
.
Error
(
"rvkPropBoard "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"ProposalID"
,
rvkProb
.
ProposalID
,
"err"
,
err
)
rvkProb
.
ProposalID
,
"err"
,
err
)
...
@@ -156,7 +156,8 @@ func (a *action) votePropBoard(voteProb *auty.VoteProposalBoard) (*types.Receipt
...
@@ -156,7 +156,8 @@ func (a *action) votePropBoard(voteProb *auty.VoteProposalBoard) (*types.Receipt
pre
:=
copyAutonomyProposalBoard
(
cur
)
pre
:=
copyAutonomyProposalBoard
(
cur
)
// 检查当前状态
// 检查当前状态
if
cur
.
Status
!=
auty
.
AutonomyStatusProposalBoard
&&
cur
.
Status
!=
auty
.
AutonomyStatusVotePropBoard
{
if
cur
.
Status
==
auty
.
AutonomyStatusRvkPropBoard
||
cur
.
Status
==
auty
.
AutonomyStatusTmintPropBoard
{
err
:=
auty
.
ErrProposalStatus
err
:=
auty
.
ErrProposalStatus
alog
.
Error
(
"votePropBoard "
,
"addr"
,
a
.
fromaddr
,
"status"
,
cur
.
Status
,
"ProposalID"
,
alog
.
Error
(
"votePropBoard "
,
"addr"
,
a
.
fromaddr
,
"status"
,
cur
.
Status
,
"ProposalID"
,
voteProb
.
ProposalID
,
"err"
,
err
)
voteProb
.
ProposalID
,
"err"
,
err
)
...
@@ -166,7 +167,7 @@ func (a *action) votePropBoard(voteProb *auty.VoteProposalBoard) (*types.Receipt
...
@@ -166,7 +167,7 @@ func (a *action) votePropBoard(voteProb *auty.VoteProposalBoard) (*types.Receipt
start
:=
cur
.
GetPropBoard
()
.
StartBlockHeight
start
:=
cur
.
GetPropBoard
()
.
StartBlockHeight
end
:=
cur
.
GetPropBoard
()
.
EndBlockHeight
end
:=
cur
.
GetPropBoard
()
.
EndBlockHeight
real
:=
cur
.
GetPropBoard
()
.
RealEndBlockHeight
real
:=
cur
.
GetPropBoard
()
.
RealEndBlockHeight
if
start
<
a
.
height
||
end
<
a
.
height
||
(
real
!=
0
&&
real
<
a
.
height
)
{
if
a
.
height
<
start
||
a
.
height
>
end
||
real
!=
0
{
err
:=
auty
.
ErrVotePeriod
err
:=
auty
.
ErrVotePeriod
alog
.
Error
(
"votePropBoard "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"ProposalID"
,
alog
.
Error
(
"votePropBoard "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"ProposalID"
,
voteProb
.
ProposalID
,
"err"
,
err
)
voteProb
.
ProposalID
,
"err"
,
err
)
...
@@ -259,7 +260,8 @@ func (a *action) tmintPropBoard(tmintProb *auty.TerminateProposalBoard) (*types.
...
@@ -259,7 +260,8 @@ func (a *action) tmintPropBoard(tmintProb *auty.TerminateProposalBoard) (*types.
pre
:=
copyAutonomyProposalBoard
(
cur
)
pre
:=
copyAutonomyProposalBoard
(
cur
)
// 检查当前状态
// 检查当前状态
if
cur
.
Status
==
auty
.
AutonomyStatusTmintPropBoard
{
if
cur
.
Status
==
auty
.
AutonomyStatusTmintPropBoard
||
cur
.
Status
==
auty
.
AutonomyStatusRvkPropBoard
{
err
:=
auty
.
ErrProposalStatus
err
:=
auty
.
ErrProposalStatus
alog
.
Error
(
"tmintPropBoard "
,
"addr"
,
a
.
fromaddr
,
"status"
,
cur
.
Status
,
"status is not match"
,
alog
.
Error
(
"tmintPropBoard "
,
"addr"
,
a
.
fromaddr
,
"status"
,
cur
.
Status
,
"status is not match"
,
tmintProb
.
ProposalID
,
"err"
,
err
)
tmintProb
.
ProposalID
,
"err"
,
err
)
...
...
plugin/dapp/autonomy/executor/project_test.go
0 → 100644
View file @
ec2de227
// Copyright Fuzamei Corp. 2018 All Rights Reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package
executor
import
(
"testing"
"github.com/33cn/chain33/types"
auty
"github.com/33cn/plugin/plugin/dapp/autonomy/types"
"github.com/stretchr/testify/require"
"github.com/33cn/chain33/system/dapp"
"github.com/33cn/chain33/util"
)
func
TestExecLocalProject
(
t
*
testing
.
T
)
{
au
:=
&
Autonomy
{}
//TyLogPropProject
cur
:=
&
auty
.
AutonomyProposalProject
{
PropProject
:
&
auty
.
ProposalProject
{},
CurRule
:
&
auty
.
RuleConfig
{},
Boards
:
[]
string
{
"111"
,
"222"
,
"333"
},
BoardVoteRes
:
&
auty
.
VoteResult
{},
PubVote
:
&
auty
.
PublicVote
{},
Status
:
auty
.
AutonomyStatusProposalProject
,
Address
:
"11111111111111"
,
Height
:
1
,
Index
:
2
,
}
receiptProject
:=
&
auty
.
ReceiptProposalProject
{
Prev
:
nil
,
Current
:
cur
,
}
receipt
:=
&
types
.
ReceiptData
{
Logs
:
[]
*
types
.
ReceiptLog
{
{
Ty
:
auty
.
TyLogPropProject
,
Log
:
types
.
Encode
(
receiptProject
)},
},
}
set
,
err
:=
au
.
execLocalProject
(
receipt
)
require
.
NoError
(
t
,
err
)
require
.
NotNil
(
t
,
set
)
require
.
Equal
(
t
,
set
.
KV
[
0
]
.
Key
,
calcProjectKey4StatusHeight
(
cur
.
Status
,
dapp
.
HeightIndexStr
(
cur
.
Height
,
int64
(
cur
.
Index
))))
// TyLogRvkPropProject
pre1
:=
copyAutonomyProposalProject
(
cur
)
cur
.
Status
=
auty
.
AutonomyStatusRvkPropProject
cur
.
Height
=
2
cur
.
Index
=
3
receiptProject1
:=
&
auty
.
ReceiptProposalProject
{
Prev
:
pre1
,
Current
:
cur
,
}
set
,
err
=
au
.
execLocalProject
(
&
types
.
ReceiptData
{
Logs
:
[]
*
types
.
ReceiptLog
{
{
Ty
:
auty
.
TyLogRvkPropProject
,
Log
:
types
.
Encode
(
receiptProject1
)},
},
})
require
.
NoError
(
t
,
err
)
require
.
NotNil
(
t
,
set
)
require
.
Equal
(
t
,
set
.
KV
[
0
]
.
Key
,
calcProjectKey4StatusHeight
(
pre1
.
Status
,
dapp
.
HeightIndexStr
(
pre1
.
Height
,
int64
(
pre1
.
Index
))))
require
.
Equal
(
t
,
set
.
KV
[
0
]
.
Value
,
[]
byte
(
nil
))
require
.
Equal
(
t
,
set
.
KV
[
1
]
.
Key
,
calcProjectKey4StatusHeight
(
cur
.
Status
,
dapp
.
HeightIndexStr
(
cur
.
Height
,
int64
(
cur
.
Index
))))
// TyLogVotePropProject
cur
.
Status
=
auty
.
AutonomyStatusProposalProject
cur
.
Height
=
1
cur
.
Index
=
2
pre2
:=
copyAutonomyProposalProject
(
cur
)
cur
.
Status
=
auty
.
AutonomyStatusVotePropProject
cur
.
Height
=
2
cur
.
Index
=
3
receiptProject2
:=
&
auty
.
ReceiptProposalProject
{
Prev
:
pre2
,
Current
:
cur
,
}
set
,
err
=
au
.
execLocalProject
(
&
types
.
ReceiptData
{
Logs
:
[]
*
types
.
ReceiptLog
{
{
Ty
:
auty
.
TyLogVotePropProject
,
Log
:
types
.
Encode
(
receiptProject2
)},
},
})
require
.
NoError
(
t
,
err
)
require
.
NotNil
(
t
,
set
)
require
.
Equal
(
t
,
set
.
KV
[
0
]
.
Key
,
calcProjectKey4StatusHeight
(
pre2
.
Status
,
dapp
.
HeightIndexStr
(
pre1
.
Height
,
int64
(
pre2
.
Index
))))
require
.
Equal
(
t
,
set
.
KV
[
0
]
.
Value
,
[]
byte
(
nil
))
require
.
Equal
(
t
,
set
.
KV
[
1
]
.
Key
,
calcProjectKey4StatusHeight
(
cur
.
Status
,
dapp
.
HeightIndexStr
(
cur
.
Height
,
int64
(
cur
.
Index
))))
}
func
TestExecDelLocalProject
(
t
*
testing
.
T
)
{
au
:=
&
Autonomy
{}
//TyLogPropProject
cur
:=
&
auty
.
AutonomyProposalProject
{
PropProject
:
&
auty
.
ProposalProject
{},
CurRule
:
&
auty
.
RuleConfig
{},
Boards
:
[]
string
{
"111"
,
"222"
,
"333"
},
BoardVoteRes
:
&
auty
.
VoteResult
{},
PubVote
:
&
auty
.
PublicVote
{},
Status
:
auty
.
AutonomyStatusProposalProject
,
Address
:
"11111111111111"
,
Height
:
1
,
Index
:
2
,
}
receiptProject
:=
&
auty
.
ReceiptProposalProject
{
Prev
:
nil
,
Current
:
cur
,
}
receipt
:=
&
types
.
ReceiptData
{
Logs
:
[]
*
types
.
ReceiptLog
{
{
Ty
:
auty
.
TyLogPropProject
,
Log
:
types
.
Encode
(
receiptProject
)},
},
}
set
,
err
:=
au
.
execDelLocalProject
(
receipt
)
require
.
NoError
(
t
,
err
)
require
.
NotNil
(
t
,
set
)
require
.
Equal
(
t
,
set
.
KV
[
0
]
.
Key
,
calcProjectKey4StatusHeight
(
cur
.
Status
,
dapp
.
HeightIndexStr
(
cur
.
Height
,
int64
(
cur
.
Index
))))
require
.
Equal
(
t
,
set
.
KV
[
0
]
.
Value
,
[]
byte
(
nil
))
// TyLogVotePropProject
pre1
:=
copyAutonomyProposalProject
(
cur
)
cur
.
Status
=
auty
.
AutonomyStatusVotePropProject
cur
.
Height
=
2
cur
.
Index
=
3
receiptProject2
:=
&
auty
.
ReceiptProposalProject
{
Prev
:
pre1
,
Current
:
cur
,
}
set
,
err
=
au
.
execDelLocalProject
(
&
types
.
ReceiptData
{
Logs
:
[]
*
types
.
ReceiptLog
{
{
Ty
:
auty
.
TyLogVotePropProject
,
Log
:
types
.
Encode
(
receiptProject2
)},
},
})
require
.
NoError
(
t
,
err
)
require
.
NotNil
(
t
,
set
)
require
.
Equal
(
t
,
set
.
KV
[
0
]
.
Key
,
calcProjectKey4StatusHeight
(
cur
.
Status
,
dapp
.
HeightIndexStr
(
cur
.
Height
,
int64
(
cur
.
Index
))))
require
.
Equal
(
t
,
set
.
KV
[
0
]
.
Value
,
[]
byte
(
nil
))
require
.
Equal
(
t
,
set
.
KV
[
1
]
.
Key
,
calcProjectKey4StatusHeight
(
pre1
.
Status
,
dapp
.
HeightIndexStr
(
pre1
.
Height
,
int64
(
pre1
.
Index
))))
require
.
NotNil
(
t
,
set
.
KV
[
1
]
.
Value
)
}
func
TestGetProposalProject
(
t
*
testing
.
T
)
{
au
:=
&
Autonomy
{
dapp
.
DriverBase
{},
}
_
,
_
,
kvdb
:=
util
.
CreateTestDB
()
au
.
SetLocalDB
(
kvdb
)
type
statu
struct
{
status
int32
height
int64
index
int64
}
testcase1
:=
[]
statu
{
{
auty
.
AutonomyStatusRvkPropProject
,
10
,
2
},
{
auty
.
AutonomyStatusVotePropProject
,
15
,
1
},
{
auty
.
AutonomyStatusTmintPropProject
,
20
,
1
},
}
testcase2
:=
[]
statu
{
{
auty
.
AutonomyStatusProposalProject
,
10
,
1
},
{
auty
.
AutonomyStatusProposalProject
,
20
,
2
},
{
auty
.
AutonomyStatusProposalProject
,
20
,
5
},
}
var
testcase
[]
statu
testcase
=
append
(
testcase
,
testcase1
...
)
testcase
=
append
(
testcase
,
testcase2
...
)
cur
:=
&
auty
.
AutonomyProposalProject
{
PropProject
:
&
auty
.
ProposalProject
{},
CurRule
:
&
auty
.
RuleConfig
{},
Boards
:
[]
string
{
"111"
,
"222"
,
"333"
},
BoardVoteRes
:
&
auty
.
VoteResult
{},
PubVote
:
&
auty
.
PublicVote
{},
Status
:
auty
.
AutonomyStatusProposalProject
,
Address
:
"11111111111111"
,
Height
:
1
,
Index
:
2
,
}
for
_
,
tcase
:=
range
testcase
{
key
:=
calcProjectKey4StatusHeight
(
tcase
.
status
,
dapp
.
HeightIndexStr
(
tcase
.
height
,
int64
(
tcase
.
index
)))
cur
.
Status
=
tcase
.
status
cur
.
Height
=
tcase
.
height
cur
.
Index
=
int32
(
tcase
.
index
)
value
:=
types
.
Encode
(
cur
)
kvdb
.
Set
(
key
,
value
)
}
// 反向查找
req
:=
&
auty
.
ReqQueryProposalProject
{
Status
:
auty
.
AutonomyStatusProposalProject
,
Count
:
10
,
Direction
:
0
,
Index
:
-
1
,
}
rsp
,
err
:=
au
.
getProposalProject
(
req
)
require
.
NoError
(
t
,
err
)
require
.
Equal
(
t
,
len
(
rsp
.
(
*
auty
.
ReplyQueryProposalProject
)
.
PropProjects
),
len
(
testcase2
))
k
:=
2
for
_
,
tcase
:=
range
testcase2
{
require
.
Equal
(
t
,
rsp
.
(
*
auty
.
ReplyQueryProposalProject
)
.
PropProjects
[
k
]
.
Height
,
tcase
.
height
)
require
.
Equal
(
t
,
rsp
.
(
*
auty
.
ReplyQueryProposalProject
)
.
PropProjects
[
k
]
.
Index
,
int32
(
tcase
.
index
))
k
--
}
// 正向查找
req
=
&
auty
.
ReqQueryProposalProject
{
Status
:
auty
.
AutonomyStatusProposalProject
,
Count
:
10
,
Direction
:
1
,
Index
:
-
1
,
}
rsp
,
err
=
au
.
getProposalProject
(
req
)
require
.
NoError
(
t
,
err
)
require
.
Equal
(
t
,
len
(
rsp
.
(
*
auty
.
ReplyQueryProposalProject
)
.
PropProjects
),
len
(
testcase2
))
for
i
,
tcase
:=
range
testcase2
{
require
.
Equal
(
t
,
rsp
.
(
*
auty
.
ReplyQueryProposalProject
)
.
PropProjects
[
i
]
.
Height
,
tcase
.
height
)
require
.
Equal
(
t
,
rsp
.
(
*
auty
.
ReplyQueryProposalProject
)
.
PropProjects
[
i
]
.
Index
,
int32
(
tcase
.
index
))
}
// 翻页查找
req
=
&
auty
.
ReqQueryProposalProject
{
Status
:
auty
.
AutonomyStatusProposalProject
,
Count
:
1
,
Direction
:
0
,
Index
:
-
1
,
}
rsp
,
err
=
au
.
getProposalProject
(
req
)
require
.
NoError
(
t
,
err
)
require
.
Equal
(
t
,
len
(
rsp
.
(
*
auty
.
ReplyQueryProposalProject
)
.
PropProjects
),
1
)
height
:=
rsp
.
(
*
auty
.
ReplyQueryProposalProject
)
.
PropProjects
[
0
]
.
Height
index
:=
rsp
.
(
*
auty
.
ReplyQueryProposalProject
)
.
PropProjects
[
0
]
.
Index
require
.
Equal
(
t
,
height
,
testcase2
[
2
]
.
height
)
require
.
Equal
(
t
,
index
,
int32
(
testcase2
[
2
]
.
index
))
//
Index
:=
height
*
types
.
MaxTxsPerBlock
+
int64
(
index
)
req
=
&
auty
.
ReqQueryProposalProject
{
Status
:
auty
.
AutonomyStatusProposalProject
,
Count
:
10
,
Direction
:
0
,
Index
:
Index
,
}
rsp
,
err
=
au
.
getProposalProject
(
req
)
require
.
Equal
(
t
,
len
(
rsp
.
(
*
auty
.
ReplyQueryProposalProject
)
.
PropProjects
),
2
)
require
.
Equal
(
t
,
rsp
.
(
*
auty
.
ReplyQueryProposalProject
)
.
PropProjects
[
0
]
.
Height
,
testcase2
[
1
]
.
height
)
require
.
Equal
(
t
,
rsp
.
(
*
auty
.
ReplyQueryProposalProject
)
.
PropProjects
[
0
]
.
Index
,
int32
(
testcase2
[
1
]
.
index
))
require
.
Equal
(
t
,
rsp
.
(
*
auty
.
ReplyQueryProposalProject
)
.
PropProjects
[
1
]
.
Height
,
testcase2
[
0
]
.
height
)
require
.
Equal
(
t
,
rsp
.
(
*
auty
.
ReplyQueryProposalProject
)
.
PropProjects
[
1
]
.
Index
,
int32
(
testcase2
[
0
]
.
index
))
}
\ No newline at end of file
plugin/dapp/autonomy/executor/projectaction.go
View file @
ec2de227
...
@@ -88,7 +88,7 @@ func (a *action) rvkPropProject(rvkProb *auty.RevokeProposalProject) (*types.Rec
...
@@ -88,7 +88,7 @@ func (a *action) rvkPropProject(rvkProb *auty.RevokeProposalProject) (*types.Rec
}
}
start
:=
cur
.
GetPropProject
()
.
StartBlockHeight
start
:=
cur
.
GetPropProject
()
.
StartBlockHeight
if
a
.
height
>
start
{
if
a
.
height
>
=
start
{
err
:=
auty
.
ErrRevokeProposalPeriod
err
:=
auty
.
ErrRevokeProposalPeriod
alog
.
Error
(
"rvkPropProject "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"ProposalID"
,
alog
.
Error
(
"rvkPropProject "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"ProposalID"
,
rvkProb
.
ProposalID
,
"err"
,
err
)
rvkProb
.
ProposalID
,
"err"
,
err
)
...
@@ -132,7 +132,9 @@ func (a *action) votePropProject(voteProb *auty.VoteProposalProject) (*types.Rec
...
@@ -132,7 +132,9 @@ func (a *action) votePropProject(voteProb *auty.VoteProposalProject) (*types.Rec
pre
:=
copyAutonomyProposalProject
(
cur
)
pre
:=
copyAutonomyProposalProject
(
cur
)
// 检查当前状态
// 检查当前状态
if
cur
.
Status
!=
auty
.
AutonomyStatusProposalProject
&&
cur
.
Status
!=
auty
.
AutonomyStatusVotePropProject
{
if
cur
.
Status
==
auty
.
AutonomyStatusRvkPropProject
||
cur
.
Status
==
auty
.
AutonomyStatusPubVotePropProject
||
cur
.
Status
==
auty
.
AutonomyStatusTmintPropProject
{
err
:=
auty
.
ErrProposalStatus
err
:=
auty
.
ErrProposalStatus
alog
.
Error
(
"votePropProject "
,
"addr"
,
a
.
fromaddr
,
"status"
,
cur
.
Status
,
"ProposalID"
,
alog
.
Error
(
"votePropProject "
,
"addr"
,
a
.
fromaddr
,
"status"
,
cur
.
Status
,
"ProposalID"
,
voteProb
.
ProposalID
,
"err"
,
err
)
voteProb
.
ProposalID
,
"err"
,
err
)
...
@@ -259,9 +261,7 @@ func (a *action) pubVotePropProject(voteProb *auty.PubVoteProposalProject) (*typ
...
@@ -259,9 +261,7 @@ func (a *action) pubVotePropProject(voteProb *auty.PubVoteProposalProject) (*typ
}
}
start
:=
cur
.
GetPropProject
()
.
StartBlockHeight
start
:=
cur
.
GetPropProject
()
.
StartBlockHeight
end
:=
cur
.
GetPropProject
()
.
EndBlockHeight
if
a
.
height
<
start
{
real
:=
cur
.
GetPropProject
()
.
RealEndBlockHeight
if
start
<
a
.
height
||
end
<
a
.
height
||
(
real
!=
0
&&
real
<
a
.
height
)
{
err
:=
auty
.
ErrVotePeriod
err
:=
auty
.
ErrVotePeriod
alog
.
Error
(
"pubVotePropProject "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"ProposalID"
,
alog
.
Error
(
"pubVotePropProject "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"ProposalID"
,
voteProb
.
ProposalID
,
"err"
,
err
)
voteProb
.
ProposalID
,
"err"
,
err
)
...
@@ -333,7 +333,8 @@ func (a *action) tmintPropProject(tmintProb *auty.TerminateProposalProject) (*ty
...
@@ -333,7 +333,8 @@ func (a *action) tmintPropProject(tmintProb *auty.TerminateProposalProject) (*ty
pre
:=
copyAutonomyProposalProject
(
cur
)
pre
:=
copyAutonomyProposalProject
(
cur
)
// 检查当前状态
// 检查当前状态
if
cur
.
Status
==
auty
.
AutonomyStatusTmintPropProject
{
if
cur
.
Status
==
auty
.
AutonomyStatusTmintPropProject
||
cur
.
Status
==
auty
.
AutonomyStatusRvkPropProject
{
err
:=
auty
.
ErrProposalStatus
err
:=
auty
.
ErrProposalStatus
alog
.
Error
(
"tmintPropProject "
,
"addr"
,
a
.
fromaddr
,
"status"
,
cur
.
Status
,
"status is not match"
,
alog
.
Error
(
"tmintPropProject "
,
"addr"
,
a
.
fromaddr
,
"status"
,
cur
.
Status
,
"status is not match"
,
tmintProb
.
ProposalID
,
"err"
,
err
)
tmintProb
.
ProposalID
,
"err"
,
err
)
...
...
plugin/dapp/autonomy/executor/rule_test.go
0 → 100644
View file @
ec2de227
// Copyright Fuzamei Corp. 2018 All Rights Reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package
executor
import
(
"testing"
"github.com/33cn/chain33/types"
auty
"github.com/33cn/plugin/plugin/dapp/autonomy/types"
"github.com/stretchr/testify/require"
"github.com/33cn/chain33/system/dapp"
"github.com/33cn/chain33/util"
)
func
TestExecLocalRule
(
t
*
testing
.
T
)
{
au
:=
&
Autonomy
{}
//TyLogPropRule
cur
:=
&
auty
.
AutonomyProposalRule
{
PropRule
:
&
auty
.
ProposalRule
{},
CurRule
:
&
auty
.
RuleConfig
{},
VoteResult
:
&
auty
.
VoteResult
{},
Status
:
auty
.
AutonomyStatusProposalRule
,
Address
:
"11111111111111"
,
Height
:
1
,
Index
:
2
,
}
receiptRule
:=
&
auty
.
ReceiptProposalRule
{
Prev
:
nil
,
Current
:
cur
,
}
receipt
:=
&
types
.
ReceiptData
{
Logs
:
[]
*
types
.
ReceiptLog
{
{
Ty
:
auty
.
TyLogPropRule
,
Log
:
types
.
Encode
(
receiptRule
)},
},
}
set
,
err
:=
au
.
execLocalRule
(
receipt
)
require
.
NoError
(
t
,
err
)
require
.
NotNil
(
t
,
set
)
require
.
Equal
(
t
,
set
.
KV
[
0
]
.
Key
,
calcRuleKey4StatusHeight
(
cur
.
Status
,
dapp
.
HeightIndexStr
(
cur
.
Height
,
int64
(
cur
.
Index
))))
// TyLogRvkPropRule
pre1
:=
copyAutonomyProposalRule
(
cur
)
cur
.
Status
=
auty
.
AutonomyStatusRvkPropRule
cur
.
Height
=
2
cur
.
Index
=
3
receiptRule1
:=
&
auty
.
ReceiptProposalRule
{
Prev
:
pre1
,
Current
:
cur
,
}
set
,
err
=
au
.
execLocalRule
(
&
types
.
ReceiptData
{
Logs
:
[]
*
types
.
ReceiptLog
{
{
Ty
:
auty
.
TyLogRvkPropRule
,
Log
:
types
.
Encode
(
receiptRule1
)},
},
})
require
.
NoError
(
t
,
err
)
require
.
NotNil
(
t
,
set
)
require
.
Equal
(
t
,
set
.
KV
[
0
]
.
Key
,
calcRuleKey4StatusHeight
(
pre1
.
Status
,
dapp
.
HeightIndexStr
(
pre1
.
Height
,
int64
(
pre1
.
Index
))))
require
.
Equal
(
t
,
set
.
KV
[
0
]
.
Value
,
[]
byte
(
nil
))
require
.
Equal
(
t
,
set
.
KV
[
1
]
.
Key
,
calcRuleKey4StatusHeight
(
cur
.
Status
,
dapp
.
HeightIndexStr
(
cur
.
Height
,
int64
(
cur
.
Index
))))
// TyLogVotePropRule
cur
.
Status
=
auty
.
AutonomyStatusProposalRule
cur
.
Height
=
1
cur
.
Index
=
2
pre2
:=
copyAutonomyProposalRule
(
cur
)
cur
.
Status
=
auty
.
AutonomyStatusVotePropRule
cur
.
Height
=
2
cur
.
Index
=
3
receiptRule2
:=
&
auty
.
ReceiptProposalRule
{
Prev
:
pre2
,
Current
:
cur
,
}
set
,
err
=
au
.
execLocalRule
(
&
types
.
ReceiptData
{
Logs
:
[]
*
types
.
ReceiptLog
{
{
Ty
:
auty
.
TyLogVotePropRule
,
Log
:
types
.
Encode
(
receiptRule2
)},
},
})
require
.
NoError
(
t
,
err
)
require
.
NotNil
(
t
,
set
)
require
.
Equal
(
t
,
set
.
KV
[
0
]
.
Key
,
calcRuleKey4StatusHeight
(
pre2
.
Status
,
dapp
.
HeightIndexStr
(
pre1
.
Height
,
int64
(
pre2
.
Index
))))
require
.
Equal
(
t
,
set
.
KV
[
0
]
.
Value
,
[]
byte
(
nil
))
require
.
Equal
(
t
,
set
.
KV
[
1
]
.
Key
,
calcRuleKey4StatusHeight
(
cur
.
Status
,
dapp
.
HeightIndexStr
(
cur
.
Height
,
int64
(
cur
.
Index
))))
}
func
TestExecDelLocalRule
(
t
*
testing
.
T
)
{
au
:=
&
Autonomy
{}
//TyLogPropRule
cur
:=
&
auty
.
AutonomyProposalRule
{
PropRule
:
&
auty
.
ProposalRule
{},
CurRule
:
&
auty
.
RuleConfig
{},
VoteResult
:
&
auty
.
VoteResult
{},
Status
:
auty
.
AutonomyStatusProposalRule
,
Address
:
"11111111111111"
,
Height
:
1
,
Index
:
2
,
}
receiptRule
:=
&
auty
.
ReceiptProposalRule
{
Prev
:
nil
,
Current
:
cur
,
}
receipt
:=
&
types
.
ReceiptData
{
Logs
:
[]
*
types
.
ReceiptLog
{
{
Ty
:
auty
.
TyLogPropRule
,
Log
:
types
.
Encode
(
receiptRule
)},
},
}
set
,
err
:=
au
.
execDelLocalRule
(
receipt
)
require
.
NoError
(
t
,
err
)
require
.
NotNil
(
t
,
set
)
require
.
Equal
(
t
,
set
.
KV
[
0
]
.
Key
,
calcRuleKey4StatusHeight
(
cur
.
Status
,
dapp
.
HeightIndexStr
(
cur
.
Height
,
int64
(
cur
.
Index
))))
require
.
Equal
(
t
,
set
.
KV
[
0
]
.
Value
,
[]
byte
(
nil
))
// TyLogVotePropRule
pre1
:=
copyAutonomyProposalRule
(
cur
)
cur
.
Status
=
auty
.
AutonomyStatusVotePropRule
cur
.
Height
=
2
cur
.
Index
=
3
receiptRule2
:=
&
auty
.
ReceiptProposalRule
{
Prev
:
pre1
,
Current
:
cur
,
}
set
,
err
=
au
.
execDelLocalRule
(
&
types
.
ReceiptData
{
Logs
:
[]
*
types
.
ReceiptLog
{
{
Ty
:
auty
.
TyLogVotePropRule
,
Log
:
types
.
Encode
(
receiptRule2
)},
},
})
require
.
NoError
(
t
,
err
)
require
.
NotNil
(
t
,
set
)
require
.
Equal
(
t
,
set
.
KV
[
0
]
.
Key
,
calcRuleKey4StatusHeight
(
cur
.
Status
,
dapp
.
HeightIndexStr
(
cur
.
Height
,
int64
(
cur
.
Index
))))
require
.
Equal
(
t
,
set
.
KV
[
0
]
.
Value
,
[]
byte
(
nil
))
require
.
Equal
(
t
,
set
.
KV
[
1
]
.
Key
,
calcRuleKey4StatusHeight
(
pre1
.
Status
,
dapp
.
HeightIndexStr
(
pre1
.
Height
,
int64
(
pre1
.
Index
))))
require
.
NotNil
(
t
,
set
.
KV
[
1
]
.
Value
)
}
func
TestGetProposalRule
(
t
*
testing
.
T
)
{
au
:=
&
Autonomy
{
dapp
.
DriverBase
{},
}
_
,
_
,
kvdb
:=
util
.
CreateTestDB
()
au
.
SetLocalDB
(
kvdb
)
type
statu
struct
{
status
int32
height
int64
index
int64
}
testcase1
:=
[]
statu
{
{
auty
.
AutonomyStatusRvkPropRule
,
10
,
2
},
{
auty
.
AutonomyStatusVotePropRule
,
15
,
1
},
{
auty
.
AutonomyStatusTmintPropRule
,
20
,
1
},
}
testcase2
:=
[]
statu
{
{
auty
.
AutonomyStatusProposalRule
,
10
,
1
},
{
auty
.
AutonomyStatusProposalRule
,
20
,
2
},
{
auty
.
AutonomyStatusProposalRule
,
20
,
5
},
}
var
testcase
[]
statu
testcase
=
append
(
testcase
,
testcase1
...
)
testcase
=
append
(
testcase
,
testcase2
...
)
cur
:=
&
auty
.
AutonomyProposalRule
{
PropRule
:
&
auty
.
ProposalRule
{},
CurRule
:
&
auty
.
RuleConfig
{},
VoteResult
:
&
auty
.
VoteResult
{},
Status
:
auty
.
AutonomyStatusProposalRule
,
Address
:
"11111111111111"
,
Height
:
1
,
Index
:
2
,
}
for
_
,
tcase
:=
range
testcase
{
key
:=
calcRuleKey4StatusHeight
(
tcase
.
status
,
dapp
.
HeightIndexStr
(
tcase
.
height
,
int64
(
tcase
.
index
)))
cur
.
Status
=
tcase
.
status
cur
.
Height
=
tcase
.
height
cur
.
Index
=
int32
(
tcase
.
index
)
value
:=
types
.
Encode
(
cur
)
kvdb
.
Set
(
key
,
value
)
}
// 反向查找
req
:=
&
auty
.
ReqQueryProposalRule
{
Status
:
auty
.
AutonomyStatusProposalRule
,
Count
:
10
,
Direction
:
0
,
Index
:
-
1
,
}
rsp
,
err
:=
au
.
getProposalRule
(
req
)
require
.
NoError
(
t
,
err
)
require
.
Equal
(
t
,
len
(
rsp
.
(
*
auty
.
ReplyQueryProposalRule
)
.
PropRules
),
len
(
testcase2
))
k
:=
2
for
_
,
tcase
:=
range
testcase2
{
require
.
Equal
(
t
,
rsp
.
(
*
auty
.
ReplyQueryProposalRule
)
.
PropRules
[
k
]
.
Height
,
tcase
.
height
)
require
.
Equal
(
t
,
rsp
.
(
*
auty
.
ReplyQueryProposalRule
)
.
PropRules
[
k
]
.
Index
,
int32
(
tcase
.
index
))
k
--
}
// 正向查找
req
=
&
auty
.
ReqQueryProposalRule
{
Status
:
auty
.
AutonomyStatusProposalRule
,
Count
:
10
,
Direction
:
1
,
Index
:
-
1
,
}
rsp
,
err
=
au
.
getProposalRule
(
req
)
require
.
NoError
(
t
,
err
)
require
.
Equal
(
t
,
len
(
rsp
.
(
*
auty
.
ReplyQueryProposalRule
)
.
PropRules
),
len
(
testcase2
))
for
i
,
tcase
:=
range
testcase2
{
require
.
Equal
(
t
,
rsp
.
(
*
auty
.
ReplyQueryProposalRule
)
.
PropRules
[
i
]
.
Height
,
tcase
.
height
)
require
.
Equal
(
t
,
rsp
.
(
*
auty
.
ReplyQueryProposalRule
)
.
PropRules
[
i
]
.
Index
,
int32
(
tcase
.
index
))
}
// 翻页查找
req
=
&
auty
.
ReqQueryProposalRule
{
Status
:
auty
.
AutonomyStatusProposalRule
,
Count
:
1
,
Direction
:
0
,
Index
:
-
1
,
}
rsp
,
err
=
au
.
getProposalRule
(
req
)
require
.
NoError
(
t
,
err
)
require
.
Equal
(
t
,
len
(
rsp
.
(
*
auty
.
ReplyQueryProposalRule
)
.
PropRules
),
1
)
height
:=
rsp
.
(
*
auty
.
ReplyQueryProposalRule
)
.
PropRules
[
0
]
.
Height
index
:=
rsp
.
(
*
auty
.
ReplyQueryProposalRule
)
.
PropRules
[
0
]
.
Index
require
.
Equal
(
t
,
height
,
testcase2
[
2
]
.
height
)
require
.
Equal
(
t
,
index
,
int32
(
testcase2
[
2
]
.
index
))
//
Index
:=
height
*
types
.
MaxTxsPerBlock
+
int64
(
index
)
req
=
&
auty
.
ReqQueryProposalRule
{
Status
:
auty
.
AutonomyStatusProposalRule
,
Count
:
10
,
Direction
:
0
,
Index
:
Index
,
}
rsp
,
err
=
au
.
getProposalRule
(
req
)
require
.
Equal
(
t
,
len
(
rsp
.
(
*
auty
.
ReplyQueryProposalRule
)
.
PropRules
),
2
)
require
.
Equal
(
t
,
rsp
.
(
*
auty
.
ReplyQueryProposalRule
)
.
PropRules
[
0
]
.
Height
,
testcase2
[
1
]
.
height
)
require
.
Equal
(
t
,
rsp
.
(
*
auty
.
ReplyQueryProposalRule
)
.
PropRules
[
0
]
.
Index
,
int32
(
testcase2
[
1
]
.
index
))
require
.
Equal
(
t
,
rsp
.
(
*
auty
.
ReplyQueryProposalRule
)
.
PropRules
[
1
]
.
Height
,
testcase2
[
0
]
.
height
)
require
.
Equal
(
t
,
rsp
.
(
*
auty
.
ReplyQueryProposalRule
)
.
PropRules
[
1
]
.
Index
,
int32
(
testcase2
[
0
]
.
index
))
}
\ No newline at end of file
plugin/dapp/autonomy/executor/ruleaction.go
View file @
ec2de227
...
@@ -45,7 +45,7 @@ func (a *action) propRule(prob *auty.ProposalRule) (*types.Receipt, error) {
...
@@ -45,7 +45,7 @@ func (a *action) propRule(prob *auty.ProposalRule) (*types.Receipt, error) {
cur
:=
&
auty
.
AutonomyProposalRule
{
cur
:=
&
auty
.
AutonomyProposalRule
{
PropRule
:
prob
,
PropRule
:
prob
,
Rule
:
rule
,
Cur
Rule
:
rule
,
VoteResult
:
&
auty
.
VoteResult
{},
VoteResult
:
&
auty
.
VoteResult
{},
Status
:
auty
.
AutonomyStatusProposalRule
,
Status
:
auty
.
AutonomyStatusProposalRule
,
Address
:
a
.
fromaddr
,
Address
:
a
.
fromaddr
,
...
@@ -81,7 +81,7 @@ func (a *action) rvkPropRule(rvkProb *auty.RevokeProposalRule) (*types.Receipt,
...
@@ -81,7 +81,7 @@ func (a *action) rvkPropRule(rvkProb *auty.RevokeProposalRule) (*types.Receipt,
}
}
start
:=
cur
.
GetPropRule
()
.
StartBlockHeight
start
:=
cur
.
GetPropRule
()
.
StartBlockHeight
if
a
.
height
>
start
{
if
a
.
height
>
=
start
{
err
:=
auty
.
ErrRevokeProposalPeriod
err
:=
auty
.
ErrRevokeProposalPeriod
alog
.
Error
(
"rvkPropRule "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"ProposalID"
,
alog
.
Error
(
"rvkPropRule "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"ProposalID"
,
rvkProb
.
ProposalID
,
"err"
,
err
)
rvkProb
.
ProposalID
,
"err"
,
err
)
...
@@ -98,9 +98,9 @@ func (a *action) rvkPropRule(rvkProb *auty.RevokeProposalRule) (*types.Receipt,
...
@@ -98,9 +98,9 @@ func (a *action) rvkPropRule(rvkProb *auty.RevokeProposalRule) (*types.Receipt,
var
logs
[]
*
types
.
ReceiptLog
var
logs
[]
*
types
.
ReceiptLog
var
kv
[]
*
types
.
KeyValue
var
kv
[]
*
types
.
KeyValue
receipt
,
err
:=
a
.
coinsAccount
.
ExecActive
(
a
.
fromaddr
,
a
.
execaddr
,
cur
.
Rule
.
ProposalAmount
)
receipt
,
err
:=
a
.
coinsAccount
.
ExecActive
(
a
.
fromaddr
,
a
.
execaddr
,
cur
.
Cur
Rule
.
ProposalAmount
)
if
err
!=
nil
{
if
err
!=
nil
{
alog
.
Error
(
"rvkPropRule "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"ExecActive amount"
,
cur
.
Rule
.
ProposalAmount
,
"err"
,
err
)
alog
.
Error
(
"rvkPropRule "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"ExecActive amount"
,
cur
.
Cur
Rule
.
ProposalAmount
,
"err"
,
err
)
return
nil
,
err
return
nil
,
err
}
}
logs
=
append
(
logs
,
receipt
.
Logs
...
)
logs
=
append
(
logs
,
receipt
.
Logs
...
)
...
@@ -125,7 +125,8 @@ func (a *action) votePropRule(voteProb *auty.VoteProposalRule) (*types.Receipt,
...
@@ -125,7 +125,8 @@ func (a *action) votePropRule(voteProb *auty.VoteProposalRule) (*types.Receipt,
pre
:=
copyAutonomyProposalRule
(
cur
)
pre
:=
copyAutonomyProposalRule
(
cur
)
// 检查当前状态
// 检查当前状态
if
cur
.
Status
!=
auty
.
AutonomyStatusProposalRule
&&
cur
.
Status
!=
auty
.
AutonomyStatusVotePropRule
{
if
cur
.
Status
==
auty
.
AutonomyStatusRvkPropRule
||
cur
.
Status
==
auty
.
AutonomyStatusTmintPropRule
{
err
:=
auty
.
ErrProposalStatus
err
:=
auty
.
ErrProposalStatus
alog
.
Error
(
"votePropRule "
,
"addr"
,
a
.
fromaddr
,
"status"
,
cur
.
Status
,
"ProposalID"
,
alog
.
Error
(
"votePropRule "
,
"addr"
,
a
.
fromaddr
,
"status"
,
cur
.
Status
,
"ProposalID"
,
voteProb
.
ProposalID
,
"err"
,
err
)
voteProb
.
ProposalID
,
"err"
,
err
)
...
@@ -135,7 +136,7 @@ func (a *action) votePropRule(voteProb *auty.VoteProposalRule) (*types.Receipt,
...
@@ -135,7 +136,7 @@ func (a *action) votePropRule(voteProb *auty.VoteProposalRule) (*types.Receipt,
start
:=
cur
.
GetPropRule
()
.
StartBlockHeight
start
:=
cur
.
GetPropRule
()
.
StartBlockHeight
end
:=
cur
.
GetPropRule
()
.
EndBlockHeight
end
:=
cur
.
GetPropRule
()
.
EndBlockHeight
real
:=
cur
.
GetPropRule
()
.
RealEndBlockHeight
real
:=
cur
.
GetPropRule
()
.
RealEndBlockHeight
if
start
<
a
.
height
||
end
<
a
.
height
||
(
real
!=
0
&&
real
<
a
.
height
)
{
if
a
.
height
<
start
||
a
.
height
>
end
||
real
!=
0
{
err
:=
auty
.
ErrVotePeriod
err
:=
auty
.
ErrVotePeriod
alog
.
Error
(
"votePropRule "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"ProposalID"
,
alog
.
Error
(
"votePropRule "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"ProposalID"
,
voteProb
.
ProposalID
,
"err"
,
err
)
voteProb
.
ProposalID
,
"err"
,
err
)
...
@@ -177,7 +178,7 @@ func (a *action) votePropRule(voteProb *auty.VoteProposalRule) (*types.Receipt,
...
@@ -177,7 +178,7 @@ func (a *action) votePropRule(voteProb *auty.VoteProposalRule) (*types.Receipt,
// 首次进入投票期,即将提案金转入自治系统地址
// 首次进入投票期,即将提案金转入自治系统地址
if
cur
.
Status
==
auty
.
AutonomyStatusProposalRule
{
if
cur
.
Status
==
auty
.
AutonomyStatusProposalRule
{
receipt
,
err
:=
a
.
coinsAccount
.
ExecTransferFrozen
(
cur
.
Address
,
autonomyAddr
,
a
.
execaddr
,
cur
.
Rule
.
ProposalAmount
)
receipt
,
err
:=
a
.
coinsAccount
.
ExecTransferFrozen
(
cur
.
Address
,
autonomyAddr
,
a
.
execaddr
,
cur
.
Cur
Rule
.
ProposalAmount
)
if
err
!=
nil
{
if
err
!=
nil
{
alog
.
Error
(
"votePropRule "
,
"addr"
,
cur
.
Address
,
"execaddr"
,
a
.
execaddr
,
"ExecTransferFrozen amount fail"
,
err
)
alog
.
Error
(
"votePropRule "
,
"addr"
,
cur
.
Address
,
"execaddr"
,
a
.
execaddr
,
"ExecTransferFrozen amount fail"
,
err
)
return
nil
,
err
return
nil
,
err
...
@@ -206,7 +207,7 @@ func (a *action) votePropRule(voteProb *auty.VoteProposalRule) (*types.Receipt,
...
@@ -206,7 +207,7 @@ func (a *action) votePropRule(voteProb *auty.VoteProposalRule) (*types.Receipt,
// 更新系统规则
// 更新系统规则
if
cur
.
VoteResult
.
Pass
{
if
cur
.
VoteResult
.
Pass
{
upRule
:=
upgradeRule
(
cur
.
Rule
,
cur
.
PropRule
.
RuleCfg
)
upRule
:=
upgradeRule
(
cur
.
Cur
Rule
,
cur
.
PropRule
.
RuleCfg
)
kv
=
append
(
kv
,
&
types
.
KeyValue
{
Key
:
activeRuleID
(),
Value
:
types
.
Encode
(
upRule
)})
kv
=
append
(
kv
,
&
types
.
KeyValue
{
Key
:
activeRuleID
(),
Value
:
types
.
Encode
(
upRule
)})
}
}
...
@@ -270,7 +271,7 @@ func (a *action) tmintPropRule(tmintProb *auty.TerminateProposalRule) (*types.Re
...
@@ -270,7 +271,7 @@ func (a *action) tmintPropRule(tmintProb *auty.TerminateProposalRule) (*types.Re
// 未进行投票情况下,符合提案关闭的也需要扣除提案费用
// 未进行投票情况下,符合提案关闭的也需要扣除提案费用
if
cur
.
Status
==
auty
.
AutonomyStatusProposalRule
{
if
cur
.
Status
==
auty
.
AutonomyStatusProposalRule
{
receipt
,
err
:=
a
.
coinsAccount
.
ExecTransferFrozen
(
cur
.
Address
,
autonomyAddr
,
a
.
execaddr
,
cur
.
Rule
.
ProposalAmount
)
receipt
,
err
:=
a
.
coinsAccount
.
ExecTransferFrozen
(
cur
.
Address
,
autonomyAddr
,
a
.
execaddr
,
cur
.
Cur
Rule
.
ProposalAmount
)
if
err
!=
nil
{
if
err
!=
nil
{
alog
.
Error
(
"votePropRule "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"ExecTransferFrozen amount fail"
,
err
)
alog
.
Error
(
"votePropRule "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"ExecTransferFrozen amount fail"
,
err
)
return
nil
,
err
return
nil
,
err
...
@@ -286,7 +287,7 @@ func (a *action) tmintPropRule(tmintProb *auty.TerminateProposalRule) (*types.Re
...
@@ -286,7 +287,7 @@ func (a *action) tmintPropRule(tmintProb *auty.TerminateProposalRule) (*types.Re
// 更新系统规则
// 更新系统规则
if
cur
.
VoteResult
.
Pass
{
if
cur
.
VoteResult
.
Pass
{
upRule
:=
upgradeRule
(
cur
.
Rule
,
cur
.
PropRule
.
RuleCfg
)
upRule
:=
upgradeRule
(
cur
.
Cur
Rule
,
cur
.
PropRule
.
RuleCfg
)
kv
=
append
(
kv
,
&
types
.
KeyValue
{
Key
:
activeRuleID
(),
Value
:
types
.
Encode
(
upRule
)})
kv
=
append
(
kv
,
&
types
.
KeyValue
{
Key
:
activeRuleID
(),
Value
:
types
.
Encode
(
upRule
)})
}
}
...
@@ -331,9 +332,9 @@ func copyAutonomyProposalRule(cur *auty.AutonomyProposalRule) *auty.AutonomyProp
...
@@ -331,9 +332,9 @@ func copyAutonomyProposalRule(cur *auty.AutonomyProposalRule) *auty.AutonomyProp
newAut
.
PropRule
.
RuleCfg
=
&
cfg
newAut
.
PropRule
.
RuleCfg
=
&
cfg
}
}
}
}
if
cur
.
Rule
!=
nil
{
if
cur
.
Cur
Rule
!=
nil
{
newRule
:=
*
cur
.
GetRule
()
newRule
:=
*
cur
.
Get
Cur
Rule
()
newAut
.
Rule
=
&
newRule
newAut
.
Cur
Rule
=
&
newRule
}
}
if
cur
.
VoteResult
!=
nil
{
if
cur
.
VoteResult
!=
nil
{
newRes
:=
*
cur
.
GetVoteResult
()
newRes
:=
*
cur
.
GetVoteResult
()
...
...
plugin/dapp/autonomy/executor/ruleaction_test.go
View file @
ec2de227
...
@@ -401,7 +401,7 @@ func TestCopyAutonomyProposalRule(t *testing.T) {
...
@@ -401,7 +401,7 @@ func TestCopyAutonomyProposalRule(t *testing.T) {
require
.
Nil
(
t
,
copyAutonomyProposalRule
(
nil
))
require
.
Nil
(
t
,
copyAutonomyProposalRule
(
nil
))
cur
:=
&
auty
.
AutonomyProposalRule
{
cur
:=
&
auty
.
AutonomyProposalRule
{
PropRule
:
&
auty
.
ProposalRule
{
Year
:
1900
,
Month
:
1
,
RuleCfg
:&
auty
.
RuleConfig
{
BoardApproveRatio
:
80
}},
PropRule
:
&
auty
.
ProposalRule
{
Year
:
1900
,
Month
:
1
,
RuleCfg
:&
auty
.
RuleConfig
{
BoardApproveRatio
:
80
}},
Rule
:
&
auty
.
RuleConfig
{
BoardApproveRatio
:
100
},
Cur
Rule
:
&
auty
.
RuleConfig
{
BoardApproveRatio
:
100
},
VoteResult
:
&
auty
.
VoteResult
{
TotalVotes
:
100
},
VoteResult
:
&
auty
.
VoteResult
{
TotalVotes
:
100
},
Status
:
2
,
Status
:
2
,
Address
:
"123"
,
Address
:
"123"
,
...
@@ -410,7 +410,7 @@ func TestCopyAutonomyProposalRule(t *testing.T) {
...
@@ -410,7 +410,7 @@ func TestCopyAutonomyProposalRule(t *testing.T) {
cur
.
PropRule
.
Year
=
1800
cur
.
PropRule
.
Year
=
1800
cur
.
PropRule
.
Month
=
2
cur
.
PropRule
.
Month
=
2
cur
.
PropRule
.
RuleCfg
.
BoardApproveRatio
=
90
cur
.
PropRule
.
RuleCfg
.
BoardApproveRatio
=
90
cur
.
Rule
.
BoardApproveRatio
=
90
cur
.
Cur
Rule
.
BoardApproveRatio
=
90
cur
.
VoteResult
.
TotalVotes
=
50
cur
.
VoteResult
.
TotalVotes
=
50
cur
.
Address
=
"234"
cur
.
Address
=
"234"
cur
.
Status
=
1
cur
.
Status
=
1
...
@@ -421,7 +421,7 @@ func TestCopyAutonomyProposalRule(t *testing.T) {
...
@@ -421,7 +421,7 @@ func TestCopyAutonomyProposalRule(t *testing.T) {
require
.
Equal
(
t
,
"123"
,
pre
.
Address
)
require
.
Equal
(
t
,
"123"
,
pre
.
Address
)
require
.
Equal
(
t
,
2
,
int
(
pre
.
Status
))
require
.
Equal
(
t
,
2
,
int
(
pre
.
Status
))
require
.
Equal
(
t
,
80
,
int
(
pre
.
PropRule
.
RuleCfg
.
BoardApproveRatio
))
require
.
Equal
(
t
,
80
,
int
(
pre
.
PropRule
.
RuleCfg
.
BoardApproveRatio
))
require
.
Equal
(
t
,
100
,
int
(
pre
.
Rule
.
BoardApproveRatio
))
require
.
Equal
(
t
,
100
,
int
(
pre
.
Cur
Rule
.
BoardApproveRatio
))
}
}
func
TestUpgradeRule
(
t
*
testing
.
T
)
{
func
TestUpgradeRule
(
t
*
testing
.
T
)
{
...
...
plugin/dapp/autonomy/proto/board.proto
View file @
ec2de227
...
@@ -72,5 +72,5 @@ message ReqQueryProposalBoard {
...
@@ -72,5 +72,5 @@ message ReqQueryProposalBoard {
}
}
message
ReplyQueryProposalBoard
{
message
ReplyQueryProposalBoard
{
repeated
AutonomyProposalBoard
proBoards
=
1
;
repeated
AutonomyProposalBoard
pro
p
Boards
=
1
;
}
}
\ No newline at end of file
plugin/dapp/autonomy/proto/rule.proto
View file @
ec2de227
...
@@ -10,7 +10,7 @@ package types;
...
@@ -10,7 +10,7 @@ package types;
message
AutonomyProposalRule
{
message
AutonomyProposalRule
{
ProposalRule
propRule
=
1
;
ProposalRule
propRule
=
1
;
RuleConfig
rule
=
2
;
RuleConfig
curRule
=
2
;
// 全体持票人投票结果
// 全体持票人投票结果
VoteResult
voteResult
=
3
;
VoteResult
voteResult
=
3
;
// 状态
// 状态
...
...
plugin/dapp/autonomy/types/board.pb.go
View file @
ec2de227
...
@@ -295,7 +295,7 @@ func (m *ReqQueryProposalBoard) GetIndex() int64 {
...
@@ -295,7 +295,7 @@ func (m *ReqQueryProposalBoard) GetIndex() int64 {
}
}
type
ReplyQueryProposalBoard
struct
{
type
ReplyQueryProposalBoard
struct
{
Pro
Boards
[]
*
AutonomyProposalBoard
`protobuf:"bytes,1,rep,name=proBoards" json:"pro
Boards,omitempty"`
Pro
pBoards
[]
*
AutonomyProposalBoard
`protobuf:"bytes,1,rep,name=propBoards" json:"prop
Boards,omitempty"`
}
}
func
(
m
*
ReplyQueryProposalBoard
)
Reset
()
{
*
m
=
ReplyQueryProposalBoard
{}
}
func
(
m
*
ReplyQueryProposalBoard
)
Reset
()
{
*
m
=
ReplyQueryProposalBoard
{}
}
...
@@ -303,9 +303,9 @@ func (m *ReplyQueryProposalBoard) String() string { return proto.Comp
...
@@ -303,9 +303,9 @@ func (m *ReplyQueryProposalBoard) String() string { return proto.Comp
func
(
*
ReplyQueryProposalBoard
)
ProtoMessage
()
{}
func
(
*
ReplyQueryProposalBoard
)
ProtoMessage
()
{}
func
(
*
ReplyQueryProposalBoard
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor1
,
[]
int
{
8
}
}
func
(
*
ReplyQueryProposalBoard
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor1
,
[]
int
{
8
}
}
func
(
m
*
ReplyQueryProposalBoard
)
GetProBoards
()
[]
*
AutonomyProposalBoard
{
func
(
m
*
ReplyQueryProposalBoard
)
GetPro
p
Boards
()
[]
*
AutonomyProposalBoard
{
if
m
!=
nil
{
if
m
!=
nil
{
return
m
.
ProBoards
return
m
.
Pro
p
Boards
}
}
return
nil
return
nil
}
}
...
@@ -325,38 +325,38 @@ func init() {
...
@@ -325,38 +325,38 @@ func init() {
func
init
()
{
proto
.
RegisterFile
(
"board.proto"
,
fileDescriptor1
)
}
func
init
()
{
proto
.
RegisterFile
(
"board.proto"
,
fileDescriptor1
)
}
var
fileDescriptor1
=
[]
byte
{
var
fileDescriptor1
=
[]
byte
{
// 52
3
bytes of a gzipped FileDescriptorProto
// 52
4
bytes of a gzipped FileDescriptorProto
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x02
,
0xff
,
0x94
,
0x54
,
0x
5d
,
0x6f
,
0xd3
,
0x3
0
,
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x02
,
0xff
,
0x94
,
0x54
,
0x
4d
,
0x6f
,
0xd3
,
0x4
0
,
0x1
4
,
0x55
,
0xda
,
0xa6
,
0x5d
,
0xef
,
0x34
,
0xb4
,
0x99
,
0x6e
,
0x44
,
0xd3
,
0x84
,
0xaa
,
0x3c
,
0xa
0
,
0x1
0
,
0x95
,
0x93
,
0x6c
,
0xd2
,
0x4c
,
0x55
,
0xd4
,
0x2e
,
0x69
,
0xb1
,
0xaa
,
0x0a
,
0x45
,
0x3e
,
0x2
0
,
0x0
a
,
0xa4
,
0x0a
,
0xc6
,
0x87
,
0x10
,
0x6f
,
0x14
,
0x90
,
0x40
,
0x02
,
0x09
,
0xae
,
0x80
,
0x77
,
0x2f
,
0x0
b
,
0xa4
,
0x08
,
0xca
,
0x87
,
0x38
,
0x70
,
0x21
,
0x80
,
0x04
,
0x12
,
0x48
,
0x30
,
0x42
,
0x70
,
0xde
,
0x
b9
,
0x5b
,
0xa3
,
0xa5
,
0xb6
,
0x71
,
0x9c
,
0x8a
,
0xbc
,
0xf1
,
0xce
,
0x0f
,
0xe5
,
0x6f
,
0xa0
,
0xdc
,
0x
da
,
0xd3
,
0xc6
,
0xaa
,
0xbd
,
0xbb
,
0xac
,
0xd7
,
0x11
,
0xbe
,
0x71
,
0xe7
,
0x87
,
0xf2
,
0x37
,
0x90
,
0x
b8
,
0x6b
,
0x33
,
0x2a
,
0x60
,
0x6f
,
0x39
,
0x37
,
0xe7
,
0xd8
,
0xf7
,
0xda
,
0xe7
,
0x18
,
0x76
,
0xcf
,
0x
d7
,
0x9b
,
0x26
,
0x2e
,
0x11
,
0xd0
,
0x9b
,
0xdf
,
0xf8
,
0xbd
,
0xdd
,
0x19
,
0xcf
,
0x7b
,
0x86
,
0xdd
,
0x
b4
,
0xb4
,
0xe9
,
0xd4
,
0x58
,
0xed
,
0xb4
,
0x08
,
0x5d
,
0x65
,
0xa8
,
0x38
,
0xde
,
0xcb
,
0x13
,
0xbd
,
0x
33
,
0x25
,
0x4c
,
0x3a
,
0xd3
,
0x46
,
0x59
,
0xc5
,
0x99
,
0xad
,
0x35
,
0x95
,
0xc7
,
0x7b
,
0x79
,
0xa2
,
0x
58
,
0x68
,
0xd5
,
0x54
,
0xe3
,
0x9f
,
0x1d
,
0x38
,
0x7c
,
0x59
,
0x3a
,
0xad
,
0xf4
,
0xa2
,
0xfa
,
0x68
,
0x
8a
,
0x42
,
0xc9
,
0xb6
,
0x1a
,
0xfd
,
0xec
,
0xc1
,
0xe1
,
0xcb
,
0xca
,
0x2a
,
0xa9
,
0x8a
,
0xfa
,
0xa3
,
0x
b5
,
0xd1
,
0x85
,
0xcc
,
0x67
,
0xb5
,
0x4a
,
0x9c
,
0xc2
,
0xd0
,
0x58
,
0x6d
,
0x18
,
0x44
,
0xc1
,
0x38
,
0x
51
,
0x5a
,
0x95
,
0x22
,
0x9f
,
0x37
,
0x2a
,
0x7e
,
0x0a
,
0x63
,
0x6d
,
0x94
,
0x76
,
0x20
,
0x0c
,
0xa6
,
0x
98
,
0xec
,
0x9e
,
0x8e
,
0xa6
,
0xbc
,
0xc6
,
0xb4
,
0x45
,
0xc4
,
0x35
,
0x4d
,
0x3c
,
0x80
,
0x41
,
0x5
2
,
0x
41
,
0xbc
,
0x7b
,
0x3a
,
0x99
,
0xb9
,
0x33
,
0x66
,
0x1d
,
0x22
,
0xae
,
0x69
,
0xfc
,
0x01
,
0x8c
,
0x9
2
,
0x
5a
,
0x2c
,
0x73
,
0x8a
,
0x3a
,
0xac
,
0x38
,
0xf0
,
0x8a
,
0xba
,
0xf4
,
0x4a
,
0xab
,
0xf3
,
0xec
,
0x02
,
0x
ca
,
0x60
,
0x95
,
0x53
,
0xd8
,
0x73
,
0x8a
,
0x03
,
0xaf
,
0x68
,
0x4a
,
0xaf
,
0x94
,
0x3c
,
0xcf
,
0x2e
,
0x
57
,
0x0c
,
0xf1
,
0x08
,
0x60
,
0xa9
,
0x1d
,
0x21
,
0x15
,
0x65
,
0xee
,
0xa2
,
0x6e
,
0x8b
,
0xff
,
0xf5
,
0x
70
,
0xc5
,
0xe0
,
0x8f
,
0x00
,
0x96
,
0xca
,
0x12
,
0x52
,
0x59
,
0xe5
,
0x36
,
0xec
,
0x77
,
0xf8
,
0x5f
,
0x
ea
,
0x07
,
0x6e
,
0x90
,
0xc4
,
0x11
,
0xf4
,
0x0b
,
0x27
,
0x5d
,
0x59
,
0x44
,
0xbd
,
0x71
,
0x30
,
0x09
,
0x
ae
,
0x5e
,
0xe0
,
0x06
,
0x89
,
0x1f
,
0xc1
,
0xb0
,
0xb4
,
0xc2
,
0x56
,
0x65
,
0x38
,
0x98
,
0x06
,
0x31
,
0x
d1
,
0x23
,
0x11
,
0xc1
,
0x40
,
0xa6
,
0xa9
,
0xa5
,
0xa2
,
0x88
,
0xc2
,
0x71
,
0x30
,
0x19
,
0xe2
,
0x0a
,
0x
43
,
0x8f
,
0x78
,
0x08
,
0x23
,
0x91
,
0xa6
,
0x86
,
0xca
,
0x32
,
0x64
,
0xd3
,
0x20
,
0x1e
,
0xe3
,
0x0a
,
0x
d6
,
0x8a
,
0x39
,
0x65
,
0x17
,
0x73
,
0x17
,
0xf5
,
0xc7
,
0xc1
,
0xa4
,
0x8b
,
0x1e
,
0x89
,
0x11
,
0x84
,
0x
36
,
0x8a
,
0x05
,
0x65
,
0x17
,
0x0b
,
0x1b
,
0x0e
,
0xa7
,
0x41
,
0xdc
,
0x47
,
0x8f
,
0xf8
,
0x04
,
0x58
,
0x
99
,
0x4a
,
0xe9
,
0x7b
,
0x34
,
0xe0
,
0x85
,
0x1a
,
0x10
,
0xff
,
0x0a
,
0x60
,
0xaf
,
0x7d
,
0x0a
,
0x02
,
0x
26
,
0x53
,
0xfa
,
0x1e
,
0x8e
,
0xdc
,
0x41
,
0x2d
,
0x88
,
0x7e
,
0x05
,
0xb0
,
0xd7
,
0xfd
,
0x0a
,
0x1c
,
0x
7a
,
0x15
,
0x49
,
0xcb
,
0x07
,
0x10
,
0x22
,
0x7f
,
0xd7
,
0xda
,
0x85
,
0x56
,
0x6e
,
0xce
,
0x33
,
0x86
,
0x
06
,
0x35
,
0x09
,
0xe3
,
0x3e
,
0x00
,
0x43
,
0xf7
,
0xdc
,
0x68
,
0x0b
,
0x25
,
0xed
,
0xc2
,
0xcd
,
0xc8
,
0x
d8
,
0x00
,
0xb1
,
0x0f
,
0xdd
,
0x54
,
0x56
,
0x3c
,
0x47
,
0x88
,
0xf5
,
0x67
,
0xbd
,
0x37
,
0x5f
,
0x4
0
,
0x
b0
,
0x05
,
0x7c
,
0x1f
,
0xfa
,
0xa9
,
0xa8
,
0xdd
,
0x1c
,
0x0c
,
0x9b
,
0xc7
,
0xe6
,
0x6e
,
0xb7
,
0x8
0
,
0x
dd
,
0x6d
,
0x77
,
0x32
,
0x44
,
0x8f
,
0xc4
,
0x7d
,
0xd8
,
0x2f
,
0x9c
,
0xb4
,
0x6e
,
0x96
,
0xe
b
,
0xe4
,
0x
a6
,
0xdb
,
0x7e
,
0x3c
,
0x46
,
0x8f
,
0xf8
,
0x7d
,
0xd8
,
0x2f
,
0xad
,
0x30
,
0x76
,
0x9e
,
0xa
b
,
0xe4
,
0xf2
,
0x6d
,
0xd
3
,
0x5d
,
0xc8
,
0xdd
,
0xfd
,
0x51
,
0x17
,
0xf7
,
0xe0
,
0x16
,
0xa
9
,
0x74
,
0x93
,
0xd9
,
0xf2
,
0x6d
,
0xd
b
,
0x1d
,
0x73
,
0xdd
,
0xfd
,
0x51
,
0xe7
,
0xf7
,
0xe0
,
0x16
,
0xc
9
,
0x74
,
0x93
,
0xd9
,
0xc
c
,
0x71
,
0xad
,
0x2a
,
0xa6
,
0x20
,
0x2c
,
0xc9
,
0xfc
,
0x4d
,
0x9b
,
0x3b
,
0x60
,
0xee
,
0x96
,
0x3
f
,
0xc
e
,
0x71
,
0xad
,
0xca
,
0x67
,
0xc0
,
0x0d
,
0x89
,
0xfc
,
0x4d
,
0x97
,
0x3b
,
0x72
,
0xdc
,
0x2d
,
0x6
f
,
0x
f1
,
0x53
,
0xb8
,
0x8d
,
0xb4
,
0xd4
,
0x97
,
0xd4
,
0x1e
,
0xf7
,
0x2e
,
0x80
,
0xf1
,
0x85
,
0x77
,
0xaf
,
0x
a2
,
0xa7
,
0x70
,
0x1b
,
0x69
,
0xa9
,
0x2e
,
0xa9
,
0x3b
,
0xee
,
0x5d
,
0x00
,
0xed
,
0x0b
,
0xef
,
0x5e
,
0x
79
,
0xe8
,
0x21
,
0x6e
,
0x54
,
0xe2
,
0x0f
,
0x70
,
0x50
,
0x5f
,
0xcd
,
0x8d
,
0x44
,
0x7c
,
0x3b
,
0xc6
,
0x
bb
,
0xa1
,
0xc7
,
0xb8
,
0x51
,
0x89
,
0x3e
,
0xc0
,
0x41
,
0xb3
,
0x9a
,
0x1b
,
0x89
,
0xdc
,
0x76
,
0xb4
,
0x
58
,
0xbd
,
0x6c
,
0x5c
,
0xb1
,
0x83
,
0x2b
,
0x18
,
0x3f
,
0x87
,
0xa3
,
0xcf
,
0x64
,
0x17
,
0x99
,
0x92
,
0x
36
,
0x6a
,
0xd9
,
0xba
,
0x62
,
0x07
,
0x57
,
0x30
,
0x7a
,
0x0e
,
0x47
,
0x9f
,
0xc9
,
0x14
,
0x99
,
0x14
,
0x37
,
0x
5c
,
0x33
,
0xfe
,
0x11
,
0xc0
,
0x08
,
0x29
,
0xa1
,
0xcc
,
0xb8
,
0xb6
,
0xf0
,
0x21
,
0xf4
,
0x8c
,
0x37
,
0x
3c
,
0x33
,
0xfa
,
0x11
,
0xc0
,
0x04
,
0x29
,
0xa1
,
0x4c
,
0xdb
,
0xae
,
0xf0
,
0x21
,
0x0c
,
0xb4
,
0xa
5
,
0xa5
,
0x77
,
0xec
,
0x89
,
0xf7
,
0xd3
,
0x56
,
0x8b
,
0x23
,
0x33
,
0xc5
,
0x33
,
0x36
,
0xad
,
0x25
,
0xa
1
,
0xa5
,
0x77
,
0xec
,
0x89
,
0xf7
,
0xd3
,
0x56
,
0x8b
,
0xa3
,
0x63
,
0xf2
,
0x67
,
0xce
,
0xb4
,
0x86
,
0x
e5
,
0xbc
,
0x69
,
0xff
,
0x2e
,
0x5a
,
0x91
,
0xe3
,
0x73
,
0x10
,
0xef
,
0x75
,
0x22
,
0xf3
,
0xf6
,
0xfe
,
0x
a4
,
0xf5
,
0xa6
,
0xfd
,
0xbb
,
0x68
,
0x45
,
0x8e
,
0xce
,
0x81
,
0xbf
,
0x57
,
0x89
,
0xc8
,
0xbb
,
0xf7
,
0x
4f
,
0xa0
,
0xcf
,
0x79
,
0x48
,
0xff
,
0xab
,
0x03
,
0xcf
,
0x15
,
0xc7
,
0xb0
,
0x53
,
0xc7
,
0x92
,
0x9
4
,
0x
3f
,
0x81
,
0xa1
,
0xcb
,
0x43
,
0xfa
,
0x5f
,
0x1d
,
0x78
,
0x2e
,
0x3f
,
0x86
,
0x9d
,
0x26
,
0x96
,
0x2
4
,
0x
2b
,
0xa2
,
0x0e
,
0x9b
,
0xe5
,
0x0a
,
0xc7
,
0x15
,
0x1c
,
0x22
,
0x7d
,
0xfb
,
0x54
,
0x92
,
0xbd
,
0x96
,
0x
6d
,
0x19
,
0xf6
,
0x9c
,
0x59
,
0xae
,
0x70
,
0x54
,
0xc3
,
0x21
,
0xd2
,
0xb7
,
0x4f
,
0x15
,
0x99
,
0x6b
,
0x
d0
,
0x75
,
0x1a
,
0x82
,
0x56
,
0x1a
,
0x46
,
0x10
,
0x26
,
0xba
,
0xf4
,
0xe3
,
0x84
,
0xd8
,
0x00
,
0x71
,
0x
09
,
0x5d
,
0xa7
,
0x21
,
0xe8
,
0xa4
,
0x61
,
0x02
,
0x2c
,
0x51
,
0x95
,
0x1f
,
0x87
,
0x61
,
0x0b
,
0xf8
,
0x0
2
,
0xc3
,
0x34
,
0xb3
,
0x94
,
0xb8
,
0x4c
,
0x2b
,
0xef
,
0xd2
,
0x75
,
0x61
,
0x9d
,
0x87
,
0x1e
,
0x5b
,
0x0
9
,
0x8c
,
0xd3
,
0xcc
,
0x50
,
0x62
,
0x33
,
0x25
,
0xbd
,
0x4b
,
0xd7
,
0x85
,
0x75
,
0x1e
,
0x06
,
0xce
,
0x
c6
,
0xe7
,
0xe1
,
0x0b
,
0xdc
,
0x41
,
0x32
,
0x79
,
0xb5
,
0x65
,
0xf3
,
0x17
,
0xfc
,
0x3c
,
0xcc
,
0x1a
,
0x
32
,
0x3e
,
0x0f
,
0x5f
,
0xe1
,
0x0e
,
0x92
,
0xce
,
0xeb
,
0x2d
,
0x97
,
0xbf
,
0x68
,
0x17
,
0x34
,
0x6f
,
0x
7f
,
0x07
,
0xe3
,
0xee
,
0x3f
,
0x47
,
0x5d
,
0xd3
,
0xcf
,
0xfa
,
0xfc
,
0xf6
,
0x3c
,
0xfe
,
0x1d
,
0x00
,
0x
0d
,
0x1e
,
0x4c
,
0xfb
,
0xff
,
0x9c
,
0x75
,
0x83
,
0x7f
,
0x36
,
0x74
,
0x7f
,
0x9f
,
0xc7
,
0xbf
,
0x03
,
0x00
,
0x
ff
,
0xff
,
0x86
,
0xfa
,
0x5a
,
0x11
,
0xa0
,
0x04
,
0x00
,
0x00
,
0x00
,
0x
00
,
0xff
,
0xff
,
0x6e
,
0xdf
,
0x6d
,
0xe2
,
0xa2
,
0x04
,
0x00
,
0x00
,
}
}
plugin/dapp/autonomy/types/rule.pb.go
View file @
ec2de227
...
@@ -14,7 +14,7 @@ var _ = math.Inf
...
@@ -14,7 +14,7 @@ var _ = math.Inf
type
AutonomyProposalRule
struct
{
type
AutonomyProposalRule
struct
{
PropRule
*
ProposalRule
`protobuf:"bytes,1,opt,name=propRule" json:"propRule,omitempty"`
PropRule
*
ProposalRule
`protobuf:"bytes,1,opt,name=propRule" json:"propRule,omitempty"`
Rule
*
RuleConfig
`protobuf:"bytes,2,opt,name=rule" json:"r
ule,omitempty"`
CurRule
*
RuleConfig
`protobuf:"bytes,2,opt,name=curRule" json:"curR
ule,omitempty"`
// 全体持票人投票结果
// 全体持票人投票结果
VoteResult
*
VoteResult
`protobuf:"bytes,3,opt,name=voteResult" json:"voteResult,omitempty"`
VoteResult
*
VoteResult
`protobuf:"bytes,3,opt,name=voteResult" json:"voteResult,omitempty"`
// 状态
// 状态
...
@@ -36,9 +36,9 @@ func (m *AutonomyProposalRule) GetPropRule() *ProposalRule {
...
@@ -36,9 +36,9 @@ func (m *AutonomyProposalRule) GetPropRule() *ProposalRule {
return
nil
return
nil
}
}
func
(
m
*
AutonomyProposalRule
)
GetRule
()
*
RuleConfig
{
func
(
m
*
AutonomyProposalRule
)
Get
Cur
Rule
()
*
RuleConfig
{
if
m
!=
nil
{
if
m
!=
nil
{
return
m
.
Rule
return
m
.
Cur
Rule
}
}
return
nil
return
nil
}
}
...
@@ -323,38 +323,38 @@ func init() {
...
@@ -323,38 +323,38 @@ func init() {
func
init
()
{
proto
.
RegisterFile
(
"rule.proto"
,
fileDescriptor4
)
}
func
init
()
{
proto
.
RegisterFile
(
"rule.proto"
,
fileDescriptor4
)
}
var
fileDescriptor4
=
[]
byte
{
var
fileDescriptor4
=
[]
byte
{
// 51
9
bytes of a gzipped FileDescriptorProto
// 51
8
bytes of a gzipped FileDescriptorProto
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x02
,
0xff
,
0x94
,
0x54
,
0x
5b
,
0x6f
,
0xd3
,
0x3
0
,
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x02
,
0xff
,
0x94
,
0x54
,
0x
4d
,
0x6f
,
0xd3
,
0x4
0
,
0x1
4
,
0x56
,
0xda
,
0xba
,
0x97
,
0xc3
,
0x45
,
0x9d
,
0x57
,
0xa6
,
0x68
,
0x20
,
0x54
,
0x45
,
0x02
,
0x55
,
0x1
0
,
0x95
,
0x9b
,
0x6c
,
0x3e
,
0x86
,
0x0f
,
0xa5
,
0xdb
,
0x50
,
0x59
,
0x05
,
0xa1
,
0xc8
,
0x07
,
0x14
,
0x
20
,
0x15
,
0x71
,
0xd3
,
0xc4
,
0x23
,
0x0c
,
0x24
,
0x90
,
0xf6
,
0x00
,
0x07
,
0xc4
,
0x7b
,
0x48
,
0xce
,
0x
81
,
0x14
,
0xc4
,
0x97
,
0x2a
,
0x8e
,
0x50
,
0x90
,
0x40
,
0xea
,
0x01
,
0x06
,
0xc4
,
0xdd
,
0xd8
,
0xd3
,
0x
da
,
0x68
,
0xa9
,
0x6d
,
0x1c
,
0xa7
,
0x5a
,
0x1f
,
0x78
,
0xe0
,
0x77
,
0xf3
,
0x82
,
0xec
,
0xb8
,
0x4d
,
0x
c4
,
0xaa
,
0xb3
,
0xbb
,
0xac
,
0xd7
,
0x51
,
0x73
,
0xe0
,
0xcc
,
0x8f
,
0xe6
,
0x82
,
0x76
,
0xbd
,
0x8e
,
0x
b3
,
0x56
,
0x9b
,
0xf6
,
0x96
,
0xef
,
0xf8
,
0x3b
,
0x97
,
0xcf
,
0x3e
,
0x5f
,
0x00
,
0x74
,
0x99
,
0xd3
,
0x
e3
,
0x26
,
0x2a
,
0xea
,
0x6d
,
0xdf
,
0xf8
,
0xcd
,
0xec
,
0xcc
,
0xec
,
0x7b
,
0x06
,
0xd0
,
0x65
,
0x4e
,
0x
54
,
0x69
,
0x69
,
0x24
,
0x67
,
0x66
,
0xa5
,
0xa8
,
0x38
,
0xbe
,
0x97
,
0x27
,
0x72
,
0xb1
,
0x90
,
0xa2
,
0x
33
,
0xa5
,
0xa5
,
0x91
,
0x9c
,
0x99
,
0xb5
,
0xa2
,
0xe2
,
0xe4
,
0x5e
,
0x9e
,
0xc8
,
0xe5
,
0x52
,
0x8a
,
0x
8a
,
0x46
,
0x7f
,
0x5b
,
0x30
,
0x7a
,
0x5f
,
0x1a
,
0x29
,
0xe4
,
0x62
,
0xf5
,
0x55
,
0x4b
,
0x25
,
0x8b
,
0x
2a
,
0x1a
,
0xfd
,
0x39
,
0x80
,
0xf1
,
0xbb
,
0xd2
,
0x48
,
0x21
,
0x97
,
0xeb
,
0x2f
,
0x5a
,
0x2a
,
0x59
,
0x
38
,
0xc7
,
0x32
,
0x27
,
0xfe
,
0x02
,
0xfa
,
0x4a
,
0x4b
,
0x65
,
0xbf
,
0xc3
,
0x60
,
0x1c
,
0x4c
,
0xee
,
0x
c4
,
0x39
,
0x96
,
0x39
,
0xf1
,
0xe7
,
0x30
,
0x50
,
0x5a
,
0x2a
,
0x7b
,
0x0e
,
0x83
,
0x49
,
0x30
,
0xbd
,
0x
bc
,
0x3a
,
0x9c
,
0xba
,
0x0a
,
0xd3
,
0x6d
,
0x1a
,
0x6e
,
0x48
,
0xfc
,
0x09
,
0x74
,
0x6c
,
0xb7
,
0xb0
,
0x
f3
,
0xf2
,
0x68
,
0xe6
,
0x2a
,
0xcc
,
0xb6
,
0x69
,
0xb8
,
0x21
,
0xf1
,
0x67
,
0xd0
,
0x4f
,
0x4a
,
0xed
,
0x
e5
,
0xc8
,
0x07
,
0x9e
,
0x6c
,
0x8f
,
0x4e
,
0xa5
,
0x38
,
0xcf
,
0x66
,
0xe8
,
0x8e
,
0xf9
,
0x4b
,
0x80
,
0x
f8
,
0x07
,
0x8e
,
0x7f
,
0xe8
,
0xf9
,
0x36
,
0x74
,
0x26
,
0xc5
,
0x45
,
0x36
,
0xc7
,
0x9a
,
0xc1
,
0x5f
,
0x
a5
,
0x34
,
0x84
,
0x54
,
0x94
,
0xb9
,
0x09
,
0xdb
,
0x0d
,
0xf2
,
0xcf
,
0xcd
,
0x01
,
0x6e
,
0x91
,
0xf8
,
0x
00
,
0xac
,
0xa4
,
0x21
,
0xa4
,
0xa2
,
0xcc
,
0x4d
,
0xd8
,
0x69
,
0xf1
,
0x7f
,
0x6c
,
0x3e
,
0xe0
,
0x16
,
0x
11
,
0x74
,
0x0b
,
0x13
,
0x9b
,
0xb2
,
0x08
,
0x3b
,
0xe3
,
0x60
,
0xc2
,
0xd0
,
0x23
,
0x1e
,
0x42
,
0x2f
,
0x
89
,
0x1f
,
0x43
,
0xaf
,
0x30
,
0xb1
,
0x29
,
0x8b
,
0xb0
,
0x3b
,
0x09
,
0xa6
,
0x0c
,
0x3d
,
0xe2
,
0x21
,
0x
4e
,
0x53
,
0x4d
,
0x45
,
0x11
,
0xb2
,
0x71
,
0x30
,
0x19
,
0xe0
,
0x1a
,
0xda
,
0x8c
,
0x39
,
0x65
,
0xb3
,
0x
f4
,
0xe3
,
0x34
,
0xd5
,
0x54
,
0x14
,
0x21
,
0x9b
,
0x04
,
0xd3
,
0x21
,
0xd6
,
0xd0
,
0x66
,
0x2c
,
0x28
,
0x
b9
,
0x09
,
0xbb
,
0xe3
,
0x60
,
0xd2
,
0x46
,
0x8f
,
0xf8
,
0x08
,
0x58
,
0x26
,
0x52
,
0xba
,
0x0c
,
0x7b
,
0x
9b
,
0x2f
,
0x4c
,
0xd8
,
0x9b
,
0x04
,
0xd3
,
0x0e
,
0x7a
,
0xc4
,
0xc7
,
0xc0
,
0x32
,
0x91
,
0xd2
,
0x55
,
0x
ae
,
0x50
,
0x05
,
0xa2
,
0x7f
,
0x01
,
0xdc
,
0x6d
,
0x68
,
0xe7
,
0xd0
,
0x59
,
0x51
,
0xac
,
0x9d
,
0x6e
,
0x
d8
,
0x77
,
0x85
,
0x2a
,
0x10
,
0xfd
,
0x0d
,
0xe0
,
0x6e
,
0x6b
,
0x03
,
0x1c
,
0xba
,
0x6b
,
0x8a
,
0xb5
,
0x
86
,
0xee
,
0xdb
,
0xa6
,
0x2e
,
0xa4
,
0x30
,
0x73
,
0xa7
,
0x8f
,
0x61
,
0x05
,
0xf8
,
0x10
,
0xda
,
0x69
,
0x
9b
,
0x9e
,
0xa1
,
0x3b
,
0xdb
,
0xd4
,
0xa5
,
0x14
,
0x66
,
0xe1
,
0x46
,
0x64
,
0x58
,
0x01
,
0x3e
,
0x82
,
0x
bc
,
0x72
,
0x32
,
0x18
,
0xda
,
0x4f
,
0xfe
,
0x1c
,
0x7a
,
0x56
,
0xe7
,
0xe9
,
0xf9
,
0xcc
,
0x4d
,
0xbb
,
0x
4e
,
0x1a
,
0xaf
,
0xdd
,
0x18
,
0x0c
,
0xed
,
0xd1
,
0x2e
,
0xc3
,
0xae
,
0xfe
,
0xec
,
0x62
,
0xee
,
0xba
,
0x
f7
,
0x26
,
0xd6
,
0x0c
,
0xfe
,
0x0c
,
0x86
,
0x85
,
0x89
,
0xb5
,
0xf9
,
0x90
,
0xcb
,
0xe4
,
0xe2
,
0x73
,
0x
dd
,
0xbf
,
0x0c
,
0xcf
,
0xe0
,
0x4f
,
0x61
,
0x54
,
0x98
,
0x58
,
0x9b
,
0xf7
,
0xb9
,
0x4c
,
0x2e
,
0x3f
,
0x
35
,
0x31
,
0x73
,
0x13
,
0xef
,
0xc4
,
0xf9
,
0x53
,
0xb8
,
0x4f
,
0x22
,
0xdd
,
0x66
,
0x56
,
0xda
,
0xae
,
0x
55
,
0x1d
,
0x33
,
0xd7
,
0xf1
,
0x4e
,
0x9c
,
0x3f
,
0x81
,
0xfb
,
0x24
,
0xd2
,
0x6d
,
0x66
,
0x35
,
0xdb
,
0x
44
,
0xf9
,
0x14
,
0xb8
,
0xa6
,
0x38
,
0xff
,
0xd4
,
0xe4
,
0xf6
,
0x1c
,
0x77
,
0xcf
,
0x49
,
0xf4
,
0x06
,
0x
b5
,
0x28
,
0x9f
,
0x01
,
0xd7
,
0x14
,
0xe7
,
0x1f
,
0xdb
,
0xdc
,
0xbe
,
0xe3
,
0xee
,
0xf9
,
0x12
,
0xbd
,
0x
38
,
0xd2
,
0x52
,
0x5e
,
0x50
,
0xe3
,
0x0a
,
0x1e
,
0x03
,
0x28
,
0x8f
,
0xbf
,
0x7c
,
0x74
,
0x17
,
0x3
1
,
0x
06
,
0x8e
,
0xb4
,
0x92
,
0x97
,
0xd4
,
0x5a
,
0xc1
,
0x63
,
0x00
,
0xe5
,
0xf1
,
0xe7
,
0x0f
,
0x6e
,
0x1
1
,
0x
c0
,
0xad
,
0x48
,
0x74
,
0x06
,
0x43
,
0xfb
,
0x5a
,
0xb7
,
0xc9
,
0x71
,
0xef
,
0xa5
,
0x94
,
0x96
,
0xcb
,
0x
43
,
0xdc
,
0x8a
,
0x44
,
0xe7
,
0x30
,
0xb2
,
0xaf
,
0x75
,
0x9b
,
0x1c
,
0xf7
,
0x5e
,
0x4a
,
0x69
,
0xb9
,
0x
6a
,
0x49
,
0xfa
,
0xb8
,
0x86
,
0xd1
,
0x09
,
0x3c
,
0xf8
,
0x41
,
0x7a
,
0x91
,
0x89
,
0xf8
,
0x76
,
0x2
5
,
0x
aa
,
0x74
,
0x32
,
0xc0
,
0x1a
,
0x46
,
0xa7
,
0xf0
,
0xe0
,
0x3b
,
0xe9
,
0x65
,
0x26
,
0xe2
,
0xdb
,
0x9
5
,
0x
a3
,
0x3f
,
0x70
,
0x88
,
0x94
,
0x50
,
0xa6
,
0xcc
,
0x95
,
0xe5
,
0xed
,
0x28
,
0x4d
,
0x4b
,
0xbf
,
0xb8
,
0x
8c
,
0x7e
,
0xc3
,
0x11
,
0x52
,
0x42
,
0x99
,
0x32
,
0xd7
,
0x24
,
0xdc
,
0x55
,
0x9a
,
0x56
,
0x5e
,
0xbe
,
0x0f
,
0xfd
,
0x0b
,
0xec
,
0x
db
,
0x73
,
0x74
,
0x44
,
0xfe
,
0x16
,
0x7a
,
0x49
,
0xa9
,
0x35
,
0x09
,
0xe3
,
0x0f
,
0xfd
,
0x0b
,
0xec
,
0x
53
,
0x3b
,
0x3a
,
0x22
,
0x7f
,
0xe3
,
0x24
,
0xac
,
0x49
,
0x18
,
0x2f
,
0xe1
,
0x
f7
,
0xf7
,
0xda
,
0x9c
,
0x35
,
0x37
,
0x9a
,
0xc3
,
0xc1
,
0x99
,
0x4c
,
0xe2
,
0xbc
,
0xd1
,
0xfc
,
0x64
,
0x
1b
,
0x73
,
0x6a
,
0x6e
,
0xb4
,
0x80
,
0xc3
,
0x73
,
0x99
,
0xc4
,
0x79
,
0xeb
,
0xf2
,
0xd3
,
0x1d
,
0xff
,
0x
c7
,
0x39
,
0xd7
,
0x16
,
0xab
,
0x1d
,
0x74
,
0x0c
,
0x7d
,
0xeb
,
0x4d
,
0x12
,
0xa6
,
0x08
,
0x5b
,
0xe3
,
0x
dc
,
0x58
,
0xac
,
0xf1
,
0xd1
,
0x09
,
0x0c
,
0xac
,
0x43
,
0x49
,
0x98
,
0x22
,
0x3c
,
0x98
,
0x74
,
0xa6
,
0x
f6
,
0x64
,
0x80
,
0x1b
,
0x1c
,
0x5d
,
0xc2
,
0x08
,
0xe9
,
0xf7
,
0xb7
,
0x92
,
0x74
,
0xd3
,
0xa6
,
0xb5
,
0x
43
,
0xdc
,
0xe0
,
0xe8
,
0x0a
,
0xc6
,
0x48
,
0xbf
,
0xbe
,
0x96
,
0xa4
,
0xdb
,
0x66
,
0x6d
,
0xbc
,
0x11
,
0x
37
,
0x82
,
0x86
,
0x37
,
0x46
,
0xc0
,
0x12
,
0x59
,
0x7a
,
0x39
,
0x0c
,
0x2b
,
0xc0
,
0x1f
,
0xc1
,
0x20
,
0x
b4
,
0xbc
,
0x31
,
0x06
,
0x96
,
0xc8
,
0xd2
,
0x8f
,
0xc3
,
0xb0
,
0x02
,
0xfc
,
0x11
,
0x0c
,
0xd3
,
0x4c
,
0x
cd
,
0x34
,
0x25
,
0x26
,
0x93
,
0xc2
,
0x2f
,
0x6d
,
0x1d
,
0xa8
,
0xdd
,
0xd1
,
0x71
,
0xcb
,
0xe2
,
0xdd
,
0x
53
,
0x62
,
0x32
,
0x29
,
0xbc
,
0x68
,
0x9b
,
0x40
,
0xe3
,
0x8e
,
0xae
,
0x13
,
0x8b
,
0x77
,
0xc7
,
0x37
,
0x
f1
,
0x1d
,
0x8e
,
0x90
,
0x54
,
0xbe
,
0xda
,
0xed
,
0xfd
,
0x0e
,
0x06
,
0xeb
,
0xd9
,
0x6d
,
0xfb
,
0xf6
,
0x
38
,
0x46
,
0x52
,
0xf9
,
0x7a
,
0xf7
,
0xee
,
0xb7
,
0x30
,
0xac
,
0x7b
,
0xb7
,
0xd7
,
0x77
,
0xfe
,
0x37
,
0x
4d
,
0x4a
,
0x6b
,
0xf6
,
0xaf
,
0xae
,
0xfb
,
0xfb
,
0xbc
,
0xfe
,
0x1f
,
0x00
,
0x00
,
0xff
,
0xff
,
0x2c
,
0x
69
,
0xc3
,
0xfe
,
0xd9
,
0x73
,
0xff
,
0xa0
,
0x57
,
0xff
,
0x02
,
0x00
,
0x00
,
0xff
,
0xff
,
0x44
,
0xd4
,
0x3
8
,
0xbe
,
0x35
,
0xa1
,
0x04
,
0x00
,
0x00
,
0x3
9
,
0xc2
,
0xa7
,
0x04
,
0x00
,
0x00
,
}
}
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