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
4d9f49bd
Commit
4d9f49bd
authored
Sep 02, 2019
by
liuyuhang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
modify rule change and some bug
parent
80c2cd69
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
80 additions
and
186 deletions
+80
-186
chain33.toml
chain33.toml
+4
-2
proposal_rule.go
plugin/dapp/autonomy/commands/proposal_rule.go
+0
-1
autonomy.go
plugin/dapp/autonomy/executor/autonomy.go
+0
-1
boardaction.go
plugin/dapp/autonomy/executor/boardaction.go
+11
-28
boardaction_test.go
plugin/dapp/autonomy/executor/boardaction_test.go
+10
-0
changeaction.go
plugin/dapp/autonomy/executor/changeaction.go
+8
-27
changeaction_test.go
plugin/dapp/autonomy/executor/changeaction_test.go
+11
-9
projectaction.go
plugin/dapp/autonomy/executor/projectaction.go
+8
-65
projectaction_test.go
plugin/dapp/autonomy/executor/projectaction_test.go
+2
-10
ruleaction.go
plugin/dapp/autonomy/executor/ruleaction.go
+6
-28
ruleaction_test.go
plugin/dapp/autonomy/executor/ruleaction_test.go
+13
-11
errors.go
plugin/dapp/autonomy/types/errors.go
+2
-0
ticketdb.go
plugin/dapp/ticket/executor/ticketdb.go
+4
-3
ticket.go
plugin/dapp/ticket/types/ticket.go
+1
-1
No files found.
chain33.toml
View file @
4d9f49bd
...
...
@@ -86,9 +86,11 @@ name="ticket"
minerstart
=
true
genesisBlockTime
=
1514533394
genesis
=
"14KEKbYtKKQm4wMthSK9J4La4nAiidGozt"
minerExecs
=[
"ticket"
,
"autonomy"
]
[mver.consensus]
fundKeyAddr
=
"1BQXS6TxaYYG5mADaWij4AxhZZUTpw95a5"
autonomyFundAddr
=
"1Ji3W12KGScCM7C2p8bg635sNkayDM8MGY"
coinReward
=
18
coinDevFund
=
12
ticketPrice
=
10000
...
...
@@ -225,5 +227,4 @@ paraConsensusStopBlocks=30000
[exec.sub.autonomy]
total
=
"16htvcBNSEA7fZhAdLJphDwQRQJaHpyHTp"
useBalance
=
false
useBalance
=
false
\ No newline at end of file
plugin/dapp/autonomy/commands/proposal_rule.go
View file @
4d9f49bd
...
...
@@ -37,7 +37,6 @@ func addProposalRuleFlags(cmd *cobra.Command) {
cmd
.
MarkFlagRequired
(
"endBlock"
)
// 可修改规则
cmd
.
Flags
()
.
Int32P
(
"boardAttendRatio"
,
"t"
,
0
,
"board attend ratio(unit is %)"
)
cmd
.
Flags
()
.
Int32P
(
"boardApproveRatio"
,
"r"
,
0
,
"board approve ratio(unit is %)"
)
cmd
.
Flags
()
.
Int32P
(
"pubOpposeRatio"
,
"o"
,
0
,
"public oppose ratio(unit is %)"
)
cmd
.
Flags
()
.
Int64P
(
"proposalAmount"
,
"p"
,
0
,
"proposal cost amount"
)
...
...
plugin/dapp/autonomy/executor/autonomy.go
View file @
4d9f49bd
...
...
@@ -20,7 +20,6 @@ type subConfig struct {
var
(
alog
=
log
.
New
(
"module"
,
"execs.autonomy"
)
driverName
=
auty
.
AutonomyX
autonomyFundAddr
=
address
.
ExecAddress
(
"autonomyfund"
)
autonomyAddr
=
address
.
ExecAddress
(
"autonomy"
)
cfg
subConfig
)
...
...
plugin/dapp/autonomy/executor/boardaction.go
View file @
4d9f49bd
...
...
@@ -54,14 +54,14 @@ func newAction(a *Autonomy, tx *types.Transaction, index int32) *action {
func
(
a
*
action
)
propBoard
(
prob
*
auty
.
ProposalBoard
)
(
*
types
.
Receipt
,
error
)
{
if
len
(
prob
.
Boards
)
>
maxBoards
||
len
(
prob
.
Boards
)
<
minBoards
{
alog
.
Error
(
"propBoard "
,
"proposal boards number is invaild"
,
len
(
prob
.
Boards
))
return
nil
,
types
.
ErrInvalidParam
return
nil
,
auty
.
ErrBoardNumber
}
if
prob
.
StartBlockHeight
<
a
.
height
||
prob
.
EndBlockHeight
<
a
.
height
||
prob
.
StartBlockHeight
+
startEndBlockPeriod
>
prob
.
EndBlockHeight
{
alog
.
Error
(
"propBoard height invaild"
,
"StartBlockHeight"
,
prob
.
StartBlockHeight
,
"EndBlockHeight"
,
prob
.
EndBlockHeight
,
"height"
,
a
.
height
)
return
nil
,
types
.
ErrInvalidParam
return
nil
,
auty
.
ErrSetBlockHeight
}
mpBd
:=
make
(
map
[
string
]
struct
{})
...
...
@@ -86,10 +86,9 @@ func (a *action) propBoard(prob *auty.ProposalBoard) (*types.Receipt, error) {
return
nil
,
err
}
//receipt, err := a.coinsAccount.ExecFrozen(a.fromaddr, a.execaddr, rule.ProposalAmount)
receipt
,
err
:=
a
.
coinsAccount
.
Transfer
(
a
.
fromaddr
,
a
.
execaddr
,
rule
.
ProposalAmount
)
if
err
!=
nil
{
alog
.
Error
(
"propBoard "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"
ExecFrozen
amount"
,
rule
.
ProposalAmount
)
alog
.
Error
(
"propBoard "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"
Transfer
amount"
,
rule
.
ProposalAmount
)
return
nil
,
err
}
...
...
@@ -153,9 +152,9 @@ func (a *action) rvkPropBoard(rvkProb *auty.RevokeProposalBoard) (*types.Receipt
var
logs
[]
*
types
.
ReceiptLog
var
kv
[]
*
types
.
KeyValue
receipt
,
err
:=
a
.
coinsAccount
.
Transfer
Withdraw
(
a
.
fromaddr
,
a
.
exec
addr
,
cur
.
CurRule
.
ProposalAmount
)
receipt
,
err
:=
a
.
coinsAccount
.
Transfer
(
a
.
execaddr
,
a
.
from
addr
,
cur
.
CurRule
.
ProposalAmount
)
if
err
!=
nil
{
alog
.
Error
(
"rvkPropBoard "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"
ExecActive
amount"
,
cur
.
CurRule
.
ProposalAmount
,
"err"
,
err
)
alog
.
Error
(
"rvkPropBoard "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"
Transfer
amount"
,
cur
.
CurRule
.
ProposalAmount
,
"err"
,
err
)
return
nil
,
err
}
logs
=
append
(
logs
,
receipt
.
Logs
...
)
...
...
@@ -256,16 +255,6 @@ func (a *action) votePropBoard(voteProb *auty.VoteProposalBoard) (*types.Receipt
var
logs
[]
*
types
.
ReceiptLog
var
kv
[]
*
types
.
KeyValue
//// 首次进入投票期,即将提案金转入自治系统地址
//if cur.Status == auty.AutonomyStatusProposalBoard {
// receipt, err := a.coinsAccount.ExecTransferFrozen(cur.Address, autonomyFundAddr, a.execaddr, cur.CurRule.ProposalAmount)
// if err != nil {
// alog.Error("votePropBoard ", "addr", cur.Address, "execaddr", a.execaddr, "ExecTransferFrozen amount fail", err)
// return nil, err
// }
// logs = append(logs, receipt.Logs...)
// kv = append(kv, receipt.KV...)
//}
if
cur
.
VoteResult
.
TotalVotes
!=
0
&&
cur
.
VoteResult
.
ApproveVotes
+
cur
.
VoteResult
.
OpposeVotes
!=
0
&&
...
...
@@ -350,17 +339,6 @@ func (a *action) tmintPropBoard(tmintProb *auty.TerminateProposalBoard) (*types.
var
logs
[]
*
types
.
ReceiptLog
var
kv
[]
*
types
.
KeyValue
//// 未进行投票情况下,符合提案关闭的也需要扣除提案费用
//if cur.Status == auty.AutonomyStatusProposalBoard {
// receipt, err := a.coinsAccount.ExecTransferFrozen(cur.Address, autonomyFundAddr, a.execaddr, cur.CurRule.ProposalAmount)
// if err != nil {
// alog.Error("votePropBoard ", "addr", a.fromaddr, "execaddr", a.execaddr, "ExecTransferFrozen amount fail", err)
// return nil, err
// }
// logs = append(logs, receipt.Logs...)
// kv = append(kv, receipt.KV...)
//}
cur
.
Status
=
auty
.
AutonomyStatusTmintPropBoard
kv
=
append
(
kv
,
&
types
.
KeyValue
{
Key
:
propBoardID
(
tmintProb
.
ProposalID
),
Value
:
types
.
Encode
(
cur
)})
...
...
@@ -393,7 +371,8 @@ func (a *action) getTotalVotes(height int64) (int32, error) {
}
func
(
a
*
action
)
verifyMinerAddr
(
addrs
[]
string
,
bindAddr
string
)
(
string
,
error
)
{
// 验证绑定关系
// 验证绑定关系与重复地址
mp
:=
make
(
map
[
string
]
struct
{})
for
_
,
addr
:=
range
addrs
{
value
,
err
:=
a
.
db
.
Get
(
ticket
.
BindKey
(
addr
))
if
err
!=
nil
{
...
...
@@ -404,6 +383,10 @@ func (a *action) verifyMinerAddr(addrs []string, bindAddr string) (string, error
if
err
!=
nil
||
tkBind
.
MinerAddress
!=
bindAddr
{
return
addr
,
auty
.
ErrBindAddr
}
if
_
,
ok
:=
mp
[
addr
];
ok
{
return
addr
,
auty
.
ErrRepeatAddr
}
mp
[
addr
]
=
struct
{}{}
}
return
""
,
nil
}
...
...
plugin/dapp/autonomy/executor/boardaction_test.go
View file @
4d9f49bd
...
...
@@ -598,6 +598,16 @@ func TestVerifyMinerAddr(t *testing.T) {
}
_
,
err
:=
action
.
verifyMinerAddr
(
addrs
,
AddrD
)
assert
.
NoError
(
t
,
err
)
// ErrRepeatAddr
addrss
:=
[]
string
{
AddrA
,
AddrB
,
AddrC
,
AddrA
,
}
add
,
err
:=
action
.
verifyMinerAddr
(
addrss
,
AddrD
)
assert
.
Equal
(
t
,
auty
.
ErrRepeatAddr
,
err
)
assert
.
Equal
(
t
,
add
,
AddrA
)
// ErrMinerAddr
testf
:=
"12HKLEn6g4FH39yUbHh4EVJWcFo5CXg22d"
...
...
plugin/dapp/autonomy/executor/changeaction.go
View file @
4d9f49bd
...
...
@@ -8,6 +8,7 @@ import (
"github.com/33cn/chain33/common"
"github.com/33cn/chain33/types"
auty
"github.com/33cn/plugin/plugin/dapp/autonomy/types"
"sort"
)
func
(
a
*
action
)
propChange
(
prob
*
auty
.
ProposalChange
)
(
*
types
.
Receipt
,
error
)
{
...
...
@@ -20,7 +21,7 @@ func (a *action) propChange(prob *auty.ProposalChange) (*types.Receipt, error) {
prob
.
StartBlockHeight
+
startEndBlockPeriod
>
prob
.
EndBlockHeight
{
alog
.
Error
(
"propChange height invaild"
,
"StartBlockHeight"
,
prob
.
StartBlockHeight
,
"EndBlockHeight"
,
prob
.
EndBlockHeight
,
"height"
,
a
.
height
)
return
nil
,
types
.
ErrInvalidParam
return
nil
,
auty
.
ErrSetBlockHeight
}
act
,
err
:=
a
.
getActiveBoard
()
...
...
@@ -42,9 +43,9 @@ func (a *action) propChange(prob *auty.ProposalChange) (*types.Receipt, error) {
return
nil
,
err
}
receipt
,
err
:=
a
.
coinsAccount
.
ExecFrozen
(
a
.
fromaddr
,
a
.
execaddr
,
rule
.
ProposalAmount
)
receipt
,
err
:=
a
.
coinsAccount
.
Transfer
(
a
.
fromaddr
,
a
.
execaddr
,
rule
.
ProposalAmount
)
if
err
!=
nil
{
alog
.
Error
(
"propChange "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"
ExecFrozen
amount"
,
rule
.
ProposalAmount
)
alog
.
Error
(
"propChange "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"
Transfer
amount"
,
rule
.
ProposalAmount
)
return
nil
,
err
}
...
...
@@ -111,9 +112,9 @@ func (a *action) rvkPropChange(rvkProb *auty.RevokeProposalChange) (*types.Recei
var
logs
[]
*
types
.
ReceiptLog
var
kv
[]
*
types
.
KeyValue
receipt
,
err
:=
a
.
coinsAccount
.
ExecActive
(
a
.
fromaddr
,
a
.
exec
addr
,
cur
.
CurRule
.
ProposalAmount
)
receipt
,
err
:=
a
.
coinsAccount
.
Transfer
(
a
.
execaddr
,
a
.
from
addr
,
cur
.
CurRule
.
ProposalAmount
)
if
err
!=
nil
{
alog
.
Error
(
"rvkPropChange "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"
ExecActive
amount"
,
cur
.
CurRule
.
ProposalAmount
,
"err"
,
err
)
alog
.
Error
(
"rvkPropChange "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"
Transfer
amount"
,
cur
.
CurRule
.
ProposalAmount
,
"err"
,
err
)
return
nil
,
err
}
logs
=
append
(
logs
,
receipt
.
Logs
...
)
...
...
@@ -176,16 +177,6 @@ func (a *action) votePropChange(voteProb *auty.VoteProposalChange) (*types.Recei
var
logs
[]
*
types
.
ReceiptLog
var
kv
[]
*
types
.
KeyValue
// 首次进入投票期,即将提案金转入自治系统地址
if
cur
.
Status
==
auty
.
AutonomyStatusProposalChange
{
receipt
,
err
:=
a
.
coinsAccount
.
ExecTransferFrozen
(
cur
.
Address
,
autonomyFundAddr
,
a
.
execaddr
,
cur
.
CurRule
.
ProposalAmount
)
if
err
!=
nil
{
alog
.
Error
(
"votePropChange "
,
"addr"
,
cur
.
Address
,
"execaddr"
,
a
.
execaddr
,
"ExecTransferFrozen amount fail"
,
err
)
return
nil
,
err
}
logs
=
append
(
logs
,
receipt
.
Logs
...
)
kv
=
append
(
kv
,
receipt
.
KV
...
)
}
if
cur
.
VoteResult
.
TotalVotes
!=
0
&&
float32
(
cur
.
VoteResult
.
ApproveVotes
)
/
float32
(
cur
.
VoteResult
.
TotalVotes
)
>
float32
(
cur
.
CurRule
.
BoardApproveRatio
)
/
100.0
{
...
...
@@ -256,18 +247,6 @@ func (a *action) tmintPropChange(tmintProb *auty.TerminateProposalChange) (*type
var
logs
[]
*
types
.
ReceiptLog
var
kv
[]
*
types
.
KeyValue
// 未进行投票情况下,符合提案关闭的也需要扣除提案费用
if
cur
.
Status
==
auty
.
AutonomyStatusProposalChange
{
receipt
,
err
:=
a
.
coinsAccount
.
ExecTransferFrozen
(
cur
.
Address
,
autonomyFundAddr
,
a
.
execaddr
,
cur
.
CurRule
.
ProposalAmount
)
if
err
!=
nil
{
alog
.
Error
(
"votePropChange "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"ExecTransferFrozen amount fail"
,
err
)
return
nil
,
err
}
logs
=
append
(
logs
,
receipt
.
Logs
...
)
kv
=
append
(
kv
,
receipt
.
KV
...
)
}
cur
.
Status
=
auty
.
AutonomyStatusTmintPropChange
kv
=
append
(
kv
,
&
types
.
KeyValue
{
Key
:
propChangeID
(
tmintProb
.
ProposalID
),
Value
:
types
.
Encode
(
cur
)})
...
...
@@ -331,9 +310,11 @@ func (a *action) checkChangeable(act *auty.ActiveBoard, change []*auty.Change) (
for
k
:=
range
mpBd
{
new
.
Boards
=
append
(
new
.
Boards
,
k
)
}
sort
.
Strings
(
new
.
Boards
)
for
k
:=
range
mpRbd
{
new
.
Revboards
=
append
(
new
.
Revboards
,
k
)
}
sort
.
Strings
(
new
.
Revboards
)
return
new
,
nil
}
...
...
plugin/dapp/autonomy/executor/changeaction_test.go
View file @
4d9f49bd
...
...
@@ -99,8 +99,8 @@ func testPropChange(t *testing.T, env *ExecEnv, exec drivers.Driver, stateDB dbm
// check
accCoin
:=
account
.
NewCoinsAccount
()
accCoin
.
SetDB
(
stateDB
)
account
:=
accCoin
.
Load
ExecAccount
(
AddrA
,
address
.
ExecAddress
(
auty
.
AutonomyX
))
assert
.
Equal
(
t
,
proposalAmount
,
account
.
Frozen
)
account
:=
accCoin
.
Load
Account
(
address
.
ExecAddress
(
auty
.
AutonomyX
))
assert
.
Equal
(
t
,
proposalAmount
,
account
.
Balance
)
}
func
propChangeTx
(
parm
*
auty
.
ProposalChange
)
(
*
types
.
Transaction
,
error
)
{
...
...
@@ -149,8 +149,8 @@ func revokeProposalChange(t *testing.T, env *ExecEnv, exec drivers.Driver, state
// check
accCoin
:=
account
.
NewCoinsAccount
()
accCoin
.
SetDB
(
stateDB
)
account
:=
accCoin
.
Load
ExecAccount
(
AddrA
,
address
.
ExecAddress
(
auty
.
AutonomyX
))
assert
.
Equal
(
t
,
int64
(
0
),
account
.
Frozen
)
account
:=
accCoin
.
Load
Account
(
address
.
ExecAddress
(
auty
.
AutonomyX
))
assert
.
Equal
(
t
,
int64
(
0
),
account
.
Balance
)
}
func
revokeProposalChangeTx
(
parm
*
auty
.
RevokeProposalChange
)
(
*
types
.
Transaction
,
error
)
{
...
...
@@ -262,9 +262,9 @@ func voteProposalChange(t *testing.T, env *ExecEnv, exec drivers.Driver, stateDB
// balance
accCoin
:=
account
.
NewCoinsAccount
()
accCoin
.
SetDB
(
stateDB
)
account
:=
accCoin
.
Load
ExecAccount
(
AddrA
,
address
.
ExecAddress
(
auty
.
AutonomyX
)
)
assert
.
Equal
(
t
,
int64
(
0
),
account
.
Frozen
)
account
=
accCoin
.
Load
ExecAccount
(
autonomyFundAddr
,
address
.
ExecAddress
(
auty
.
AutonomyX
))
account
:=
accCoin
.
Load
Account
(
AddrA
)
assert
.
Equal
(
t
,
total
-
proposalAmount
,
account
.
Balance
)
account
=
accCoin
.
Load
Account
(
address
.
ExecAddress
(
auty
.
AutonomyX
))
assert
.
Equal
(
t
,
proposalAmount
,
account
.
Balance
)
// status
value
,
err
:=
stateDB
.
Get
(
propChangeID
(
proposalID
))
...
...
@@ -347,8 +347,10 @@ func terminateProposalChange(t *testing.T, env *ExecEnv, exec drivers.Driver, st
// check
accCoin
:=
account
.
NewCoinsAccount
()
accCoin
.
SetDB
(
stateDB
)
account
:=
accCoin
.
LoadExecAccount
(
AddrA
,
address
.
ExecAddress
(
auty
.
AutonomyX
))
assert
.
Equal
(
t
,
int64
(
0
),
account
.
Frozen
)
account
:=
accCoin
.
LoadAccount
(
AddrA
)
assert
.
Equal
(
t
,
total
-
proposalAmount
,
account
.
Balance
)
account
=
accCoin
.
LoadAccount
(
address
.
ExecAddress
(
auty
.
AutonomyX
))
assert
.
Equal
(
t
,
proposalAmount
,
account
.
Balance
)
}
func
terminateProposalChangeTx
(
parm
*
auty
.
TerminateProposalChange
)
(
*
types
.
Transaction
,
error
)
{
...
...
plugin/dapp/autonomy/executor/projectaction.go
View file @
4d9f49bd
...
...
@@ -27,7 +27,7 @@ func (a *action) propProject(prob *auty.ProposalProject) (*types.Receipt, error)
prob
.
StartBlockHeight
+
startEndBlockPeriod
>
prob
.
EndBlockHeight
{
alog
.
Error
(
"propProject height or amount invaild"
,
"StartBlockHeight"
,
prob
.
StartBlockHeight
,
"EndBlockHeight"
,
prob
.
EndBlockHeight
,
"height"
,
a
.
height
,
"amount"
,
prob
.
Amount
)
return
nil
,
types
.
ErrInvalidParam
return
nil
,
auty
.
ErrSetBlockHeight
}
// 获取董事会成员
...
...
@@ -68,23 +68,15 @@ func (a *action) propProject(prob *auty.ProposalProject) (*types.Receipt, error)
var
logs
[]
*
types
.
ReceiptLog
var
kv
[]
*
types
.
KeyValue
//
冻结
提案金
// 提案金
receipt
,
err
:=
a
.
coinsAccount
.
Transfer
(
a
.
fromaddr
,
a
.
execaddr
,
rule
.
ProposalAmount
)
if
err
!=
nil
{
alog
.
Error
(
"propProject "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"
ExecFrozen
proposal amount"
,
rule
.
ProposalAmount
,
"error"
,
err
)
alog
.
Error
(
"propProject "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"
Transfer
proposal amount"
,
rule
.
ProposalAmount
,
"error"
,
err
)
return
nil
,
err
}
logs
=
append
(
logs
,
receipt
.
Logs
...
)
kv
=
append
(
kv
,
receipt
.
KV
...
)
//// 冻结项目金
//receiptPrj, err := a.coinsAccount.ExecFrozen(autonomyFundAddr, a.execaddr, prob.Amount)
//if err != nil {
// alog.Error("propProject ", "addr", a.fromaddr, "execaddr", a.execaddr, "ExecFrozen project amount", prob.Amount, "error", err)
// return nil, err
//}
//logs = append(logs, receiptPrj.Logs...)
//kv = append(kv, receiptPrj.KV...)
var
isPubVote
bool
if
prob
.
Amount
>=
rule
.
LargeProjectAmount
{
...
...
@@ -147,24 +139,15 @@ func (a *action) rvkPropProject(rvkProb *auty.RevokeProposalProject) (*types.Rec
var
logs
[]
*
types
.
ReceiptLog
var
kv
[]
*
types
.
KeyValue
//
解冻
提案金
receipt
,
err
:=
a
.
coinsAccount
.
Transfer
Withdraw
(
a
.
fromaddr
,
a
.
exec
addr
,
cur
.
CurRule
.
ProposalAmount
)
// 提案金
receipt
,
err
:=
a
.
coinsAccount
.
Transfer
(
a
.
execaddr
,
a
.
from
addr
,
cur
.
CurRule
.
ProposalAmount
)
if
err
!=
nil
{
alog
.
Error
(
"rvkPropProject "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"
ExecActive
amount"
,
cur
.
CurRule
.
ProposalAmount
,
"err"
,
err
)
alog
.
Error
(
"rvkPropProject "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"
Transfer
amount"
,
cur
.
CurRule
.
ProposalAmount
,
"err"
,
err
)
return
nil
,
err
}
logs
=
append
(
logs
,
receipt
.
Logs
...
)
kv
=
append
(
kv
,
receipt
.
KV
...
)
//// 解冻项目金
//receiptPrj, err := a.coinsAccount.ExecActive(autonomyFundAddr, a.execaddr, cur.PropProject.Amount)
//if err != nil {
// alog.Error("rvkPropProject ", "addr", a.fromaddr, "execaddr", a.execaddr, "ExecActive project amount", cur.PropProject.Amount, "error", err)
// return nil, err
//}
//logs = append(logs, receiptPrj.Logs...)
//kv = append(kv, receiptPrj.KV...)
cur
.
Status
=
auty
.
AutonomyStatusRvkPropProject
kv
=
append
(
kv
,
&
types
.
KeyValue
{
Key
:
propProjectID
(
rvkProb
.
ProposalID
),
Value
:
types
.
Encode
(
cur
)})
...
...
@@ -239,17 +222,6 @@ func (a *action) votePropProject(voteProb *auty.VoteProposalProject) (*types.Rec
var
logs
[]
*
types
.
ReceiptLog
var
kv
[]
*
types
.
KeyValue
//// 首次进入投票期,即将提案金转入自治系统地址
//if cur.Status == auty.AutonomyStatusProposalProject {
// receipt, err := a.coinsAccount.ExecTransferFrozen(cur.Address, autonomyFundAddr, a.execaddr, cur.CurRule.ProposalAmount)
// 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...)
//}
if
cur
.
BoardVoteRes
.
TotalVotes
!=
0
&&
float32
(
cur
.
BoardVoteRes
.
ApproveVotes
)
/
float32
(
cur
.
BoardVoteRes
.
TotalVotes
)
>=
float32
(
cur
.
CurRule
.
BoardApproveRatio
)
/
100.0
{
cur
.
BoardVoteRes
.
Pass
=
true
...
...
@@ -268,7 +240,7 @@ func (a *action) votePropProject(voteProb *auty.VoteProposalProject) (*types.Rec
// 提案通过,将工程金额从基金付款给承包商
receipt
,
err
:=
a
.
coinsAccount
.
Transfer
(
a
.
execaddr
,
cur
.
PropProject
.
ToAddr
,
cur
.
PropProject
.
Amount
)
if
err
!=
nil
{
alog
.
Error
(
"votePropProject "
,
"addr"
,
cur
.
Address
,
"execaddr"
,
a
.
execaddr
,
"
ExecTransferFrozen
to contractor project amount fail"
,
err
)
alog
.
Error
(
"votePropProject "
,
"addr"
,
cur
.
Address
,
"execaddr"
,
a
.
execaddr
,
"
Transfer
to contractor project amount fail"
,
err
)
return
nil
,
err
}
logs
=
append
(
logs
,
receipt
.
Logs
...
)
...
...
@@ -387,14 +359,6 @@ func (a *action) pubVotePropProject(voteProb *auty.PubVoteProposalProject) (*typ
cur
.
PubVote
.
PubPass
=
false
cur
.
PropProject
.
RealEndBlockHeight
=
a
.
height
//// 解冻项目金
//receiptPrj, err := a.coinsAccount.ExecActive(autonomyFundAddr, a.execaddr, cur.PropProject.Amount)
//if err != nil {
// alog.Error("pubVotePropProject ", "addr", a.fromaddr, "execaddr", a.execaddr, "ExecActive project amount", cur.PropProject.Amount, "error", err)
// return nil, err
//}
//logs = append(logs, receiptPrj.Logs...)
//kv = append(kv, receiptPrj.KV...)
}
key
:=
propProjectID
(
voteProb
.
ProposalID
)
...
...
@@ -478,23 +442,12 @@ func (a *action) tmintPropProject(tmintProb *auty.TerminateProposalProject) (*ty
var
logs
[]
*
types
.
ReceiptLog
var
kv
[]
*
types
.
KeyValue
// 如果为提案状态,则判断是否需要扣除提案费
//if cur.Status == auty.AutonomyStatusProposalProject && a.height > end {
// receipt, err := a.coinsAccount.ExecTransferFrozen(cur.Address, autonomyFundAddr, a.execaddr, cur.CurRule.ProposalAmount)
// if err != nil {
// alog.Error("tmintPropProject ", "addr", cur.Address, "execaddr", a.execaddr, "ExecTransferFrozen amount fail", err)
// return nil, err
// }
// logs = append(logs, receipt.Logs...)
// kv = append(kv, receipt.KV...)
//}
if
(
cur
.
PubVote
.
Publicity
&&
cur
.
PubVote
.
PubPass
)
||
// 需要公示且公示通过
(
!
cur
.
PubVote
.
Publicity
&&
cur
.
BoardVoteRes
.
Pass
)
{
// 不需要公示且董事会通过
// 提案通过,将工程金额从基金付款给承包商
receipt
,
err
:=
a
.
coinsAccount
.
Transfer
(
a
.
execaddr
,
cur
.
PropProject
.
ToAddr
,
cur
.
PropProject
.
Amount
)
if
err
!=
nil
{
alog
.
Error
(
"tmintPropProject "
,
"addr"
,
cur
.
Address
,
"execaddr"
,
a
.
execaddr
,
"
ExecTransferFrozen
to contractor project amount fail"
,
err
)
alog
.
Error
(
"tmintPropProject "
,
"addr"
,
cur
.
Address
,
"execaddr"
,
a
.
execaddr
,
"
Transfer
to contractor project amount fail"
,
err
)
return
nil
,
err
}
logs
=
append
(
logs
,
receipt
.
Logs
...
)
...
...
@@ -507,16 +460,6 @@ func (a *action) tmintPropProject(tmintProb *auty.TerminateProposalProject) (*ty
}
kv
=
append
(
kv
,
pakv
)
}
// else {
// // 解冻项目金
// receiptPrj, err := a.coinsAccount.ExecActive(autonomyFundAddr, a.execaddr, cur.PropProject.Amount)
// if err != nil {
// alog.Error("tmintPropProject ", "addr", a.fromaddr, "execaddr", a.execaddr, "ExecActive project amount", cur.PropProject.Amount, "error", err)
// return nil, err
// }
// logs = append(logs, receiptPrj.Logs...)
// kv = append(kv, receiptPrj.KV...)
//}
cur
.
Status
=
auty
.
AutonomyStatusTmintPropProject
...
...
plugin/dapp/autonomy/executor/projectaction_test.go
View file @
4d9f49bd
...
...
@@ -20,14 +20,6 @@ import (
"github.com/stretchr/testify/mock"
)
//const (
// testBoardAttendRatio int32 = 60
// testBoardApproveRatio int32 = 60
// testPubOpposeRatio int32 = 30
// testProposalAmount int64 = 0
// testLargeProjectAmount int64 = 1
//)
const
(
testProjectAmount
int64
=
types
.
Coin
*
100
// 工程需要资金
...
...
@@ -103,8 +95,8 @@ func TestPropProject(t *testing.T) {
result
:=
[]
error
{
types
.
ErrInvalidAddress
,
types
.
ErrInvalidParam
,
types
.
ErrInvalidParam
,
auty
.
ErrSetBlockHeight
,
auty
.
ErrSetBlockHeight
,
types
.
ErrNotFound
,
auty
.
ErrNoPeriodAmount
,
}
...
...
plugin/dapp/autonomy/executor/ruleaction.go
View file @
4d9f49bd
...
...
@@ -56,7 +56,7 @@ func (a *action) propRule(prob *auty.ProposalRule) (*types.Receipt, error) {
prob
.
StartBlockHeight
+
startEndBlockPeriod
>
prob
.
EndBlockHeight
{
alog
.
Error
(
"propRule height invaild"
,
"StartBlockHeight"
,
prob
.
StartBlockHeight
,
"EndBlockHeight"
,
prob
.
EndBlockHeight
,
"height"
,
a
.
height
)
return
nil
,
types
.
ErrInvalidParam
return
nil
,
auty
.
ErrSetBlockHeight
}
// 获取当前生效提案规则,并且将不修改的规则补齐
...
...
@@ -66,9 +66,9 @@ func (a *action) propRule(prob *auty.ProposalRule) (*types.Receipt, error) {
return
nil
,
err
}
receipt
,
err
:=
a
.
coinsAccount
.
ExecFrozen
(
a
.
fromaddr
,
a
.
execaddr
,
rule
.
ProposalAmount
)
receipt
,
err
:=
a
.
coinsAccount
.
Transfer
(
a
.
fromaddr
,
a
.
execaddr
,
rule
.
ProposalAmount
)
if
err
!=
nil
{
alog
.
Error
(
"propRule "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"
ExecFrozen
amount"
,
rule
.
ProposalAmount
)
alog
.
Error
(
"propRule "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"
Transfer
amount"
,
rule
.
ProposalAmount
)
return
nil
,
err
}
...
...
@@ -134,9 +134,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
.
exec
addr
,
cur
.
CurRule
.
ProposalAmount
)
receipt
,
err
:=
a
.
coinsAccount
.
Transfer
(
a
.
execaddr
,
a
.
from
addr
,
cur
.
CurRule
.
ProposalAmount
)
if
err
!=
nil
{
alog
.
Error
(
"rvkPropRule "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"
ExecActive
amount"
,
cur
.
CurRule
.
ProposalAmount
,
"err"
,
err
)
alog
.
Error
(
"rvkPropRule "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"
Transfer
amount"
,
cur
.
CurRule
.
ProposalAmount
,
"err"
,
err
)
return
nil
,
err
}
logs
=
append
(
logs
,
receipt
.
Logs
...
)
...
...
@@ -238,17 +238,6 @@ func (a *action) votePropRule(voteProb *auty.VoteProposalRule) (*types.Receipt,
var
logs
[]
*
types
.
ReceiptLog
var
kv
[]
*
types
.
KeyValue
// 首次进入投票期,即将提案金转入自治系统地址
if
cur
.
Status
==
auty
.
AutonomyStatusProposalRule
{
receipt
,
err
:=
a
.
coinsAccount
.
ExecTransferFrozen
(
cur
.
Address
,
autonomyFundAddr
,
a
.
execaddr
,
cur
.
CurRule
.
ProposalAmount
)
if
err
!=
nil
{
alog
.
Error
(
"votePropRule "
,
"addr"
,
cur
.
Address
,
"execaddr"
,
a
.
execaddr
,
"ExecTransferFrozen amount fail"
,
err
)
return
nil
,
err
}
logs
=
append
(
logs
,
receipt
.
Logs
...
)
kv
=
append
(
kv
,
receipt
.
KV
...
)
}
if
cur
.
VoteResult
.
TotalVotes
!=
0
&&
cur
.
VoteResult
.
ApproveVotes
+
cur
.
VoteResult
.
OpposeVotes
!=
0
&&
float32
(
cur
.
VoteResult
.
ApproveVotes
+
cur
.
VoteResult
.
OpposeVotes
)
/
float32
(
cur
.
VoteResult
.
TotalVotes
)
>
float32
(
pubAttendRatio
)
/
100.0
&&
...
...
@@ -330,17 +319,6 @@ func (a *action) tmintPropRule(tmintProb *auty.TerminateProposalRule) (*types.Re
var
logs
[]
*
types
.
ReceiptLog
var
kv
[]
*
types
.
KeyValue
// 未进行投票情况下,符合提案关闭的也需要扣除提案费用
if
cur
.
Status
==
auty
.
AutonomyStatusProposalRule
{
receipt
,
err
:=
a
.
coinsAccount
.
ExecTransferFrozen
(
cur
.
Address
,
autonomyFundAddr
,
a
.
execaddr
,
cur
.
CurRule
.
ProposalAmount
)
if
err
!=
nil
{
alog
.
Error
(
"votePropRule "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"ExecTransferFrozen amount fail"
,
err
)
return
nil
,
err
}
logs
=
append
(
logs
,
receipt
.
Logs
...
)
kv
=
append
(
kv
,
receipt
.
KV
...
)
}
cur
.
Status
=
auty
.
AutonomyStatusTmintPropRule
...
...
@@ -366,7 +344,7 @@ func (a *action) transfer(tf *auty.TransferFund) (*types.Receipt, error) {
var
logs
[]
*
types
.
ReceiptLog
var
kv
[]
*
types
.
KeyValue
receipt
,
err
:=
a
.
coinsAccount
.
ExecTransfer
(
a
.
fromaddr
,
autonomyFundAddr
,
a
.
execa
ddr
,
tf
.
Amount
)
receipt
,
err
:=
a
.
coinsAccount
.
Transfer
(
a
.
fromaddr
,
autonomyA
ddr
,
tf
.
Amount
)
if
err
!=
nil
{
alog
.
Error
(
"autonomy transfer "
,
"addr"
,
a
.
fromaddr
,
"amount"
,
tf
.
Amount
,
"ExecTransfer fail"
,
err
)
return
nil
,
err
...
...
plugin/dapp/autonomy/executor/ruleaction_test.go
View file @
4d9f49bd
...
...
@@ -186,8 +186,8 @@ func testPropRule(t *testing.T, env *ExecEnv, exec drivers.Driver, stateDB dbm.K
// check
accCoin
:=
account
.
NewCoinsAccount
()
accCoin
.
SetDB
(
stateDB
)
account
:=
accCoin
.
Load
ExecAccount
(
AddrA
,
address
.
ExecAddress
(
auty
.
AutonomyX
))
assert
.
Equal
(
t
,
proposalAmount
,
account
.
Frozen
)
account
:=
accCoin
.
Load
Account
(
address
.
ExecAddress
(
auty
.
AutonomyX
))
assert
.
Equal
(
t
,
proposalAmount
,
account
.
Balance
)
}
func
propRuleTx
(
parm
*
auty
.
ProposalRule
)
(
*
types
.
Transaction
,
error
)
{
...
...
@@ -236,8 +236,8 @@ func revokeProposalRule(t *testing.T, env *ExecEnv, exec drivers.Driver, stateDB
// check
accCoin
:=
account
.
NewCoinsAccount
()
accCoin
.
SetDB
(
stateDB
)
account
:=
accCoin
.
Load
ExecAccount
(
AddrA
,
address
.
ExecAddress
(
auty
.
AutonomyX
))
assert
.
Equal
(
t
,
int64
(
0
),
account
.
Frozen
)
account
:=
accCoin
.
Load
Account
(
address
.
ExecAddress
(
auty
.
AutonomyX
))
assert
.
Equal
(
t
,
int64
(
0
),
account
.
Balance
)
// check rule
au
:=
&
Autonomy
{
drivers
.
DriverBase
{},
...
...
@@ -356,9 +356,9 @@ func voteProposalRule(t *testing.T, env *ExecEnv, exec drivers.Driver, stateDB d
// balance
accCoin
:=
account
.
NewCoinsAccount
()
accCoin
.
SetDB
(
stateDB
)
account
:=
accCoin
.
Load
ExecAccount
(
AddrA
,
address
.
ExecAddress
(
auty
.
AutonomyX
)
)
assert
.
Equal
(
t
,
int64
(
0
),
account
.
Frozen
)
account
=
accCoin
.
Load
ExecAccount
(
autonomyFundAddr
,
address
.
ExecAddress
(
auty
.
AutonomyX
))
account
:=
accCoin
.
Load
Account
(
AddrA
)
assert
.
Equal
(
t
,
total
-
proposalAmount
,
account
.
Balance
)
account
=
accCoin
.
Load
Account
(
address
.
ExecAddress
(
auty
.
AutonomyX
))
assert
.
Equal
(
t
,
proposalAmount
,
account
.
Balance
)
// status
value
,
err
:=
stateDB
.
Get
(
propRuleID
(
proposalID
))
...
...
@@ -447,8 +447,10 @@ func terminateProposalRule(t *testing.T, env *ExecEnv, exec drivers.Driver, stat
// check
accCoin
:=
account
.
NewCoinsAccount
()
accCoin
.
SetDB
(
stateDB
)
account
:=
accCoin
.
LoadExecAccount
(
AddrA
,
address
.
ExecAddress
(
auty
.
AutonomyX
))
assert
.
Equal
(
t
,
int64
(
0
),
account
.
Frozen
)
account
:=
accCoin
.
LoadAccount
(
AddrA
)
assert
.
Equal
(
t
,
total
-
proposalAmount
,
account
.
Balance
)
account
=
accCoin
.
LoadAccount
(
address
.
ExecAddress
(
auty
.
AutonomyX
))
assert
.
Equal
(
t
,
proposalAmount
,
account
.
Balance
)
// check rule
au
:=
&
Autonomy
{
...
...
@@ -589,9 +591,9 @@ func TestTransfer(t *testing.T) {
// check
accCoin
:=
account
.
NewCoinsAccount
()
accCoin
.
SetDB
(
stateDB
)
account
:=
accCoin
.
Load
ExecAccount
(
AddrA
,
address
.
ExecAddress
(
auty
.
AutonomyX
)
)
account
:=
accCoin
.
Load
Account
(
AddrA
)
assert
.
Equal
(
t
,
total
-
types
.
Coin
*
190
,
account
.
Balance
)
account
=
accCoin
.
Load
ExecAccount
(
autonomyFundAddr
,
address
.
ExecAddress
(
auty
.
AutonomyX
))
account
=
accCoin
.
Load
Account
(
address
.
ExecAddress
(
auty
.
AutonomyX
))
assert
.
Equal
(
t
,
types
.
Coin
*
190
,
account
.
Balance
)
}
...
...
plugin/dapp/autonomy/types/errors.go
View file @
4d9f49bd
...
...
@@ -37,4 +37,6 @@ var (
ErrRepeatAddr
=
errors
.
New
(
"ErrRepeatAddr"
)
// ErrNotEnoughFund 重复地址
ErrNotEnoughFund
=
errors
.
New
(
"ErrNotEnoughFund"
)
// ErrSetBlockHeight
ErrSetBlockHeight
=
errors
.
New
(
"ErrSetBlockHeight"
)
)
plugin/dapp/ticket/executor/ticketdb.go
View file @
4d9f49bd
...
...
@@ -341,11 +341,12 @@ func (action *Action) TicketMiner(miner *ty.TicketMiner, index int) (*types.Rece
}
//fund
var
receipt2
*
types
.
Receipt
if
types
.
IsFork
(
action
.
height
,
"ForkTicketFundAddrV
2
"
)
{
if
types
.
IsFork
(
action
.
height
,
"ForkTicketFundAddrV
1
"
)
{
// issue coins to exec addr
receipt2
,
err
=
action
.
coinsAccount
.
ExecIssueCoins
(
types
.
GetFundAddr
(),
cfg
.
CoinDevFund
)
addr
:=
types
.
MGStr
(
"mver.consensus.autonomyFundAddr"
,
0
)
receipt2
,
err
=
action
.
coinsAccount
.
ExecIssueCoins
(
addr
,
cfg
.
CoinDevFund
)
if
err
!=
nil
{
tlog
.
Error
(
"TicketMiner.ExecDepositFrozen fund to autonomy fund"
,
"addr"
,
types
.
GetFundAddr
()
)
tlog
.
Error
(
"TicketMiner.ExecDepositFrozen fund to autonomy fund"
,
"addr"
,
addr
)
return
nil
,
err
}
}
else
{
...
...
plugin/dapp/ticket/types/ticket.go
View file @
4d9f49bd
...
...
@@ -61,7 +61,7 @@ func init() {
types
.
RegisterDappFork
(
TicketX
,
"Enable"
,
0
)
types
.
RegisterDappFork
(
TicketX
,
"ForkTicketId"
,
1062000
)
types
.
RegisterDappFork
(
TicketX
,
"ForkTicketVrf"
,
1770000
)
types
.
RegisterDappFork
(
TicketX
,
"ForkTicketFundAddrV
2
"
,
500
*
10000
)
types
.
RegisterDappFork
(
TicketX
,
"ForkTicketFundAddrV
1
"
,
500
*
10000
)
}
// TicketType ticket exec type
...
...
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