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
if
err
!=
nil
{
return
nil
,
err
}
rep
.
Pro
Boards
=
append
(
rep
.
Pro
Boards
,
prop
)
rep
.
Pro
pBoards
=
append
(
rep
.
Prop
Boards
,
prop
)
}
return
&
rep
,
nil
}
...
...
plugin/dapp/autonomy/executor/board_test.go
View file @
ec2de227
...
...
@@ -194,11 +194,11 @@ func TestGetProposalBoard(t *testing.T) {
}
rsp
,
err
:=
au
.
getProposalBoard
(
req
)
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
for
_
,
tcase
:=
range
testcase2
{
require
.
Equal
(
t
,
rsp
.
(
*
auty
.
ReplyQueryProposalBoard
)
.
ProBoards
[
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
]
.
Height
,
tcase
.
height
)
require
.
Equal
(
t
,
rsp
.
(
*
auty
.
ReplyQueryProposalBoard
)
.
Pro
p
Boards
[
k
]
.
Index
,
int32
(
tcase
.
index
))
k
--
}
...
...
@@ -211,10 +211,10 @@ func TestGetProposalBoard(t *testing.T) {
}
rsp
,
err
=
au
.
getProposalBoard
(
req
)
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
{
require
.
Equal
(
t
,
rsp
.
(
*
auty
.
ReplyQueryProposalBoard
)
.
ProBoards
[
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
]
.
Height
,
tcase
.
height
)
require
.
Equal
(
t
,
rsp
.
(
*
auty
.
ReplyQueryProposalBoard
)
.
Pro
p
Boards
[
i
]
.
Index
,
int32
(
tcase
.
index
))
}
// 翻页查找
...
...
@@ -226,9 +226,9 @@ func TestGetProposalBoard(t *testing.T) {
}
rsp
,
err
=
au
.
getProposalBoard
(
req
)
require
.
NoError
(
t
,
err
)
require
.
Equal
(
t
,
len
(
rsp
.
(
*
auty
.
ReplyQueryProposalBoard
)
.
ProBoards
),
1
)
height
:=
rsp
.
(
*
auty
.
ReplyQueryProposalBoard
)
.
ProBoards
[
0
]
.
Height
index
:=
rsp
.
(
*
auty
.
ReplyQueryProposalBoard
)
.
ProBoards
[
0
]
.
Index
require
.
Equal
(
t
,
len
(
rsp
.
(
*
auty
.
ReplyQueryProposalBoard
)
.
Pro
p
Boards
),
1
)
height
:=
rsp
.
(
*
auty
.
ReplyQueryProposalBoard
)
.
Pro
p
Boards
[
0
]
.
Height
index
:=
rsp
.
(
*
auty
.
ReplyQueryProposalBoard
)
.
Pro
p
Boards
[
0
]
.
Index
require
.
Equal
(
t
,
height
,
testcase2
[
2
]
.
height
)
require
.
Equal
(
t
,
index
,
int32
(
testcase2
[
2
]
.
index
))
//
...
...
@@ -240,9 +240,9 @@ func TestGetProposalBoard(t *testing.T) {
Index
:
Index
,
}
rsp
,
err
=
au
.
getProposalBoard
(
req
)
require
.
Equal
(
t
,
len
(
rsp
.
(
*
auty
.
ReplyQueryProposalBoard
)
.
ProBoards
),
2
)
require
.
Equal
(
t
,
rsp
.
(
*
auty
.
ReplyQueryProposalBoard
)
.
ProBoards
[
0
]
.
Height
,
testcase2
[
1
]
.
height
)
require
.
Equal
(
t
,
rsp
.
(
*
auty
.
ReplyQueryProposalBoard
)
.
ProBoards
[
0
]
.
Index
,
int32
(
testcase2
[
1
]
.
index
))
require
.
Equal
(
t
,
rsp
.
(
*
auty
.
ReplyQueryProposalBoard
)
.
ProBoards
[
1
]
.
Height
,
testcase2
[
0
]
.
height
)
require
.
Equal
(
t
,
rsp
.
(
*
auty
.
ReplyQueryProposalBoard
)
.
ProBoards
[
1
]
.
Index
,
int32
(
testcase2
[
0
]
.
index
))
require
.
Equal
(
t
,
len
(
rsp
.
(
*
auty
.
ReplyQueryProposalBoard
)
.
Pro
p
Boards
),
2
)
require
.
Equal
(
t
,
rsp
.
(
*
auty
.
ReplyQueryProposalBoard
)
.
Pro
p
Boards
[
0
]
.
Height
,
testcase2
[
1
]
.
height
)
require
.
Equal
(
t
,
rsp
.
(
*
auty
.
ReplyQueryProposalBoard
)
.
Pro
p
Boards
[
0
]
.
Index
,
int32
(
testcase2
[
1
]
.
index
))
require
.
Equal
(
t
,
rsp
.
(
*
auty
.
ReplyQueryProposalBoard
)
.
Pro
p
Boards
[
1
]
.
Height
,
testcase2
[
0
]
.
height
)
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
}
start
:=
cur
.
GetPropBoard
()
.
StartBlockHeight
if
a
.
height
>
start
{
if
a
.
height
>
=
start
{
err
:=
auty
.
ErrRevokeProposalPeriod
alog
.
Error
(
"rvkPropBoard "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"ProposalID"
,
rvkProb
.
ProposalID
,
"err"
,
err
)
...
...
@@ -156,7 +156,8 @@ func (a *action) votePropBoard(voteProb *auty.VoteProposalBoard) (*types.Receipt
pre
:=
copyAutonomyProposalBoard
(
cur
)
// 检查当前状态
if
cur
.
Status
!=
auty
.
AutonomyStatusProposalBoard
&&
cur
.
Status
!=
auty
.
AutonomyStatusVotePropBoard
{
if
cur
.
Status
==
auty
.
AutonomyStatusRvkPropBoard
||
cur
.
Status
==
auty
.
AutonomyStatusTmintPropBoard
{
err
:=
auty
.
ErrProposalStatus
alog
.
Error
(
"votePropBoard "
,
"addr"
,
a
.
fromaddr
,
"status"
,
cur
.
Status
,
"ProposalID"
,
voteProb
.
ProposalID
,
"err"
,
err
)
...
...
@@ -166,7 +167,7 @@ func (a *action) votePropBoard(voteProb *auty.VoteProposalBoard) (*types.Receipt
start
:=
cur
.
GetPropBoard
()
.
StartBlockHeight
end
:=
cur
.
GetPropBoard
()
.
EndBlockHeight
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
alog
.
Error
(
"votePropBoard "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"ProposalID"
,
voteProb
.
ProposalID
,
"err"
,
err
)
...
...
@@ -259,7 +260,8 @@ func (a *action) tmintPropBoard(tmintProb *auty.TerminateProposalBoard) (*types.
pre
:=
copyAutonomyProposalBoard
(
cur
)
// 检查当前状态
if
cur
.
Status
==
auty
.
AutonomyStatusTmintPropBoard
{
if
cur
.
Status
==
auty
.
AutonomyStatusTmintPropBoard
||
cur
.
Status
==
auty
.
AutonomyStatusRvkPropBoard
{
err
:=
auty
.
ErrProposalStatus
alog
.
Error
(
"tmintPropBoard "
,
"addr"
,
a
.
fromaddr
,
"status"
,
cur
.
Status
,
"status is not match"
,
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
}
start
:=
cur
.
GetPropProject
()
.
StartBlockHeight
if
a
.
height
>
start
{
if
a
.
height
>
=
start
{
err
:=
auty
.
ErrRevokeProposalPeriod
alog
.
Error
(
"rvkPropProject "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"ProposalID"
,
rvkProb
.
ProposalID
,
"err"
,
err
)
...
...
@@ -132,7 +132,9 @@ func (a *action) votePropProject(voteProb *auty.VoteProposalProject) (*types.Rec
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
alog
.
Error
(
"votePropProject "
,
"addr"
,
a
.
fromaddr
,
"status"
,
cur
.
Status
,
"ProposalID"
,
voteProb
.
ProposalID
,
"err"
,
err
)
...
...
@@ -259,9 +261,7 @@ func (a *action) pubVotePropProject(voteProb *auty.PubVoteProposalProject) (*typ
}
start
:=
cur
.
GetPropProject
()
.
StartBlockHeight
end
:=
cur
.
GetPropProject
()
.
EndBlockHeight
real
:=
cur
.
GetPropProject
()
.
RealEndBlockHeight
if
start
<
a
.
height
||
end
<
a
.
height
||
(
real
!=
0
&&
real
<
a
.
height
)
{
if
a
.
height
<
start
{
err
:=
auty
.
ErrVotePeriod
alog
.
Error
(
"pubVotePropProject "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"ProposalID"
,
voteProb
.
ProposalID
,
"err"
,
err
)
...
...
@@ -333,7 +333,8 @@ func (a *action) tmintPropProject(tmintProb *auty.TerminateProposalProject) (*ty
pre
:=
copyAutonomyProposalProject
(
cur
)
// 检查当前状态
if
cur
.
Status
==
auty
.
AutonomyStatusTmintPropProject
{
if
cur
.
Status
==
auty
.
AutonomyStatusTmintPropProject
||
cur
.
Status
==
auty
.
AutonomyStatusRvkPropProject
{
err
:=
auty
.
ErrProposalStatus
alog
.
Error
(
"tmintPropProject "
,
"addr"
,
a
.
fromaddr
,
"status"
,
cur
.
Status
,
"status is not match"
,
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) {
cur
:=
&
auty
.
AutonomyProposalRule
{
PropRule
:
prob
,
Rule
:
rule
,
Cur
Rule
:
rule
,
VoteResult
:
&
auty
.
VoteResult
{},
Status
:
auty
.
AutonomyStatusProposalRule
,
Address
:
a
.
fromaddr
,
...
...
@@ -81,7 +81,7 @@ func (a *action) rvkPropRule(rvkProb *auty.RevokeProposalRule) (*types.Receipt,
}
start
:=
cur
.
GetPropRule
()
.
StartBlockHeight
if
a
.
height
>
start
{
if
a
.
height
>
=
start
{
err
:=
auty
.
ErrRevokeProposalPeriod
alog
.
Error
(
"rvkPropRule "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"ProposalID"
,
rvkProb
.
ProposalID
,
"err"
,
err
)
...
...
@@ -98,9 +98,9 @@ func (a *action) rvkPropRule(rvkProb *auty.RevokeProposalRule) (*types.Receipt,
var
logs
[]
*
types
.
ReceiptLog
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
{
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
}
logs
=
append
(
logs
,
receipt
.
Logs
...
)
...
...
@@ -125,7 +125,8 @@ func (a *action) votePropRule(voteProb *auty.VoteProposalRule) (*types.Receipt,
pre
:=
copyAutonomyProposalRule
(
cur
)
// 检查当前状态
if
cur
.
Status
!=
auty
.
AutonomyStatusProposalRule
&&
cur
.
Status
!=
auty
.
AutonomyStatusVotePropRule
{
if
cur
.
Status
==
auty
.
AutonomyStatusRvkPropRule
||
cur
.
Status
==
auty
.
AutonomyStatusTmintPropRule
{
err
:=
auty
.
ErrProposalStatus
alog
.
Error
(
"votePropRule "
,
"addr"
,
a
.
fromaddr
,
"status"
,
cur
.
Status
,
"ProposalID"
,
voteProb
.
ProposalID
,
"err"
,
err
)
...
...
@@ -135,7 +136,7 @@ func (a *action) votePropRule(voteProb *auty.VoteProposalRule) (*types.Receipt,
start
:=
cur
.
GetPropRule
()
.
StartBlockHeight
end
:=
cur
.
GetPropRule
()
.
EndBlockHeight
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
alog
.
Error
(
"votePropRule "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"ProposalID"
,
voteProb
.
ProposalID
,
"err"
,
err
)
...
...
@@ -177,7 +178,7 @@ func (a *action) votePropRule(voteProb *auty.VoteProposalRule) (*types.Receipt,
// 首次进入投票期,即将提案金转入自治系统地址
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
{
alog
.
Error
(
"votePropRule "
,
"addr"
,
cur
.
Address
,
"execaddr"
,
a
.
execaddr
,
"ExecTransferFrozen amount fail"
,
err
)
return
nil
,
err
...
...
@@ -206,7 +207,7 @@ func (a *action) votePropRule(voteProb *auty.VoteProposalRule) (*types.Receipt,
// 更新系统规则
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
)})
}
...
...
@@ -270,7 +271,7 @@ func (a *action) tmintPropRule(tmintProb *auty.TerminateProposalRule) (*types.Re
// 未进行投票情况下,符合提案关闭的也需要扣除提案费用
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
{
alog
.
Error
(
"votePropRule "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"ExecTransferFrozen amount fail"
,
err
)
return
nil
,
err
...
...
@@ -286,7 +287,7 @@ func (a *action) tmintPropRule(tmintProb *auty.TerminateProposalRule) (*types.Re
// 更新系统规则
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
)})
}
...
...
@@ -331,9 +332,9 @@ func copyAutonomyProposalRule(cur *auty.AutonomyProposalRule) *auty.AutonomyProp
newAut
.
PropRule
.
RuleCfg
=
&
cfg
}
}
if
cur
.
Rule
!=
nil
{
newRule
:=
*
cur
.
GetRule
()
newAut
.
Rule
=
&
newRule
if
cur
.
Cur
Rule
!=
nil
{
newRule
:=
*
cur
.
Get
Cur
Rule
()
newAut
.
Cur
Rule
=
&
newRule
}
if
cur
.
VoteResult
!=
nil
{
newRes
:=
*
cur
.
GetVoteResult
()
...
...
plugin/dapp/autonomy/executor/ruleaction_test.go
View file @
ec2de227
...
...
@@ -401,7 +401,7 @@ func TestCopyAutonomyProposalRule(t *testing.T) {
require
.
Nil
(
t
,
copyAutonomyProposalRule
(
nil
))
cur
:=
&
auty
.
AutonomyProposalRule
{
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
},
Status
:
2
,
Address
:
"123"
,
...
...
@@ -410,7 +410,7 @@ func TestCopyAutonomyProposalRule(t *testing.T) {
cur
.
PropRule
.
Year
=
1800
cur
.
PropRule
.
Month
=
2
cur
.
PropRule
.
RuleCfg
.
BoardApproveRatio
=
90
cur
.
Rule
.
BoardApproveRatio
=
90
cur
.
Cur
Rule
.
BoardApproveRatio
=
90
cur
.
VoteResult
.
TotalVotes
=
50
cur
.
Address
=
"234"
cur
.
Status
=
1
...
...
@@ -421,7 +421,7 @@ func TestCopyAutonomyProposalRule(t *testing.T) {
require
.
Equal
(
t
,
"123"
,
pre
.
Address
)
require
.
Equal
(
t
,
2
,
int
(
pre
.
Status
))
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
)
{
...
...
plugin/dapp/autonomy/proto/board.proto
View file @
ec2de227
...
...
@@ -72,5 +72,5 @@ message ReqQueryProposalBoard {
}
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;
message
AutonomyProposalRule
{
ProposalRule
propRule
=
1
;
RuleConfig
rule
=
2
;
RuleConfig
curRule
=
2
;
// 全体持票人投票结果
VoteResult
voteResult
=
3
;
// 状态
...
...
plugin/dapp/autonomy/types/board.pb.go
View file @
ec2de227
...
...
@@ -295,7 +295,7 @@ func (m *ReqQueryProposalBoard) GetIndex() int64 {
}
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
{}
}
...
...
@@ -303,9 +303,9 @@ func (m *ReplyQueryProposalBoard) String() string { return proto.Comp
func
(
*
ReplyQueryProposalBoard
)
ProtoMessage
()
{}
func
(
*
ReplyQueryProposalBoard
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor1
,
[]
int
{
8
}
}
func
(
m
*
ReplyQueryProposalBoard
)
GetProBoards
()
[]
*
AutonomyProposalBoard
{
func
(
m
*
ReplyQueryProposalBoard
)
GetPro
p
Boards
()
[]
*
AutonomyProposalBoard
{
if
m
!=
nil
{
return
m
.
ProBoards
return
m
.
Pro
p
Boards
}
return
nil
}
...
...
@@ -325,38 +325,38 @@ func init() {
func
init
()
{
proto
.
RegisterFile
(
"board.proto"
,
fileDescriptor1
)
}
var
fileDescriptor1
=
[]
byte
{
// 52
3
bytes of a gzipped FileDescriptorProto
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x02
,
0xff
,
0x94
,
0x54
,
0x
5d
,
0x6f
,
0xd3
,
0x3
0
,
0x1
4
,
0x55
,
0xda
,
0xa6
,
0x5d
,
0xef
,
0x34
,
0xb4
,
0x99
,
0x6e
,
0x44
,
0xd3
,
0x84
,
0xaa
,
0x3c
,
0xa
0
,
0x0
a
,
0xa4
,
0x0a
,
0xc6
,
0x87
,
0x10
,
0x6f
,
0x14
,
0x90
,
0x40
,
0x02
,
0x09
,
0xae
,
0x80
,
0x77
,
0x2f
,
0x
b9
,
0x5b
,
0xa3
,
0xa5
,
0xb6
,
0x71
,
0x9c
,
0x8a
,
0xbc
,
0xf1
,
0xce
,
0x0f
,
0xe5
,
0x6f
,
0xa0
,
0xdc
,
0x
b8
,
0x6b
,
0x33
,
0x2a
,
0x60
,
0x6f
,
0x39
,
0x37
,
0xe7
,
0xd8
,
0xf7
,
0xda
,
0xe7
,
0x18
,
0x76
,
0xcf
,
0x
b4
,
0xb4
,
0xe9
,
0xd4
,
0x58
,
0xed
,
0xb4
,
0x08
,
0x5d
,
0x65
,
0xa8
,
0x38
,
0xde
,
0xcb
,
0x13
,
0xbd
,
0x
58
,
0x68
,
0xd5
,
0x54
,
0xe3
,
0x9f
,
0x1d
,
0x38
,
0x7c
,
0x59
,
0x3a
,
0xad
,
0xf4
,
0xa2
,
0xfa
,
0x68
,
0x
b5
,
0xd1
,
0x85
,
0xcc
,
0x67
,
0xb5
,
0x4a
,
0x9c
,
0xc2
,
0xd0
,
0x58
,
0x6d
,
0x18
,
0x44
,
0xc1
,
0x38
,
0x
98
,
0xec
,
0x9e
,
0x8e
,
0xa6
,
0xbc
,
0xc6
,
0xb4
,
0x45
,
0xc4
,
0x35
,
0x4d
,
0x3c
,
0x80
,
0x41
,
0x5
2
,
0x
5a
,
0x2c
,
0x73
,
0x8a
,
0x3a
,
0xac
,
0x38
,
0xf0
,
0x8a
,
0xba
,
0xf4
,
0x4a
,
0xab
,
0xf3
,
0xec
,
0x02
,
0x
57
,
0x0c
,
0xf1
,
0x08
,
0x60
,
0xa9
,
0x1d
,
0x21
,
0x15
,
0x65
,
0xee
,
0xa2
,
0x6e
,
0x8b
,
0xff
,
0xf5
,
0x
ea
,
0x07
,
0x6e
,
0x90
,
0xc4
,
0x11
,
0xf4
,
0x0b
,
0x27
,
0x5d
,
0x59
,
0x44
,
0xbd
,
0x71
,
0x30
,
0x09
,
0x
d1
,
0x23
,
0x11
,
0xc1
,
0x40
,
0xa6
,
0xa9
,
0xa5
,
0xa2
,
0x88
,
0xc2
,
0x71
,
0x30
,
0x19
,
0xe2
,
0x0a
,
0x
d6
,
0x8a
,
0x39
,
0x65
,
0x17
,
0x73
,
0x17
,
0xf5
,
0xc7
,
0xc1
,
0xa4
,
0x8b
,
0x1e
,
0x89
,
0x11
,
0x84
,
0x
99
,
0x4a
,
0xe9
,
0x7b
,
0x34
,
0xe0
,
0x85
,
0x1a
,
0x10
,
0xff
,
0x0a
,
0x60
,
0xaf
,
0x7d
,
0x0a
,
0x02
,
0x
7a
,
0x15
,
0x49
,
0xcb
,
0x07
,
0x10
,
0x22
,
0x7f
,
0xd7
,
0xda
,
0x85
,
0x56
,
0x6e
,
0xce
,
0x33
,
0x86
,
0x
d8
,
0x00
,
0xb1
,
0x0f
,
0xdd
,
0x54
,
0x56
,
0x3c
,
0x47
,
0x88
,
0xf5
,
0x67
,
0xbd
,
0x37
,
0x5f
,
0x4
0
,
0x
dd
,
0x6d
,
0x77
,
0x32
,
0x44
,
0x8f
,
0xc4
,
0x7d
,
0xd8
,
0x2f
,
0x9c
,
0xb4
,
0x6e
,
0x96
,
0xe
b
,
0xe4
,
0xf2
,
0x6d
,
0xd
3
,
0x5d
,
0xc8
,
0xdd
,
0xfd
,
0x51
,
0x17
,
0xf7
,
0xe0
,
0x16
,
0xa
9
,
0x74
,
0x93
,
0xd9
,
0xc
c
,
0x71
,
0xad
,
0x2a
,
0xa6
,
0x20
,
0x2c
,
0xc9
,
0xfc
,
0x4d
,
0x9b
,
0x3b
,
0x60
,
0xee
,
0x96
,
0x3
f
,
0x
f1
,
0x53
,
0xb8
,
0x8d
,
0xb4
,
0xd4
,
0x97
,
0xd4
,
0x1e
,
0xf7
,
0x2e
,
0x80
,
0xf1
,
0x85
,
0x77
,
0xaf
,
0x
79
,
0xe8
,
0x21
,
0x6e
,
0x54
,
0xe2
,
0x0f
,
0x70
,
0x50
,
0x5f
,
0xcd
,
0x8d
,
0x44
,
0x7c
,
0x3b
,
0xc6
,
0x
58
,
0xbd
,
0x6c
,
0x5c
,
0xb1
,
0x83
,
0x2b
,
0x18
,
0x3f
,
0x87
,
0xa3
,
0xcf
,
0x64
,
0x17
,
0x99
,
0x92
,
0x37
,
0x
5c
,
0x33
,
0xfe
,
0x11
,
0xc0
,
0x08
,
0x29
,
0xa1
,
0xcc
,
0xb8
,
0xb6
,
0xf0
,
0x21
,
0xf4
,
0x8c
,
0xa
5
,
0xa5
,
0x77
,
0xec
,
0x89
,
0xf7
,
0xd3
,
0x56
,
0x8b
,
0x23
,
0x33
,
0xc5
,
0x33
,
0x36
,
0xad
,
0x25
,
0x
e5
,
0xbc
,
0x69
,
0xff
,
0x2e
,
0x5a
,
0x91
,
0xe3
,
0x73
,
0x10
,
0xef
,
0x75
,
0x22
,
0xf3
,
0xf6
,
0xfe
,
0x
4f
,
0xa0
,
0xcf
,
0x79
,
0x48
,
0xff
,
0xab
,
0x03
,
0xcf
,
0x15
,
0xc7
,
0xb0
,
0x53
,
0xc7
,
0x92
,
0x9
4
,
0x
2b
,
0xa2
,
0x0e
,
0x9b
,
0xe5
,
0x0a
,
0xc7
,
0x15
,
0x1c
,
0x22
,
0x7d
,
0xfb
,
0x54
,
0x92
,
0xbd
,
0x96
,
0x
d0
,
0x75
,
0x1a
,
0x82
,
0x56
,
0x1a
,
0x46
,
0x10
,
0x26
,
0xba
,
0xf4
,
0xe3
,
0x84
,
0xd8
,
0x00
,
0x71
,
0x0
2
,
0xc3
,
0x34
,
0xb3
,
0x94
,
0xb8
,
0x4c
,
0x2b
,
0xef
,
0xd2
,
0x75
,
0x61
,
0x9d
,
0x87
,
0x1e
,
0x5b
,
0x
c6
,
0xe7
,
0xe1
,
0x0b
,
0xdc
,
0x41
,
0x32
,
0x79
,
0xb5
,
0x65
,
0xf3
,
0x17
,
0xfc
,
0x3c
,
0xcc
,
0x1a
,
0x
7f
,
0x07
,
0xe3
,
0xee
,
0x3f
,
0x47
,
0x5d
,
0xd3
,
0xcf
,
0xfa
,
0xfc
,
0xf6
,
0x3c
,
0xfe
,
0x1d
,
0x00
,
0x00
,
0x
ff
,
0xff
,
0x86
,
0xfa
,
0x5a
,
0x11
,
0xa0
,
0x04
,
0x00
,
0x00
,
// 52
4
bytes of a gzipped FileDescriptorProto
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x02
,
0xff
,
0x94
,
0x54
,
0x
4d
,
0x6f
,
0xd3
,
0x4
0
,
0x1
0
,
0x95
,
0x93
,
0x6c
,
0xd2
,
0x4c
,
0x55
,
0xd4
,
0x2e
,
0x69
,
0xb1
,
0xaa
,
0x0a
,
0x45
,
0x3e
,
0x2
0
,
0x0
b
,
0xa4
,
0x08
,
0xca
,
0x87
,
0x38
,
0x70
,
0x21
,
0x80
,
0x04
,
0x12
,
0x48
,
0x30
,
0x42
,
0x70
,
0xde
,
0x
da
,
0xd3
,
0xc6
,
0xaa
,
0xbd
,
0xbb
,
0xac
,
0xd7
,
0x11
,
0xbe
,
0x71
,
0xe7
,
0x87
,
0xf2
,
0x37
,
0x90
,
0x
d7
,
0x9b
,
0x26
,
0x2e
,
0x11
,
0xd0
,
0x9b
,
0xdf
,
0xf8
,
0xbd
,
0xdd
,
0x19
,
0xcf
,
0x7b
,
0x86
,
0xdd
,
0x
33
,
0x25
,
0x4c
,
0x3a
,
0xd3
,
0x46
,
0x59
,
0xc5
,
0x99
,
0xad
,
0x35
,
0x95
,
0xc7
,
0x7b
,
0x79
,
0xa2
,
0x
8a
,
0x42
,
0xc9
,
0xb6
,
0x1a
,
0xfd
,
0xec
,
0xc1
,
0xe1
,
0xcb
,
0xca
,
0x2a
,
0xa9
,
0x8a
,
0xfa
,
0xa3
,
0x
51
,
0x5a
,
0x95
,
0x22
,
0x9f
,
0x37
,
0x2a
,
0x7e
,
0x0a
,
0x63
,
0x6d
,
0x94
,
0x76
,
0x20
,
0x0c
,
0xa6
,
0x
41
,
0xbc
,
0x7b
,
0x3a
,
0x99
,
0xb9
,
0x33
,
0x66
,
0x1d
,
0x22
,
0xae
,
0x69
,
0xfc
,
0x01
,
0x8c
,
0x9
2
,
0x
ca
,
0x60
,
0x95
,
0x53
,
0xd8
,
0x73
,
0x8a
,
0x03
,
0xaf
,
0x68
,
0x4a
,
0xaf
,
0x94
,
0x3c
,
0xcf
,
0x2e
,
0x
70
,
0xc5
,
0xe0
,
0x8f
,
0x00
,
0x96
,
0xca
,
0x12
,
0x52
,
0x59
,
0xe5
,
0x36
,
0xec
,
0x77
,
0xf8
,
0x5f
,
0x
ae
,
0x5e
,
0xe0
,
0x06
,
0x89
,
0x1f
,
0xc1
,
0xb0
,
0xb4
,
0xc2
,
0x56
,
0x65
,
0x38
,
0x98
,
0x06
,
0x31
,
0x
43
,
0x8f
,
0x78
,
0x08
,
0x23
,
0x91
,
0xa6
,
0x86
,
0xca
,
0x32
,
0x64
,
0xd3
,
0x20
,
0x1e
,
0xe3
,
0x0a
,
0x
36
,
0x8a
,
0x05
,
0x65
,
0x17
,
0x0b
,
0x1b
,
0x0e
,
0xa7
,
0x41
,
0xdc
,
0x47
,
0x8f
,
0xf8
,
0x04
,
0x58
,
0x
26
,
0x53
,
0xfa
,
0x1e
,
0x8e
,
0xdc
,
0x41
,
0x2d
,
0x88
,
0x7e
,
0x05
,
0xb0
,
0xd7
,
0xfd
,
0x0a
,
0x1c
,
0x
06
,
0x35
,
0x09
,
0xe3
,
0x3e
,
0x00
,
0x43
,
0xf7
,
0xdc
,
0x68
,
0x0b
,
0x25
,
0xed
,
0xc2
,
0xcd
,
0xc8
,
0x
b0
,
0x05
,
0x7c
,
0x1f
,
0xfa
,
0xa9
,
0xa8
,
0xdd
,
0x1c
,
0x0c
,
0x9b
,
0xc7
,
0xe6
,
0x6e
,
0xb7
,
0x8
0
,
0x
a6
,
0xdb
,
0x7e
,
0x3c
,
0x46
,
0x8f
,
0xf8
,
0x7d
,
0xd8
,
0x2f
,
0xad
,
0x30
,
0x76
,
0x9e
,
0xa
b
,
0xe4
,
0xf2
,
0x6d
,
0xd
b
,
0x1d
,
0x73
,
0xdd
,
0xfd
,
0x51
,
0xe7
,
0xf7
,
0xe0
,
0x16
,
0xc
9
,
0x74
,
0x93
,
0xd9
,
0xc
e
,
0x71
,
0xad
,
0xca
,
0x67
,
0xc0
,
0x0d
,
0x89
,
0xfc
,
0x4d
,
0x97
,
0x3b
,
0x72
,
0xdc
,
0x2d
,
0x6
f
,
0x
a2
,
0xa7
,
0x70
,
0x1b
,
0x69
,
0xa9
,
0x2e
,
0xa9
,
0x3b
,
0xee
,
0x5d
,
0x00
,
0xed
,
0x0b
,
0xef
,
0x5e
,
0x
bb
,
0xa1
,
0xc7
,
0xb8
,
0x51
,
0x89
,
0x3e
,
0xc0
,
0x41
,
0xb3
,
0x9a
,
0x1b
,
0x89
,
0xdc
,
0x76
,
0xb4
,
0x
36
,
0x6a
,
0xd9
,
0xba
,
0x62
,
0x07
,
0x57
,
0x30
,
0x7a
,
0x0e
,
0x47
,
0x9f
,
0xc9
,
0x14
,
0x99
,
0x14
,
0x37
,
0x
3c
,
0x33
,
0xfa
,
0x11
,
0xc0
,
0x04
,
0x29
,
0xa1
,
0x4c
,
0xdb
,
0xae
,
0xf0
,
0x21
,
0x0c
,
0xb4
,
0xa
1
,
0xa5
,
0x77
,
0xec
,
0x89
,
0xf7
,
0xd3
,
0x56
,
0x8b
,
0xa3
,
0x63
,
0xf2
,
0x67
,
0xce
,
0xb4
,
0x86
,
0x
a4
,
0xf5
,
0xa6
,
0xfd
,
0xbb
,
0x68
,
0x45
,
0x8e
,
0xce
,
0x81
,
0xbf
,
0x57
,
0x89
,
0xc8
,
0xbb
,
0xf7
,
0x
3f
,
0x81
,
0xa1
,
0xcb
,
0x43
,
0xfa
,
0x5f
,
0x1d
,
0x78
,
0x2e
,
0x3f
,
0x86
,
0x9d
,
0x26
,
0x96
,
0x2
4
,
0x
6d
,
0x19
,
0xf6
,
0x9c
,
0x59
,
0xae
,
0x70
,
0x54
,
0xc3
,
0x21
,
0xd2
,
0xb7
,
0x4f
,
0x15
,
0x99
,
0x6b
,
0x
09
,
0x5d
,
0xa7
,
0x21
,
0xe8
,
0xa4
,
0x61
,
0x02
,
0x2c
,
0x51
,
0x95
,
0x1f
,
0x87
,
0x61
,
0x0b
,
0xf8
,
0x0
9
,
0x8c
,
0xd3
,
0xcc
,
0x50
,
0x62
,
0x33
,
0x25
,
0xbd
,
0x4b
,
0xd7
,
0x85
,
0x75
,
0x1e
,
0x06
,
0xce
,
0x
32
,
0x3e
,
0x0f
,
0x5f
,
0xe1
,
0x0e
,
0x92
,
0xce
,
0xeb
,
0x2d
,
0x97
,
0xbf
,
0x68
,
0x17
,
0x34
,
0x6f
,
0x
0d
,
0x1e
,
0x4c
,
0xfb
,
0xff
,
0x9c
,
0x75
,
0x83
,
0x7f
,
0x36
,
0x74
,
0x7f
,
0x9f
,
0xc7
,
0xbf
,
0x03
,
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
type
AutonomyProposalRule
struct
{
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"`
// 状态
...
...
@@ -36,9 +36,9 @@ func (m *AutonomyProposalRule) GetPropRule() *ProposalRule {
return
nil
}
func
(
m
*
AutonomyProposalRule
)
GetRule
()
*
RuleConfig
{
func
(
m
*
AutonomyProposalRule
)
Get
Cur
Rule
()
*
RuleConfig
{
if
m
!=
nil
{
return
m
.
Rule
return
m
.
Cur
Rule
}
return
nil
}
...
...
@@ -323,38 +323,38 @@ func init() {
func
init
()
{
proto
.
RegisterFile
(
"rule.proto"
,
fileDescriptor4
)
}
var
fileDescriptor4
=
[]
byte
{
// 51
9
bytes of a gzipped FileDescriptorProto
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x02
,
0xff
,
0x94
,
0x54
,
0x
5b
,
0x6f
,
0xd3
,
0x3
0
,
0x1
4
,
0x56
,
0xda
,
0xba
,
0x97
,
0xc3
,
0x45
,
0x9d
,
0x57
,
0xa6
,
0x68
,
0x20
,
0x54
,
0x45
,
0x02
,
0x55
,
0x
20
,
0x15
,
0x71
,
0xd3
,
0xc4
,
0x23
,
0x0c
,
0x24
,
0x90
,
0xf6
,
0x00
,
0x07
,
0xc4
,
0x7b
,
0x48
,
0xce
,
0x
da
,
0x68
,
0xa9
,
0x6d
,
0x1c
,
0xa7
,
0x5a
,
0x1f
,
0x78
,
0xe0
,
0x77
,
0xf3
,
0x82
,
0xec
,
0xb8
,
0x4d
,
0x
b3
,
0x56
,
0x9b
,
0xf6
,
0x96
,
0xef
,
0xf8
,
0x3b
,
0x97
,
0xcf
,
0x3e
,
0x5f
,
0x00
,
0x74
,
0x99
,
0xd3
,
0x
54
,
0x69
,
0x69
,
0x24
,
0x67
,
0x66
,
0xa5
,
0xa8
,
0x38
,
0xbe
,
0x97
,
0x27
,
0x72
,
0xb1
,
0x90
,
0xa2
,
0x
8a
,
0x46
,
0x7f
,
0x5b
,
0x30
,
0x7a
,
0x5f
,
0x1a
,
0x29
,
0xe4
,
0x62
,
0xf5
,
0x55
,
0x4b
,
0x25
,
0x8b
,
0x
38
,
0xc7
,
0x32
,
0x27
,
0xfe
,
0x02
,
0xfa
,
0x4a
,
0x4b
,
0x65
,
0xbf
,
0xc3
,
0x60
,
0x1c
,
0x4c
,
0xee
,
0x
bc
,
0x3a
,
0x9c
,
0xba
,
0x0a
,
0xd3
,
0x6d
,
0x1a
,
0x6e
,
0x48
,
0xfc
,
0x09
,
0x74
,
0x6c
,
0xb7
,
0xb0
,
0x
e5
,
0xc8
,
0x07
,
0x9e
,
0x6c
,
0x8f
,
0x4e
,
0xa5
,
0x38
,
0xcf
,
0x66
,
0xe8
,
0x8e
,
0xf9
,
0x4b
,
0x80
,
0x
a5
,
0x34
,
0x84
,
0x54
,
0x94
,
0xb9
,
0x09
,
0xdb
,
0x0d
,
0xf2
,
0xcf
,
0xcd
,
0x01
,
0x6e
,
0x91
,
0xf8
,
0x
11
,
0x74
,
0x0b
,
0x13
,
0x9b
,
0xb2
,
0x08
,
0x3b
,
0xe3
,
0x60
,
0xc2
,
0xd0
,
0x23
,
0x1e
,
0x42
,
0x2f
,
0x
4e
,
0x53
,
0x4d
,
0x45
,
0x11
,
0xb2
,
0x71
,
0x30
,
0x19
,
0xe0
,
0x1a
,
0xda
,
0x8c
,
0x39
,
0x65
,
0xb3
,
0x
b9
,
0x09
,
0xbb
,
0xe3
,
0x60
,
0xd2
,
0x46
,
0x8f
,
0xf8
,
0x08
,
0x58
,
0x26
,
0x52
,
0xba
,
0x0c
,
0x7b
,
0x
ae
,
0x50
,
0x05
,
0xa2
,
0x7f
,
0x01
,
0xdc
,
0x6d
,
0x68
,
0xe7
,
0xd0
,
0x59
,
0x51
,
0xac
,
0x9d
,
0x6e
,
0x
86
,
0xee
,
0xdb
,
0xa6
,
0x2e
,
0xa4
,
0x30
,
0x73
,
0xa7
,
0x8f
,
0x61
,
0x05
,
0xf8
,
0x10
,
0xda
,
0x69
,
0x
bc
,
0x72
,
0x32
,
0x18
,
0xda
,
0x4f
,
0xfe
,
0x1c
,
0x7a
,
0x56
,
0xe7
,
0xe9
,
0xf9
,
0xcc
,
0x4d
,
0xbb
,
0x
f7
,
0x26
,
0xd6
,
0x0c
,
0xfe
,
0x0c
,
0x86
,
0x85
,
0x89
,
0xb5
,
0xf9
,
0x90
,
0xcb
,
0xe4
,
0xe2
,
0x73
,
0x
35
,
0x31
,
0x73
,
0x13
,
0xef
,
0xc4
,
0xf9
,
0x53
,
0xb8
,
0x4f
,
0x22
,
0xdd
,
0x66
,
0x56
,
0xda
,
0xae
,
0x
44
,
0xf9
,
0x14
,
0xb8
,
0xa6
,
0x38
,
0xff
,
0xd4
,
0xe4
,
0xf6
,
0x1c
,
0x77
,
0xcf
,
0x49
,
0xf4
,
0x06
,
0x
38
,
0xd2
,
0x52
,
0x5e
,
0x50
,
0xe3
,
0x0a
,
0x1e
,
0x03
,
0x28
,
0x8f
,
0xbf
,
0x7c
,
0x74
,
0x17
,
0x3
1
,
0x
c0
,
0xad
,
0x48
,
0x74
,
0x06
,
0x43
,
0xfb
,
0x5a
,
0xb7
,
0xc9
,
0x71
,
0xef
,
0xa5
,
0x94
,
0x96
,
0xcb
,
0x
6a
,
0x49
,
0xfa
,
0xb8
,
0x86
,
0xd1
,
0x09
,
0x3c
,
0xf8
,
0x41
,
0x7a
,
0x91
,
0x89
,
0xf8
,
0x76
,
0x2
5
,
0x
a3
,
0x3f
,
0x70
,
0x88
,
0x94
,
0x50
,
0xa6
,
0xcc
,
0x95
,
0xe5
,
0xed
,
0x28
,
0x4d
,
0x4b
,
0xbf
,
0xb8
,
0x0f
,
0xfd
,
0x0b
,
0xec
,
0x
db
,
0x73
,
0x74
,
0x44
,
0xfe
,
0x16
,
0x7a
,
0x49
,
0xa9
,
0x35
,
0x09
,
0xe3
,
0x
f7
,
0xf7
,
0xda
,
0x9c
,
0x35
,
0x37
,
0x9a
,
0xc3
,
0xc1
,
0x99
,
0x4c
,
0xe2
,
0xbc
,
0xd1
,
0xfc
,
0x64
,
0x
c7
,
0x39
,
0xd7
,
0x16
,
0xab
,
0x1d
,
0x74
,
0x0c
,
0x7d
,
0xeb
,
0x4d
,
0x12
,
0xa6
,
0x08
,
0x5b
,
0xe3
,
0x
f6
,
0x64
,
0x80
,
0x1b
,
0x1c
,
0x5d
,
0xc2
,
0x08
,
0xe9
,
0xf7
,
0xb7
,
0x92
,
0x74
,
0xd3
,
0xa6
,
0xb5
,
0x
37
,
0x82
,
0x86
,
0x37
,
0x46
,
0xc0
,
0x12
,
0x59
,
0x7a
,
0x39
,
0x0c
,
0x2b
,
0xc0
,
0x1f
,
0xc1
,
0x20
,
0x
cd
,
0x34
,
0x25
,
0x26
,
0x93
,
0xc2
,
0x2f
,
0x6d
,
0x1d
,
0xa8
,
0xdd
,
0xd1
,
0x71
,
0xcb
,
0xe2
,
0xdd
,
0x
f1
,
0x1d
,
0x8e
,
0x90
,
0x54
,
0xbe
,
0xda
,
0xed
,
0xfd
,
0x0e
,
0x06
,
0xeb
,
0xd9
,
0x6d
,
0xfb
,
0xf6
,
0x
4d
,
0x4a
,
0x6b
,
0xf6
,
0xaf
,
0xae
,
0xfb
,
0xfb
,
0xbc
,
0xfe
,
0x1f
,
0x00
,
0x00
,
0xff
,
0xff
,
0x2c
,
0x3
8
,
0xbe
,
0x35
,
0xa1
,
0x04
,
0x00
,
0x00
,
// 51
8
bytes of a gzipped FileDescriptorProto
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x02
,
0xff
,
0x94
,
0x54
,
0x
4d
,
0x6f
,
0xd3
,
0x4
0
,
0x1
0
,
0x95
,
0x9b
,
0x6c
,
0x3e
,
0x86
,
0x0f
,
0xa5
,
0xdb
,
0x50
,
0x59
,
0x05
,
0xa1
,
0xc8
,
0x07
,
0x14
,
0x
81
,
0x14
,
0xc4
,
0x97
,
0x2a
,
0x8e
,
0x50
,
0x90
,
0x40
,
0xea
,
0x01
,
0x06
,
0xc4
,
0xdd
,
0xd8
,
0xd3
,
0x
c4
,
0xaa
,
0xb3
,
0xbb
,
0xac
,
0xd7
,
0x51
,
0x73
,
0xe0
,
0xcc
,
0x8f
,
0xe6
,
0x82
,
0x76
,
0xbd
,
0x8e
,
0x
e3
,
0x26
,
0x2a
,
0xea
,
0x6d
,
0xdf
,
0xf8
,
0xcd
,
0xec
,
0xcc
,
0xec
,
0x7b
,
0x06
,
0xd0
,
0x65
,
0x4e
,
0x
33
,
0xa5
,
0xa5
,
0x91
,
0x9c
,
0x99
,
0xb5
,
0xa2
,
0xe2
,
0xe4
,
0x5e
,
0x9e
,
0xc8
,
0xe5
,
0x52
,
0x8a
,
0x
2a
,
0x1a
,
0xfd
,
0x39
,
0x80
,
0xf1
,
0xbb
,
0xd2
,
0x48
,
0x21
,
0x97
,
0xeb
,
0x2f
,
0x5a
,
0x2a
,
0x59
,
0x
c4
,
0x39
,
0x96
,
0x39
,
0xf1
,
0xe7
,
0x30
,
0x50
,
0x5a
,
0x2a
,
0x7b
,
0x0e
,
0x83
,
0x49
,
0x30
,
0xbd
,
0x
f3
,
0xf2
,
0x68
,
0xe6
,
0x2a
,
0xcc
,
0xb6
,
0x69
,
0xb8
,
0x21
,
0xf1
,
0x67
,
0xd0
,
0x4f
,
0x4a
,
0xed
,
0x
f8
,
0x07
,
0x8e
,
0x7f
,
0xe8
,
0xf9
,
0x36
,
0x74
,
0x26
,
0xc5
,
0x45
,
0x36
,
0xc7
,
0x9a
,
0xc1
,
0x5f
,
0x
00
,
0xac
,
0xa4
,
0x21
,
0xa4
,
0xa2
,
0xcc
,
0x4d
,
0xd8
,
0x69
,
0xf1
,
0x7f
,
0x6c
,
0x3e
,
0xe0
,
0x16
,
0x
89
,
0x1f
,
0x43
,
0xaf
,
0x30
,
0xb1
,
0x29
,
0x8b
,
0xb0
,
0x3b
,
0x09
,
0xa6
,
0x0c
,
0x3d
,
0xe2
,
0x21
,
0x
f4
,
0xe3
,
0x34
,
0xd5
,
0x54
,
0x14
,
0x21
,
0x9b
,
0x04
,
0xd3
,
0x21
,
0xd6
,
0xd0
,
0x66
,
0x2c
,
0x28
,
0x
9b
,
0x2f
,
0x4c
,
0xd8
,
0x9b
,
0x04
,
0xd3
,
0x0e
,
0x7a
,
0xc4
,
0xc7
,
0xc0
,
0x32
,
0x91
,
0xd2
,
0x55
,
0x
d8
,
0x77
,
0x85
,
0x2a
,
0x10
,
0xfd
,
0x0d
,
0xe0
,
0x6e
,
0x6b
,
0x03
,
0x1c
,
0xba
,
0x6b
,
0x8a
,
0xb5
,
0x
9b
,
0x9e
,
0xa1
,
0x3b
,
0xdb
,
0xd4
,
0xa5
,
0x14
,
0x66
,
0xe1
,
0x46
,
0x64
,
0x58
,
0x01
,
0x3e
,
0x82
,
0x
4e
,
0x1a
,
0xaf
,
0xdd
,
0x18
,
0x0c
,
0xed
,
0xd1
,
0x2e
,
0xc3
,
0xae
,
0xfe
,
0xec
,
0x62
,
0xee
,
0xba
,
0x
dd
,
0xbf
,
0x0c
,
0xcf
,
0xe0
,
0x4f
,
0x61
,
0x54
,
0x98
,
0x58
,
0x9b
,
0xf7
,
0xb9
,
0x4c
,
0x2e
,
0x3f
,
0x
55
,
0x1d
,
0x33
,
0xd7
,
0xf1
,
0x4e
,
0x9c
,
0x3f
,
0x81
,
0xfb
,
0x24
,
0xd2
,
0x6d
,
0x66
,
0x35
,
0xdb
,
0x
b5
,
0x28
,
0x9f
,
0x01
,
0xd7
,
0x14
,
0xe7
,
0x1f
,
0xdb
,
0xdc
,
0xbe
,
0xe3
,
0xee
,
0xf9
,
0x12
,
0xbd
,
0x
06
,
0x8e
,
0xb4
,
0x92
,
0x97
,
0xd4
,
0x5a
,
0xc1
,
0x63
,
0x00
,
0xe5
,
0xf1
,
0xe7
,
0x0f
,
0x6e
,
0x1
1
,
0x
43
,
0xdc
,
0x8a
,
0x44
,
0xe7
,
0x30
,
0xb2
,
0xaf
,
0x75
,
0x9b
,
0x1c
,
0xf7
,
0x5e
,
0x4a
,
0x69
,
0xb9
,
0x
aa
,
0x74
,
0x32
,
0xc0
,
0x1a
,
0x46
,
0xa7
,
0xf0
,
0xe0
,
0x3b
,
0xe9
,
0x65
,
0x26
,
0xe2
,
0xdb
,
0x9
5
,
0x
8c
,
0x7e
,
0xc3
,
0x11
,
0x52
,
0x42
,
0x99
,
0x32
,
0xd7
,
0x24
,
0xdc
,
0x55
,
0x9a
,
0x56
,
0x5e
,
0xbe
,
0x0f
,
0xfd
,
0x0b
,
0xec
,
0x
53
,
0x3b
,
0x3a
,
0x22
,
0x7f
,
0xe3
,
0x24
,
0xac
,
0x49
,
0x18
,
0x2f
,
0xe1
,
0x
1b
,
0x73
,
0x6a
,
0x6e
,
0xb4
,
0x80
,
0xc3
,
0x73
,
0x99
,
0xc4
,
0x79
,
0xeb
,
0xf2
,
0xd3
,
0x1d
,
0xff
,
0x
dc
,
0x58
,
0xac
,
0xf1
,
0xd1
,
0x09
,
0x0c
,
0xac
,
0x43
,
0x49
,
0x98
,
0x22
,
0x3c
,
0x98
,
0x74
,
0xa6
,
0x
43
,
0xdc
,
0xe0
,
0xe8
,
0x0a
,
0xc6
,
0x48
,
0xbf
,
0xbe
,
0x96
,
0xa4
,
0xdb
,
0x66
,
0x6d
,
0xbc
,
0x11
,
0x
b4
,
0xbc
,
0x31
,
0x06
,
0x96
,
0xc8
,
0xd2
,
0x8f
,
0xc3
,
0xb0
,
0x02
,
0xfc
,
0x11
,
0x0c
,
0xd3
,
0x4c
,
0x
53
,
0x62
,
0x32
,
0x29
,
0xbc
,
0x68
,
0x9b
,
0x40
,
0xe3
,
0x8e
,
0xae
,
0x13
,
0x8b
,
0x77
,
0xc7
,
0x37
,
0x
38
,
0x46
,
0x52
,
0xf9
,
0x7a
,
0xf7
,
0xee
,
0xb7
,
0x30
,
0xac
,
0x7b
,
0xb7
,
0xd7
,
0x77
,
0xfe
,
0x37
,
0x
69
,
0xc3
,
0xfe
,
0xd9
,
0x73
,
0xff
,
0xa0
,
0x57
,
0xff
,
0x02
,
0x00
,
0x00
,
0xff
,
0xff
,
0x44
,
0xd4
,
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