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
cdd14fd3
Commit
cdd14fd3
authored
Sep 03, 2019
by
liuyuhang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
modify test and transfer
parent
a2bd1eb4
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
193 additions
and
87 deletions
+193
-87
autonomy.go
plugin/dapp/autonomy/executor/autonomy.go
+1
-1
boardaction.go
plugin/dapp/autonomy/executor/boardaction.go
+26
-4
boardaction_test.go
plugin/dapp/autonomy/executor/boardaction_test.go
+12
-13
changeaction.go
plugin/dapp/autonomy/executor/changeaction.go
+27
-4
changeaction_test.go
plugin/dapp/autonomy/executor/changeaction_test.go
+11
-12
projectaction.go
plugin/dapp/autonomy/executor/projectaction.go
+58
-14
projectaction_test.go
plugin/dapp/autonomy/executor/projectaction_test.go
+18
-21
ruleaction.go
plugin/dapp/autonomy/executor/ruleaction.go
+28
-5
ruleaction_test.go
plugin/dapp/autonomy/executor/ruleaction_test.go
+12
-13
No files found.
plugin/dapp/autonomy/executor/autonomy.go
View file @
cdd14fd3
...
...
@@ -20,7 +20,7 @@ type subConfig struct {
var
(
alog
=
log
.
New
(
"module"
,
"execs.autonomy"
)
driverName
=
auty
.
AutonomyX
autonomyAddr
=
address
.
ExecAddress
(
"autonomy"
)
autonomyAddr
=
address
.
ExecAddress
(
auty
.
AutonomyX
)
cfg
subConfig
)
...
...
plugin/dapp/autonomy/executor/boardaction.go
View file @
cdd14fd3
...
...
@@ -112,9 +112,9 @@ func (a *action) propBoard(prob *auty.ProposalBoard) (*types.Receipt, error) {
return
nil
,
err
}
receipt
,
err
:=
a
.
coinsAccount
.
Transfer
(
a
.
fromaddr
,
a
.
execaddr
,
rule
.
ProposalAmount
)
receipt
,
err
:=
a
.
coinsAccount
.
ExecFrozen
(
a
.
fromaddr
,
a
.
execaddr
,
rule
.
ProposalAmount
)
if
err
!=
nil
{
alog
.
Error
(
"propBoard "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"
Transfer
amount"
,
rule
.
ProposalAmount
)
alog
.
Error
(
"propBoard "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"
ExecFrozen
amount"
,
rule
.
ProposalAmount
)
return
nil
,
err
}
...
...
@@ -179,9 +179,9 @@ func (a *action) rvkPropBoard(rvkProb *auty.RevokeProposalBoard) (*types.Receipt
var
logs
[]
*
types
.
ReceiptLog
var
kv
[]
*
types
.
KeyValue
receipt
,
err
:=
a
.
coinsAccount
.
Transfer
(
a
.
execaddr
,
a
.
from
addr
,
cur
.
CurRule
.
ProposalAmount
)
receipt
,
err
:=
a
.
coinsAccount
.
ExecActive
(
a
.
fromaddr
,
a
.
exec
addr
,
cur
.
CurRule
.
ProposalAmount
)
if
err
!=
nil
{
alog
.
Error
(
"rvkPropBoard "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"
Transfer
amount"
,
cur
.
CurRule
.
ProposalAmount
,
"err"
,
err
)
alog
.
Error
(
"rvkPropBoard "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"
ExecActive
amount"
,
cur
.
CurRule
.
ProposalAmount
,
"err"
,
err
)
return
nil
,
err
}
logs
=
append
(
logs
,
receipt
.
Logs
...
)
...
...
@@ -282,6 +282,17 @@ 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
,
a
.
execaddr
,
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
&&
float32
(
cur
.
VoteResult
.
ApproveVotes
+
cur
.
VoteResult
.
OpposeVotes
)
/
float32
(
cur
.
VoteResult
.
TotalVotes
)
>
float32
(
pubAttendRatio
)
/
100.0
&&
...
...
@@ -364,6 +375,17 @@ 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
,
a
.
execaddr
,
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
)})
...
...
plugin/dapp/autonomy/executor/boardaction_test.go
View file @
cdd14fd3
...
...
@@ -10,7 +10,6 @@ import (
"github.com/33cn/chain33/account"
apimock
"github.com/33cn/chain33/client/mocks"
"github.com/33cn/chain33/common"
"github.com/33cn/chain33/common/address"
"github.com/33cn/chain33/common/crypto"
dbm
"github.com/33cn/chain33/common/db"
dbmock
"github.com/33cn/chain33/common/db/mocks"
...
...
@@ -157,7 +156,7 @@ func InitEnv() (*ExecEnv, drivers.Driver, dbm.KV, dbm.KVDB) {
accCoin
:=
account
.
NewCoinsAccount
()
accCoin
.
SetDB
(
stateDB
)
accCoin
.
SaveAccount
(
&
accountA
)
accCoin
.
SaveExecAccount
(
a
ddress
.
ExecAddress
(
auty
.
AutonomyX
)
,
&
accountA
)
accCoin
.
SaveExecAccount
(
a
utonomyAddr
,
&
accountA
)
accCoin
.
SaveAccount
(
&
accountB
)
accCoin
.
SaveAccount
(
&
accountC
)
accCoin
.
SaveAccount
(
&
accountD
)
...
...
@@ -321,8 +320,8 @@ func testPropBoard(t *testing.T, env *ExecEnv, exec drivers.Driver, stateDB dbm.
// check
accCoin
:=
account
.
NewCoinsAccount
()
accCoin
.
SetDB
(
stateDB
)
account
:=
accCoin
.
Load
Account
(
address
.
ExecAddress
(
auty
.
AutonomyX
)
)
assert
.
Equal
(
t
,
proposalAmount
,
account
.
Balance
)
account
:=
accCoin
.
Load
ExecAccount
(
AddrA
,
autonomyAddr
)
assert
.
Equal
(
t
,
proposalAmount
,
account
.
Frozen
)
}
func
propBoardTx
(
parm
*
auty
.
ProposalBoard
)
(
*
types
.
Transaction
,
error
)
{
...
...
@@ -371,8 +370,8 @@ func revokeProposalBoard(t *testing.T, env *ExecEnv, exec drivers.Driver, stateD
// check
accCoin
:=
account
.
NewCoinsAccount
()
accCoin
.
SetDB
(
stateDB
)
account
:=
accCoin
.
Load
Account
(
address
.
ExecAddress
(
auty
.
AutonomyX
)
)
assert
.
Equal
(
t
,
int64
(
0
),
account
.
Balance
)
account
:=
accCoin
.
Load
ExecAccount
(
AddrA
,
autonomyAddr
)
assert
.
Equal
(
t
,
int64
(
0
),
account
.
Frozen
)
}
func
revokeProposalBoardTx
(
parm
*
auty
.
RevokeProposalBoard
)
(
*
types
.
Transaction
,
error
)
{
...
...
@@ -477,9 +476,9 @@ func voteProposalBoard(t *testing.T, env *ExecEnv, exec drivers.Driver, stateDB
// balance
accCoin
:=
account
.
NewCoinsAccount
()
accCoin
.
SetDB
(
stateDB
)
account
:=
accCoin
.
Load
Account
(
AddrA
)
assert
.
Equal
(
t
,
total
-
proposalAmount
,
account
.
Balance
)
account
=
accCoin
.
Load
Account
(
address
.
ExecAddress
(
auty
.
AutonomyX
)
)
account
:=
accCoin
.
Load
ExecAccount
(
AddrA
,
autonomyAddr
)
assert
.
Equal
(
t
,
int64
(
0
),
account
.
Frozen
)
account
=
accCoin
.
Load
ExecAccount
(
autonomyAddr
,
autonomyAddr
)
assert
.
Equal
(
t
,
proposalAmount
,
account
.
Balance
)
// status
value
,
err
:=
stateDB
.
Get
(
propBoardID
(
proposalID
))
...
...
@@ -554,10 +553,10 @@ func terminateProposalBoard(t *testing.T, env *ExecEnv, exec drivers.Driver, sta
// check
accCoin
:=
account
.
NewCoinsAccount
()
accCoin
.
SetDB
(
stateDB
)
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
)
account
:=
accCoin
.
Load
ExecAccount
(
AddrA
,
autonomyAddr
)
assert
.
Equal
(
t
,
int64
(
0
),
account
.
Frozen
)
account
=
accCoin
.
Load
ExecAccount
(
autonomyAddr
,
autonomyAddr
)
assert
.
Equal
(
t
,
int64
(
0
),
account
.
Frozen
)
}
func
terminateProposalBoardTx
(
parm
*
auty
.
TerminateProposalBoard
)
(
*
types
.
Transaction
,
error
)
{
...
...
plugin/dapp/autonomy/executor/changeaction.go
View file @
cdd14fd3
...
...
@@ -44,9 +44,9 @@ func (a *action) propChange(prob *auty.ProposalChange) (*types.Receipt, error) {
return
nil
,
err
}
receipt
,
err
:=
a
.
coinsAccount
.
Transfer
(
a
.
fromaddr
,
a
.
execaddr
,
rule
.
ProposalAmount
)
receipt
,
err
:=
a
.
coinsAccount
.
ExecFrozen
(
a
.
fromaddr
,
a
.
execaddr
,
rule
.
ProposalAmount
)
if
err
!=
nil
{
alog
.
Error
(
"propChange "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"
Transfer
amount"
,
rule
.
ProposalAmount
)
alog
.
Error
(
"propChange "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"
ExecFrozen
amount"
,
rule
.
ProposalAmount
)
return
nil
,
err
}
...
...
@@ -113,9 +113,9 @@ func (a *action) rvkPropChange(rvkProb *auty.RevokeProposalChange) (*types.Recei
var
logs
[]
*
types
.
ReceiptLog
var
kv
[]
*
types
.
KeyValue
receipt
,
err
:=
a
.
coinsAccount
.
Transfer
(
a
.
execaddr
,
a
.
from
addr
,
cur
.
CurRule
.
ProposalAmount
)
receipt
,
err
:=
a
.
coinsAccount
.
ExecActive
(
a
.
fromaddr
,
a
.
exec
addr
,
cur
.
CurRule
.
ProposalAmount
)
if
err
!=
nil
{
alog
.
Error
(
"rvkPropChange "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"
Transfer
amount"
,
cur
.
CurRule
.
ProposalAmount
,
"err"
,
err
)
alog
.
Error
(
"rvkPropChange "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"
ExecActive
amount"
,
cur
.
CurRule
.
ProposalAmount
,
"err"
,
err
)
return
nil
,
err
}
logs
=
append
(
logs
,
receipt
.
Logs
...
)
...
...
@@ -178,6 +178,17 @@ 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
,
a
.
execaddr
,
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
{
cur
.
VoteResult
.
Pass
=
true
...
...
@@ -247,6 +258,18 @@ 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
,
a
.
execaddr
,
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
)})
...
...
plugin/dapp/autonomy/executor/changeaction_test.go
View file @
cdd14fd3
...
...
@@ -10,7 +10,6 @@ import (
"github.com/33cn/chain33/account"
apimock
"github.com/33cn/chain33/client/mocks"
"github.com/33cn/chain33/common"
"github.com/33cn/chain33/common/address"
dbm
"github.com/33cn/chain33/common/db"
_
"github.com/33cn/chain33/system"
drivers
"github.com/33cn/chain33/system/dapp"
...
...
@@ -99,8 +98,8 @@ func testPropChange(t *testing.T, env *ExecEnv, exec drivers.Driver, stateDB dbm
// check
accCoin
:=
account
.
NewCoinsAccount
()
accCoin
.
SetDB
(
stateDB
)
account
:=
accCoin
.
Load
Account
(
address
.
ExecAddress
(
auty
.
AutonomyX
)
)
assert
.
Equal
(
t
,
proposalAmount
,
account
.
Balance
)
account
:=
accCoin
.
Load
ExecAccount
(
AddrA
,
autonomyAddr
)
assert
.
Equal
(
t
,
proposalAmount
,
account
.
Frozen
)
}
func
propChangeTx
(
parm
*
auty
.
ProposalChange
)
(
*
types
.
Transaction
,
error
)
{
...
...
@@ -149,8 +148,8 @@ func revokeProposalChange(t *testing.T, env *ExecEnv, exec drivers.Driver, state
// check
accCoin
:=
account
.
NewCoinsAccount
()
accCoin
.
SetDB
(
stateDB
)
account
:=
accCoin
.
Load
Account
(
address
.
ExecAddress
(
auty
.
AutonomyX
)
)
assert
.
Equal
(
t
,
int64
(
0
),
account
.
Balance
)
account
:=
accCoin
.
Load
ExecAccount
(
AddrA
,
autonomyAddr
)
assert
.
Equal
(
t
,
int64
(
0
),
account
.
Frozen
)
}
func
revokeProposalChangeTx
(
parm
*
auty
.
RevokeProposalChange
)
(
*
types
.
Transaction
,
error
)
{
...
...
@@ -262,9 +261,9 @@ func voteProposalChange(t *testing.T, env *ExecEnv, exec drivers.Driver, stateDB
// balance
accCoin
:=
account
.
NewCoinsAccount
()
accCoin
.
SetDB
(
stateDB
)
account
:=
accCoin
.
Load
Account
(
AddrA
)
assert
.
Equal
(
t
,
total
-
proposalAmount
,
account
.
Balance
)
account
=
accCoin
.
Load
Account
(
address
.
ExecAddress
(
auty
.
AutonomyX
)
)
account
:=
accCoin
.
Load
ExecAccount
(
AddrA
,
autonomyAddr
)
assert
.
Equal
(
t
,
int64
(
0
),
account
.
Frozen
)
account
=
accCoin
.
Load
ExecAccount
(
autonomyAddr
,
autonomyAddr
)
assert
.
Equal
(
t
,
proposalAmount
,
account
.
Balance
)
// status
value
,
err
:=
stateDB
.
Get
(
propChangeID
(
proposalID
))
...
...
@@ -347,10 +346,10 @@ func terminateProposalChange(t *testing.T, env *ExecEnv, exec drivers.Driver, st
// check
accCoin
:=
account
.
NewCoinsAccount
()
accCoin
.
SetDB
(
stateDB
)
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
)
account
:=
accCoin
.
Load
ExecAccount
(
AddrA
,
autonomyAddr
)
assert
.
Equal
(
t
,
int64
(
0
),
account
.
Frozen
)
account
=
accCoin
.
Load
ExecAccount
(
autonomyAddr
,
autonomyAddr
)
assert
.
Equal
(
t
,
int64
(
0
),
account
.
Frozen
)
}
func
terminateProposalChangeTx
(
parm
*
auty
.
TerminateProposalChange
)
(
*
types
.
Transaction
,
error
)
{
...
...
plugin/dapp/autonomy/executor/projectaction.go
View file @
cdd14fd3
...
...
@@ -68,10 +68,10 @@ 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
)
//
冻结
提案金
receipt
,
err
:=
a
.
coinsAccount
.
ExecFrozen
(
a
.
fromaddr
,
a
.
execaddr
,
rule
.
ProposalAmount
)
if
err
!=
nil
{
alog
.
Error
(
"propProject "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"
Transfer
proposal amount"
,
rule
.
ProposalAmount
,
"error"
,
err
)
alog
.
Error
(
"propProject "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"
ExecFrozen
proposal amount"
,
rule
.
ProposalAmount
,
"error"
,
err
)
return
nil
,
err
}
logs
=
append
(
logs
,
receipt
.
Logs
...
)
...
...
@@ -138,10 +138,10 @@ func (a *action) rvkPropProject(rvkProb *auty.RevokeProposalProject) (*types.Rec
var
logs
[]
*
types
.
ReceiptLog
var
kv
[]
*
types
.
KeyValue
// 提案金
receipt
,
err
:=
a
.
coinsAccount
.
Transfer
(
a
.
execaddr
,
a
.
from
addr
,
cur
.
CurRule
.
ProposalAmount
)
//
解冻
提案金
receipt
,
err
:=
a
.
coinsAccount
.
ExecActive
(
a
.
fromaddr
,
a
.
exec
addr
,
cur
.
CurRule
.
ProposalAmount
)
if
err
!=
nil
{
alog
.
Error
(
"rvkPropProject "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"
Transfer
amount"
,
cur
.
CurRule
.
ProposalAmount
,
"err"
,
err
)
alog
.
Error
(
"rvkPropProject "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"
ExecActive
amount"
,
cur
.
CurRule
.
ProposalAmount
,
"err"
,
err
)
return
nil
,
err
}
logs
=
append
(
logs
,
receipt
.
Logs
...
)
...
...
@@ -221,6 +221,17 @@ 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
,
a
.
execaddr
,
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
...
...
@@ -237,11 +248,22 @@ func (a *action) votePropProject(voteProb *auty.VoteProposalProject) (*types.Rec
}
else
{
cur
.
Status
=
auty
.
AutonomyStatusTmintPropProject
// 提案通过,将工程金额从基金付款给承包商
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
,
"Transfer to contractor project amount fail"
,
err
)
return
nil
,
err
var
receipt
*
types
.
Receipt
acc
:=
a
.
coinsAccount
.
LoadExecAccount
(
a
.
execaddr
,
a
.
execaddr
)
if
acc
!=
nil
&&
acc
.
Balance
>
cur
.
PropProject
.
Amount
{
// 先从合约的合约地址扣除
receipt
,
err
=
a
.
coinsAccount
.
ExecTransfer
(
a
.
execaddr
,
cur
.
PropProject
.
ToAddr
,
a
.
execaddr
,
cur
.
PropProject
.
Amount
)
if
err
!=
nil
{
alog
.
Error
(
"votePropProject "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"Transfer amount"
,
cur
.
PropProject
.
Amount
)
return
nil
,
err
}
}
else
{
receipt
,
err
=
a
.
coinsAccount
.
ExecDeposit
(
a
.
execaddr
,
cur
.
PropProject
.
ToAddr
,
cur
.
PropProject
.
Amount
)
if
err
!=
nil
{
alog
.
Error
(
"votePropProject "
,
"addr"
,
cur
.
Address
,
"execaddr"
,
a
.
execaddr
,
"Transfer to contractor project amount fail"
,
err
)
return
nil
,
err
}
}
logs
=
append
(
logs
,
receipt
.
Logs
...
)
kv
=
append
(
kv
,
receipt
.
KV
...
)
// 需要更新该董事会的累计审批金
...
...
@@ -441,14 +463,36 @@ 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
,
a
.
execaddr
,
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
,
"Transfer to contractor project amount fail"
,
err
)
return
nil
,
err
var
receipt
*
types
.
Receipt
acc
:=
a
.
coinsAccount
.
LoadExecAccount
(
a
.
execaddr
,
a
.
execaddr
)
if
acc
!=
nil
&&
acc
.
Balance
>
cur
.
PropProject
.
Amount
{
// 先从合约的合约地址扣除
receipt
,
err
=
a
.
coinsAccount
.
ExecTransfer
(
a
.
execaddr
,
cur
.
PropProject
.
ToAddr
,
a
.
execaddr
,
cur
.
PropProject
.
Amount
)
if
err
!=
nil
{
alog
.
Error
(
"tmintPropProject "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"Transfer amount"
,
cur
.
PropProject
.
Amount
)
return
nil
,
err
}
}
else
{
receipt
,
err
=
a
.
coinsAccount
.
ExecDeposit
(
a
.
execaddr
,
cur
.
PropProject
.
ToAddr
,
cur
.
PropProject
.
Amount
)
if
err
!=
nil
{
alog
.
Error
(
"tmintPropProject "
,
"addr"
,
cur
.
Address
,
"execaddr"
,
a
.
execaddr
,
"Transfer to contractor project amount fail"
,
err
)
return
nil
,
err
}
}
logs
=
append
(
logs
,
receipt
.
Logs
...
)
kv
=
append
(
kv
,
receipt
.
KV
...
)
// 需要更新该董事会的累计审批金
...
...
plugin/dapp/autonomy/executor/projectaction_test.go
View file @
cdd14fd3
...
...
@@ -10,7 +10,6 @@ import (
"github.com/33cn/chain33/account"
apimock
"github.com/33cn/chain33/client/mocks"
"github.com/33cn/chain33/common"
"github.com/33cn/chain33/common/address"
dbm
"github.com/33cn/chain33/common/db"
_
"github.com/33cn/chain33/system"
drivers
"github.com/33cn/chain33/system/dapp"
...
...
@@ -254,8 +253,8 @@ func testPropProject(t *testing.T, env *ExecEnv, exec drivers.Driver, stateDB db
// check
accCoin
:=
account
.
NewCoinsAccount
()
accCoin
.
SetDB
(
stateDB
)
account
:=
accCoin
.
Load
Account
(
address
.
ExecAddress
(
auty
.
AutonomyX
)
)
assert
.
Equal
(
t
,
proposalAmount
+
testFundAmount
,
account
.
Balance
)
account
:=
accCoin
.
Load
ExecAccount
(
AddrA
,
autonomyAddr
)
assert
.
Equal
(
t
,
proposalAmount
,
account
.
Frozen
)
}
func
propProjectTx
(
parm
*
auty
.
ProposalProject
)
(
*
types
.
Transaction
,
error
)
{
...
...
@@ -305,8 +304,8 @@ func revokeProposalProject(t *testing.T, env *ExecEnv, exec drivers.Driver, stat
// check
accCoin
:=
account
.
NewCoinsAccount
()
accCoin
.
SetDB
(
stateDB
)
account
:=
accCoin
.
Load
Account
(
address
.
ExecAddress
(
auty
.
AutonomyX
)
)
assert
.
Equal
(
t
,
testFundAmount
,
account
.
Balance
)
account
:=
accCoin
.
Load
ExecAccount
(
AddrA
,
autonomyAddr
)
assert
.
Equal
(
t
,
int64
(
0
),
account
.
Frozen
)
// check Project
au
:=
&
Autonomy
{
drivers
.
DriverBase
{},
...
...
@@ -446,12 +445,12 @@ func checkVoteProposalProjectResult(t *testing.T, stateDB dbm.KV, proposalID str
// balance
accCoin
:=
account
.
NewCoinsAccount
()
accCoin
.
SetDB
(
stateDB
)
account
:=
accCoin
.
Load
Account
(
AddrA
)
assert
.
Equal
(
t
,
total
-
proposalAmount
,
account
.
Balance
)
account
=
accCoin
.
Load
Account
(
AddrD
)
assert
.
Equal
(
t
,
total
+
testProjectAmount
,
account
.
Balance
)
account
=
accCoin
.
Load
Account
(
address
.
ExecAddress
(
auty
.
AutonomyX
)
)
assert
.
Equal
(
t
,
test
FundAmount
+
proposalAmount
-
test
ProjectAmount
,
account
.
Balance
)
account
:=
accCoin
.
Load
ExecAccount
(
AddrA
,
autonomyAddr
)
assert
.
Equal
(
t
,
int64
(
0
),
account
.
Frozen
)
account
=
accCoin
.
Load
ExecAccount
(
autonomyAddr
,
autonomyAddr
)
assert
.
Equal
(
t
,
proposalAmount
-
testProjectAmount
,
account
.
Balance
)
account
=
accCoin
.
Load
ExecAccount
(
AddrD
,
autonomyAddr
)
assert
.
Equal
(
t
,
testProjectAmount
,
account
.
Balance
)
// 更新董事会累计审批金
value
,
err
=
stateDB
.
Get
(
activeBoardID
())
assert
.
NoError
(
t
,
err
)
...
...
@@ -563,12 +562,12 @@ func checkPubVoteProposalProjectResult(t *testing.T, stateDB dbm.KV, proposalID
// balance
accCoin
:=
account
.
NewCoinsAccount
()
accCoin
.
SetDB
(
stateDB
)
account
:=
accCoin
.
Load
Account
(
AddrA
)
assert
.
Equal
(
t
,
total
-
proposalAmount
,
account
.
Balance
)
account
=
accCoin
.
Load
Account
(
AddrD
)
assert
.
Equal
(
t
,
total
,
account
.
Balance
)
account
=
accCoin
.
Load
Account
(
address
.
ExecAddress
(
auty
.
AutonomyX
)
)
assert
.
Equal
(
t
,
testFundAmount
+
proposalAmount
,
account
.
Balance
)
account
:=
accCoin
.
Load
ExecAccount
(
AddrA
,
autonomyAddr
)
assert
.
Equal
(
t
,
int64
(
0
),
account
.
Frozen
)
account
=
accCoin
.
Load
ExecAccount
(
AddrD
,
autonomyAddr
)
assert
.
Equal
(
t
,
int64
(
0
)
,
account
.
Balance
)
account
=
accCoin
.
Load
ExecAccount
(
autonomyAddr
,
autonomyAddr
)
assert
.
Equal
(
t
,
proposalAmount
,
account
.
Balance
)
// 更新董事会累计审批金
value
,
err
=
stateDB
.
Get
(
activeBoardID
())
...
...
@@ -641,10 +640,8 @@ func terminateProposalProject(t *testing.T, env *ExecEnv, exec drivers.Driver, s
// check
accCoin
:=
account
.
NewCoinsAccount
()
accCoin
.
SetDB
(
stateDB
)
account
:=
accCoin
.
LoadAccount
(
AddrA
)
assert
.
Equal
(
t
,
total
-
proposalAmount
,
account
.
Balance
)
account
=
accCoin
.
LoadAccount
(
address
.
ExecAddress
(
auty
.
AutonomyX
))
assert
.
Equal
(
t
,
testFundAmount
+
proposalAmount
,
account
.
Balance
)
account
:=
accCoin
.
LoadExecAccount
(
AddrA
,
autonomyAddr
)
assert
.
Equal
(
t
,
int64
(
0
),
account
.
Frozen
)
// check Project
au
:=
&
Autonomy
{
...
...
plugin/dapp/autonomy/executor/ruleaction.go
View file @
cdd14fd3
...
...
@@ -66,9 +66,9 @@ func (a *action) propRule(prob *auty.ProposalRule) (*types.Receipt, error) {
return
nil
,
err
}
receipt
,
err
:=
a
.
coinsAccount
.
Transfer
(
a
.
fromaddr
,
a
.
execaddr
,
rule
.
ProposalAmount
)
receipt
,
err
:=
a
.
coinsAccount
.
ExecFrozen
(
a
.
fromaddr
,
a
.
execaddr
,
rule
.
ProposalAmount
)
if
err
!=
nil
{
alog
.
Error
(
"propRule "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"
Transfer
amount"
,
rule
.
ProposalAmount
)
alog
.
Error
(
"propRule "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"
ExecFrozen
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
.
Transfer
(
a
.
execaddr
,
a
.
from
addr
,
cur
.
CurRule
.
ProposalAmount
)
receipt
,
err
:=
a
.
coinsAccount
.
ExecActive
(
a
.
fromaddr
,
a
.
exec
addr
,
cur
.
CurRule
.
ProposalAmount
)
if
err
!=
nil
{
alog
.
Error
(
"rvkPropRule "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"
Transfer
amount"
,
cur
.
CurRule
.
ProposalAmount
,
"err"
,
err
)
alog
.
Error
(
"rvkPropRule "
,
"addr"
,
a
.
fromaddr
,
"execaddr"
,
a
.
execaddr
,
"
ExecActive
amount"
,
cur
.
CurRule
.
ProposalAmount
,
"err"
,
err
)
return
nil
,
err
}
logs
=
append
(
logs
,
receipt
.
Logs
...
)
...
...
@@ -238,6 +238,17 @@ 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
,
a
.
execaddr
,
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
&&
...
...
@@ -319,6 +330,18 @@ 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
,
a
.
execaddr
,
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
kv
=
append
(
kv
,
&
types
.
KeyValue
{
Key
:
propRuleID
(
tmintProb
.
ProposalID
),
Value
:
types
.
Encode
(
cur
)})
...
...
@@ -343,7 +366,7 @@ func (a *action) transfer(tf *auty.TransferFund) (*types.Receipt, error) {
var
logs
[]
*
types
.
ReceiptLog
var
kv
[]
*
types
.
KeyValue
receipt
,
err
:=
a
.
coinsAccount
.
Transfer
(
a
.
froma
ddr
,
autonomyAddr
,
tf
.
Amount
)
receipt
,
err
:=
a
.
coinsAccount
.
ExecTransfer
(
a
.
fromaddr
,
autonomyA
ddr
,
autonomyAddr
,
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 @
cdd14fd3
...
...
@@ -10,7 +10,6 @@ import (
"github.com/33cn/chain33/account"
apimock
"github.com/33cn/chain33/client/mocks"
"github.com/33cn/chain33/common"
"github.com/33cn/chain33/common/address"
dbm
"github.com/33cn/chain33/common/db"
_
"github.com/33cn/chain33/system"
drivers
"github.com/33cn/chain33/system/dapp"
...
...
@@ -186,8 +185,8 @@ func testPropRule(t *testing.T, env *ExecEnv, exec drivers.Driver, stateDB dbm.K
// check
accCoin
:=
account
.
NewCoinsAccount
()
accCoin
.
SetDB
(
stateDB
)
account
:=
accCoin
.
Load
Account
(
address
.
ExecAddress
(
auty
.
AutonomyX
)
)
assert
.
Equal
(
t
,
proposalAmount
,
account
.
Balance
)
account
:=
accCoin
.
Load
ExecAccount
(
AddrA
,
autonomyAddr
)
assert
.
Equal
(
t
,
proposalAmount
,
account
.
Frozen
)
}
func
propRuleTx
(
parm
*
auty
.
ProposalRule
)
(
*
types
.
Transaction
,
error
)
{
...
...
@@ -236,8 +235,8 @@ func revokeProposalRule(t *testing.T, env *ExecEnv, exec drivers.Driver, stateDB
// check
accCoin
:=
account
.
NewCoinsAccount
()
accCoin
.
SetDB
(
stateDB
)
account
:=
accCoin
.
Load
Account
(
address
.
ExecAddress
(
auty
.
AutonomyX
)
)
assert
.
Equal
(
t
,
int64
(
0
),
account
.
Balance
)
account
:=
accCoin
.
Load
ExecAccount
(
AddrA
,
autonomyAddr
)
assert
.
Equal
(
t
,
int64
(
0
),
account
.
Frozen
)
// check rule
au
:=
&
Autonomy
{
drivers
.
DriverBase
{},
...
...
@@ -356,9 +355,9 @@ func voteProposalRule(t *testing.T, env *ExecEnv, exec drivers.Driver, stateDB d
// balance
accCoin
:=
account
.
NewCoinsAccount
()
accCoin
.
SetDB
(
stateDB
)
account
:=
accCoin
.
Load
Account
(
AddrA
)
assert
.
Equal
(
t
,
total
-
proposalAmount
,
account
.
Balance
)
account
=
accCoin
.
Load
Account
(
address
.
ExecAddress
(
auty
.
AutonomyX
)
)
account
:=
accCoin
.
Load
ExecAccount
(
AddrA
,
autonomyAddr
)
assert
.
Equal
(
t
,
int64
(
0
),
account
.
Frozen
)
account
=
accCoin
.
Load
ExecAccount
(
autonomyAddr
,
autonomyAddr
)
assert
.
Equal
(
t
,
proposalAmount
,
account
.
Balance
)
// status
value
,
err
:=
stateDB
.
Get
(
propRuleID
(
proposalID
))
...
...
@@ -447,9 +446,9 @@ func terminateProposalRule(t *testing.T, env *ExecEnv, exec drivers.Driver, stat
// check
accCoin
:=
account
.
NewCoinsAccount
()
accCoin
.
SetDB
(
stateDB
)
account
:=
accCoin
.
Load
Account
(
AddrA
)
assert
.
Equal
(
t
,
total
-
proposalAmount
,
account
.
Balance
)
account
=
accCoin
.
Load
Account
(
address
.
ExecAddress
(
auty
.
AutonomyX
)
)
account
:=
accCoin
.
Load
ExecAccount
(
AddrA
,
autonomyAddr
)
assert
.
Equal
(
t
,
int64
(
0
),
account
.
Frozen
)
account
=
accCoin
.
Load
ExecAccount
(
autonomyAddr
,
autonomyAddr
)
assert
.
Equal
(
t
,
proposalAmount
,
account
.
Balance
)
// check rule
...
...
@@ -591,9 +590,9 @@ func TestTransfer(t *testing.T) {
// check
accCoin
:=
account
.
NewCoinsAccount
()
accCoin
.
SetDB
(
stateDB
)
account
:=
accCoin
.
Load
Account
(
AddrA
)
account
:=
accCoin
.
Load
ExecAccount
(
AddrA
,
autonomyAddr
)
assert
.
Equal
(
t
,
total
-
types
.
Coin
*
190
,
account
.
Balance
)
account
=
accCoin
.
Load
Account
(
address
.
ExecAddress
(
auty
.
AutonomyX
)
)
account
=
accCoin
.
Load
ExecAccount
(
autonomyAddr
,
autonomyAddr
)
assert
.
Equal
(
t
,
types
.
Coin
*
190
,
account
.
Balance
)
}
...
...
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