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
dba1186c
Commit
dba1186c
authored
Jul 12, 2019
by
liuyuhang
Committed by
33cn
Aug 14, 2019
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add prob project
parent
579ca570
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
165 additions
and
10 deletions
+165
-10
boardaction.go
plugin/dapp/autonomy/executor/boardaction.go
+10
-0
kv.go
plugin/dapp/autonomy/executor/kv.go
+4
-0
projectaction.go
plugin/dapp/autonomy/executor/projectaction.go
+146
-9
const.go
plugin/dapp/autonomy/types/const.go
+3
-1
errors.go
plugin/dapp/autonomy/types/errors.go
+2
-0
No files found.
plugin/dapp/autonomy/executor/boardaction.go
View file @
dba1186c
...
@@ -249,6 +249,11 @@ func (a *action) votePropBoard(voteProb *auty.VoteProposalBoard) (*types.Receipt
...
@@ -249,6 +249,11 @@ func (a *action) votePropBoard(voteProb *auty.VoteProposalBoard) (*types.Receipt
// 更新VotesRecord
// 更新VotesRecord
kv
=
append
(
kv
,
&
types
.
KeyValue
{
Key
:
VotesRecord
(
voteProb
.
ProposalID
),
Value
:
types
.
Encode
(
&
votes
)})
kv
=
append
(
kv
,
&
types
.
KeyValue
{
Key
:
VotesRecord
(
voteProb
.
ProposalID
),
Value
:
types
.
Encode
(
&
votes
)})
// 更新当前具有权利的董事会成员
if
cur
.
VoteResult
.
Pass
{
kv
=
append
(
kv
,
&
types
.
KeyValue
{
Key
:
activeBoardID
(),
Value
:
types
.
Encode
(
cur
.
PropBoard
)})
}
ty
:=
auty
.
TyLogVotePropBoard
ty
:=
auty
.
TyLogVotePropBoard
if
cur
.
VoteResult
.
Pass
{
if
cur
.
VoteResult
.
Pass
{
ty
=
auty
.
TyLogTmintPropBoard
ty
=
auty
.
TyLogTmintPropBoard
...
@@ -324,6 +329,11 @@ func (a *action) tmintPropBoard(tmintProb *auty.TerminateProposalBoard) (*types.
...
@@ -324,6 +329,11 @@ func (a *action) tmintPropBoard(tmintProb *auty.TerminateProposalBoard) (*types.
kv
=
append
(
kv
,
&
types
.
KeyValue
{
Key
:
propBoardID
(
tmintProb
.
ProposalID
),
Value
:
types
.
Encode
(
&
cur
)})
kv
=
append
(
kv
,
&
types
.
KeyValue
{
Key
:
propBoardID
(
tmintProb
.
ProposalID
),
Value
:
types
.
Encode
(
&
cur
)})
// 更新当前具有权利的董事会成员
if
cur
.
VoteResult
.
Pass
{
kv
=
append
(
kv
,
&
types
.
KeyValue
{
Key
:
activeBoardID
(),
Value
:
types
.
Encode
(
cur
.
PropBoard
)})
}
getReceiptLog
(
pre
,
&
cur
,
auty
.
TyLogTmintPropBoard
)
getReceiptLog
(
pre
,
&
cur
,
auty
.
TyLogTmintPropBoard
)
return
&
types
.
Receipt
{
Ty
:
types
.
ExecOk
,
KV
:
kv
,
Logs
:
logs
},
nil
return
&
types
.
Receipt
{
Ty
:
types
.
ExecOk
,
KV
:
kv
,
Logs
:
logs
},
nil
...
...
plugin/dapp/autonomy/executor/kv.go
View file @
dba1186c
...
@@ -27,6 +27,10 @@ var (
...
@@ -27,6 +27,10 @@ var (
localBoardPrefix
=
localPrefix
+
"board"
+
"-"
localBoardPrefix
=
localPrefix
+
"board"
+
"-"
)
)
func
activeBoardID
()
[]
byte
{
return
[]
byte
(
fmt
.
Sprintf
(
"%s"
,
boardPrefix
))
}
func
propBoardID
(
txHash
string
)
[]
byte
{
func
propBoardID
(
txHash
string
)
[]
byte
{
return
[]
byte
(
fmt
.
Sprintf
(
"%s%s"
,
boardPrefix
,
txHash
))
return
[]
byte
(
fmt
.
Sprintf
(
"%s%s"
,
boardPrefix
,
txHash
))
}
}
...
...
plugin/dapp/autonomy/executor/projectaction.go
View file @
dba1186c
...
@@ -13,8 +13,8 @@ import (
...
@@ -13,8 +13,8 @@ import (
)
)
const
(
const
(
// 重大项目金额阈值
largeAmount
=
types
.
Coin
*
100
*
10000
// 重大项目金额阈值
largeAmount
=
types
.
Coin
*
100
*
10000
publicPeriod
=
120960
// 公示一周时间,以区块高度计算
)
)
...
@@ -159,6 +159,40 @@ func (a *action) votePropProject(voteProb *auty.VoteProposalProject) (*types.Rec
...
@@ -159,6 +159,40 @@ func (a *action) votePropProject(voteProb *auty.VoteProposalProject) (*types.Rec
return
nil
,
err
return
nil
,
err
}
}
// 董事会成员验证
value
,
err
=
a
.
db
.
Get
(
activeBoardID
())
if
err
!=
nil
{
err
=
auty
.
ErrNoActiveBoard
alog
.
Error
(
"votePropProject "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"get activeBoardID failed"
,
voteProb
.
ProposalID
,
"err"
,
err
)
return
nil
,
err
}
prob
:=
&
auty
.
ProposalBoard
{}
err
=
types
.
Decode
(
value
,
prob
)
if
err
!=
nil
{
alog
.
Error
(
"votePropProject "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"decode ProposalBoard failed"
,
voteProb
.
ProposalID
,
"err"
,
err
)
return
nil
,
err
}
if
len
(
prob
.
Boards
)
>
maxBoards
||
len
(
prob
.
Boards
)
<
minBoards
{
err
=
auty
.
ErrNoActiveBoard
alog
.
Error
(
"votePropProject "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"illegality boards number"
,
voteProb
.
ProposalID
,
"err"
,
err
)
return
nil
,
err
}
var
isBoard
bool
for
_
,
addr
:=
range
prob
.
Boards
{
if
addr
==
a
.
fromaddr
{
isBoard
=
true
}
}
if
!
isBoard
{
err
=
auty
.
ErrNoActiveBoard
alog
.
Error
(
"votePropProject "
,
"addr"
,
a
.
fromaddr
,
"this addr is not active board member"
,
voteProb
.
ProposalID
,
"err"
,
err
)
return
nil
,
err
}
// 检查是否已经参与投票
// 检查是否已经参与投票
var
votes
auty
.
VotesRecord
var
votes
auty
.
VotesRecord
value
,
err
=
a
.
db
.
Get
(
VotesRecord
(
voteProb
.
ProposalID
))
value
,
err
=
a
.
db
.
Get
(
VotesRecord
(
voteProb
.
ProposalID
))
...
@@ -170,8 +204,116 @@ func (a *action) votePropProject(voteProb *auty.VoteProposalProject) (*types.Rec
...
@@ -170,8 +204,116 @@ func (a *action) votePropProject(voteProb *auty.VoteProposalProject) (*types.Rec
return
nil
,
err
return
nil
,
err
}
}
}
}
for
_
,
addr
:=
range
votes
.
Address
{
if
addr
==
a
.
fromaddr
{
err
:=
auty
.
ErrRepeatVoteAddr
alog
.
Error
(
"votePropProject "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"repeat address ProposalID"
,
voteProb
.
ProposalID
,
"err"
,
err
)
return
nil
,
err
}
}
// 更新已经投票地址
votes
.
Address
=
append
(
votes
.
Address
,
a
.
fromaddr
)
// 更新投票结果
cur
.
BoardVoteRes
.
TotalVotes
=
int32
(
len
(
prob
.
Boards
))
if
voteProb
.
Approve
{
cur
.
BoardVoteRes
.
ApproveVotes
+=
1
}
else
{
cur
.
BoardVoteRes
.
OpposeVotes
+=
1
}
var
logs
[]
*
types
.
ReceiptLog
var
kv
[]
*
types
.
KeyValue
if
float32
(
cur
.
BoardVoteRes
.
ApproveVotes
+
cur
.
BoardVoteRes
.
OpposeVotes
)
/
float32
(
cur
.
BoardVoteRes
.
TotalVotes
)
>=
participationRate
&&
float32
(
cur
.
BoardVoteRes
.
ApproveVotes
)
/
float32
(
cur
.
BoardVoteRes
.
ApproveVotes
+
cur
.
BoardVoteRes
.
OpposeVotes
)
>=
approveRate
{
cur
.
BoardVoteRes
.
Pass
=
true
cur
.
PropProject
.
RealEndBlockHeight
=
a
.
height
receipt
,
err
:=
a
.
coinsAccount
.
ExecTransferFrozen
(
cur
.
Address
,
autonomyAddr
,
a
.
execaddr
,
lockAmount
)
if
err
!=
nil
{
alog
.
Error
(
"votePropProject "
,
"addr"
,
cur
.
Address
,
"execaddr"
,
a
.
execaddr
,
"ExecTransferFrozen amount fail"
,
err
)
return
nil
,
err
}
logs
=
append
(
logs
,
receipt
.
Logs
...
)
kv
=
append
(
kv
,
receipt
.
KV
...
)
}
key
:=
propProjectID
(
voteProb
.
ProposalID
)
cur
.
Status
=
auty
.
AutonomyStatusVotePropProject
if
cur
.
BoardVoteRes
.
Pass
{
if
cur
.
PubVote
.
Publicity
{
// 进入公视
cur
.
Status
=
auty
.
AutonomyStatusPubVotePropProject
}
else
{
cur
.
Status
=
auty
.
AutonomyStatusTmintPropProject
}
}
value
=
types
.
Encode
(
&
cur
)
kv
=
append
(
kv
,
&
types
.
KeyValue
{
Key
:
key
,
Value
:
value
})
// 更新VotesRecord
kv
=
append
(
kv
,
&
types
.
KeyValue
{
Key
:
VotesRecord
(
voteProb
.
ProposalID
),
Value
:
types
.
Encode
(
&
votes
)})
ty
:=
auty
.
TyLogVotePropProject
if
cur
.
BoardVoteRes
.
Pass
{
if
cur
.
PubVote
.
Publicity
{
ty
=
auty
.
TyLogPubVotePropProject
}
else
{
ty
=
auty
.
TyLogTmintPropProject
}
}
receiptLog
:=
getProjectReceiptLog
(
pre
,
&
cur
,
int32
(
ty
))
logs
=
append
(
logs
,
receiptLog
)
return
&
types
.
Receipt
{
Ty
:
types
.
ExecOk
,
KV
:
kv
,
Logs
:
logs
},
nil
}
func
(
a
*
action
)
pubVotePropProject
(
voteProb
*
auty
.
PubVoteProposalProject
)
(
*
types
.
Receipt
,
error
)
{
// 获取GameID
value
,
err
:=
a
.
db
.
Get
(
propProjectID
(
voteProb
.
ProposalID
))
if
err
!=
nil
{
alog
.
Error
(
"votePropProject "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"get propProjectID failed"
,
voteProb
.
ProposalID
,
"err"
,
err
)
return
nil
,
err
}
var
cur
auty
.
AutonomyProposalProject
err
=
types
.
Decode
(
value
,
&
cur
)
if
err
!=
nil
{
alog
.
Error
(
"votePropProject "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"decode AutonomyProposalProject failed"
,
voteProb
.
ProposalID
,
"err"
,
err
)
return
nil
,
err
}
pre
:=
copyAutonomyProposalProject
(
&
cur
)
// 检查是否有重复
start
:=
cur
.
GetPropProject
()
.
StartBlockHeight
end
:=
cur
.
GetPropProject
()
.
EndBlockHeight
real
:=
cur
.
GetPropProject
()
.
RealEndBlockHeight
if
start
<
a
.
height
||
end
<
a
.
height
||
(
real
!=
0
&&
real
<
a
.
height
)
{
err
:=
auty
.
ErrVotePeriod
alog
.
Error
(
"votePropProject "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"ProposalID"
,
voteProb
.
ProposalID
,
"err"
,
err
)
return
nil
,
err
}
// 检查当前状态
if
cur
.
Status
!=
auty
.
AutonomyStatusProposalProject
&&
cur
.
Status
!=
auty
.
AutonomyStatusVotePropProject
{
err
:=
auty
.
ErrProposalStatus
alog
.
Error
(
"votePropProject "
,
"addr"
,
a
.
fromaddr
,
"status"
,
cur
.
Status
,
"ProposalID"
,
voteProb
.
ProposalID
,
"err"
,
err
)
return
nil
,
err
}
// 检查是否已经参与投票
var
votes
auty
.
VotesRecord
value
,
err
=
a
.
db
.
Get
(
VotesRecord
(
voteProb
.
ProposalID
))
if
err
==
nil
{
err
=
types
.
Decode
(
value
,
&
votes
)
if
err
!=
nil
{
alog
.
Error
(
"votePropProject "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"decode VotesRecord failed"
,
voteProb
.
ProposalID
,
"err"
,
err
)
return
nil
,
err
}
}
for
_
,
addr
:=
range
votes
.
Address
{
for
_
,
addr
:=
range
votes
.
Address
{
if
addr
==
a
.
fromaddr
{
if
addr
==
a
.
fromaddr
{
err
:=
auty
.
ErrRepeatVoteAddr
err
:=
auty
.
ErrRepeatVoteAddr
...
@@ -196,7 +338,7 @@ func (a *action) votePropProject(voteProb *auty.VoteProposalProject) (*types.Rec
...
@@ -196,7 +338,7 @@ func (a *action) votePropProject(voteProb *auty.VoteProposalProject) (*types.Rec
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
if
voteProb
.
Approve
{
if
voteProb
.
voteProb
{
cur
.
BoardVoteRes
.
ApproveVotes
+=
int32
(
account
.
Balance
/
ticketPrice
)
cur
.
BoardVoteRes
.
ApproveVotes
+=
int32
(
account
.
Balance
/
ticketPrice
)
}
else
{
}
else
{
cur
.
BoardVoteRes
.
OpposeVotes
+=
int32
(
account
.
Balance
/
ticketPrice
)
cur
.
BoardVoteRes
.
OpposeVotes
+=
int32
(
account
.
Balance
/
ticketPrice
)
...
@@ -240,11 +382,6 @@ func (a *action) votePropProject(voteProb *auty.VoteProposalProject) (*types.Rec
...
@@ -240,11 +382,6 @@ func (a *action) votePropProject(voteProb *auty.VoteProposalProject) (*types.Rec
return
&
types
.
Receipt
{
Ty
:
types
.
ExecOk
,
KV
:
kv
,
Logs
:
logs
},
nil
return
&
types
.
Receipt
{
Ty
:
types
.
ExecOk
,
KV
:
kv
,
Logs
:
logs
},
nil
}
}
func
(
a
*
action
)
pubVotePropProject
(
voteProb
*
auty
.
PubVoteProposalProject
)
(
*
types
.
Receipt
,
error
)
{
return
nil
,
nil
}
func
(
a
*
action
)
tmintPropProject
(
tmintProb
*
auty
.
TerminateProposalProject
)
(
*
types
.
Receipt
,
error
)
{
func
(
a
*
action
)
tmintPropProject
(
tmintProb
*
auty
.
TerminateProposalProject
)
(
*
types
.
Receipt
,
error
)
{
// 获取GameID
// 获取GameID
value
,
err
:=
a
.
db
.
Get
(
propProjectID
(
tmintProb
.
ProposalID
))
value
,
err
:=
a
.
db
.
Get
(
propProjectID
(
tmintProb
.
ProposalID
))
...
...
plugin/dapp/autonomy/types/const.go
View file @
dba1186c
...
@@ -30,7 +30,8 @@ const (
...
@@ -30,7 +30,8 @@ const (
TyLogPropProject
=
2111
TyLogPropProject
=
2111
TyLogRvkPropProject
=
2112
TyLogRvkPropProject
=
2112
TyLogVotePropProject
=
2113
TyLogVotePropProject
=
2113
TyLogTmintPropProject
=
2114
TyLogPubVotePropProject
=
2114
TyLogTmintPropProject
=
2115
TyLogPropRule
=
2121
TyLogPropRule
=
2121
TyLogRvkPropRule
=
2122
TyLogRvkPropRule
=
2122
...
@@ -73,6 +74,7 @@ const (
...
@@ -73,6 +74,7 @@ const (
AutonomyStatusProposalProject
=
iota
+
1
AutonomyStatusProposalProject
=
iota
+
1
AutonomyStatusRvkPropProject
AutonomyStatusRvkPropProject
AutonomyStatusVotePropProject
AutonomyStatusVotePropProject
AutonomyStatusPubVotePropProject
AutonomyStatusTmintPropProject
AutonomyStatusTmintPropProject
)
)
...
...
plugin/dapp/autonomy/types/errors.go
View file @
dba1186c
...
@@ -19,4 +19,6 @@ var (
...
@@ -19,4 +19,6 @@ var (
ErrRevokeProposalPower
=
errors
.
New
(
"ErrRevokeProposalPower"
)
ErrRevokeProposalPower
=
errors
.
New
(
"ErrRevokeProposalPower"
)
// ErrTerminatePeriod 不能终止
// ErrTerminatePeriod 不能终止
ErrTerminatePeriod
=
errors
.
New
(
"ErrTerminatePeriod"
)
ErrTerminatePeriod
=
errors
.
New
(
"ErrTerminatePeriod"
)
// ErrNoActiveBoard 没有有效董事会
ErrNoActiveBoard
=
errors
.
New
(
"ErrNoActiveBoard"
)
)
)
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