Commit cdd14fd3 authored by liuyuhang's avatar liuyuhang

modify test and transfer

parent a2bd1eb4
......@@ -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
)
......
......@@ -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.fromaddr, cur.CurRule.ProposalAmount)
receipt, err := a.coinsAccount.ExecActive(a.fromaddr, a.execaddr, 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)})
......
......@@ -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(address.ExecAddress(auty.AutonomyX), &accountA)
accCoin.SaveExecAccount(autonomyAddr, &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.LoadAccount(address.ExecAddress(auty.AutonomyX))
assert.Equal(t, proposalAmount, account.Balance)
account := accCoin.LoadExecAccount(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.LoadAccount(address.ExecAddress(auty.AutonomyX))
assert.Equal(t, int64(0), account.Balance)
account := accCoin.LoadExecAccount(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.LoadAccount(AddrA)
assert.Equal(t, total-proposalAmount, account.Balance)
account = accCoin.LoadAccount(address.ExecAddress(auty.AutonomyX))
account := accCoin.LoadExecAccount(AddrA, autonomyAddr)
assert.Equal(t, int64(0), account.Frozen)
account = accCoin.LoadExecAccount(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.LoadAccount(AddrA)
assert.Equal(t, total-proposalAmount, account.Balance)
account = accCoin.LoadAccount(address.ExecAddress(auty.AutonomyX))
assert.Equal(t, proposalAmount, account.Balance)
account := accCoin.LoadExecAccount(AddrA, autonomyAddr)
assert.Equal(t, int64(0), account.Frozen)
account = accCoin.LoadExecAccount(autonomyAddr, autonomyAddr)
assert.Equal(t, int64(0), account.Frozen)
}
func terminateProposalBoardTx(parm *auty.TerminateProposalBoard) (*types.Transaction, error) {
......
......@@ -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.fromaddr, cur.CurRule.ProposalAmount)
receipt, err := a.coinsAccount.ExecActive(a.fromaddr, a.execaddr, 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)})
......
......@@ -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.LoadAccount(address.ExecAddress(auty.AutonomyX))
assert.Equal(t, proposalAmount, account.Balance)
account := accCoin.LoadExecAccount(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.LoadAccount(address.ExecAddress(auty.AutonomyX))
assert.Equal(t, int64(0), account.Balance)
account := accCoin.LoadExecAccount(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.LoadAccount(AddrA)
assert.Equal(t, total-proposalAmount, account.Balance)
account = accCoin.LoadAccount(address.ExecAddress(auty.AutonomyX))
account := accCoin.LoadExecAccount(AddrA, autonomyAddr)
assert.Equal(t, int64(0), account.Frozen)
account = accCoin.LoadExecAccount(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.LoadAccount(AddrA)
assert.Equal(t, total-proposalAmount, account.Balance)
account = accCoin.LoadAccount(address.ExecAddress(auty.AutonomyX))
assert.Equal(t, proposalAmount, account.Balance)
account := accCoin.LoadExecAccount(AddrA, autonomyAddr)
assert.Equal(t, int64(0), account.Frozen)
account = accCoin.LoadExecAccount(autonomyAddr, autonomyAddr)
assert.Equal(t, int64(0), account.Frozen)
}
func terminateProposalChangeTx(parm *auty.TerminateProposalChange) (*types.Transaction, error) {
......
......@@ -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.fromaddr, cur.CurRule.ProposalAmount)
// 解冻提案金
receipt, err := a.coinsAccount.ExecActive(a.fromaddr, a.execaddr, 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...)
// 需要更新该董事会的累计审批金
......
......@@ -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.LoadAccount(address.ExecAddress(auty.AutonomyX))
assert.Equal(t, proposalAmount+testFundAmount, account.Balance)
account := accCoin.LoadExecAccount(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.LoadAccount(address.ExecAddress(auty.AutonomyX))
assert.Equal(t, testFundAmount, account.Balance)
account := accCoin.LoadExecAccount(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.LoadAccount(AddrA)
assert.Equal(t, total-proposalAmount, account.Balance)
account = accCoin.LoadAccount(AddrD)
assert.Equal(t, total+testProjectAmount, account.Balance)
account = accCoin.LoadAccount(address.ExecAddress(auty.AutonomyX))
assert.Equal(t, testFundAmount+proposalAmount-testProjectAmount, account.Balance)
account := accCoin.LoadExecAccount(AddrA, autonomyAddr)
assert.Equal(t, int64(0), account.Frozen)
account = accCoin.LoadExecAccount(autonomyAddr, autonomyAddr)
assert.Equal(t, proposalAmount - testProjectAmount, account.Balance)
account = accCoin.LoadExecAccount(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.LoadAccount(AddrA)
assert.Equal(t, total-proposalAmount, account.Balance)
account = accCoin.LoadAccount(AddrD)
assert.Equal(t, total, 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)
account = accCoin.LoadExecAccount(AddrD, autonomyAddr)
assert.Equal(t, int64(0), account.Balance)
account = accCoin.LoadExecAccount(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{
......
......@@ -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.fromaddr, cur.CurRule.ProposalAmount)
receipt, err := a.coinsAccount.ExecActive(a.fromaddr, a.execaddr, 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.fromaddr, autonomyAddr, tf.Amount)
receipt, err := a.coinsAccount.ExecTransfer(a.fromaddr, autonomyAddr, autonomyAddr, tf.Amount)
if err != nil {
alog.Error("autonomy transfer ", "addr", a.fromaddr, "amount", tf.Amount, "ExecTransfer fail", err)
return nil, err
......
......@@ -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.LoadAccount(address.ExecAddress(auty.AutonomyX))
assert.Equal(t, proposalAmount, account.Balance)
account := accCoin.LoadExecAccount(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.LoadAccount(address.ExecAddress(auty.AutonomyX))
assert.Equal(t, int64(0), account.Balance)
account := accCoin.LoadExecAccount(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.LoadAccount(AddrA)
assert.Equal(t, total-proposalAmount, account.Balance)
account = accCoin.LoadAccount(address.ExecAddress(auty.AutonomyX))
account := accCoin.LoadExecAccount(AddrA, autonomyAddr)
assert.Equal(t, int64(0), account.Frozen)
account = accCoin.LoadExecAccount(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.LoadAccount(AddrA)
assert.Equal(t, total-proposalAmount, account.Balance)
account = accCoin.LoadAccount(address.ExecAddress(auty.AutonomyX))
account := accCoin.LoadExecAccount(AddrA, autonomyAddr)
assert.Equal(t, int64(0), account.Frozen)
account = accCoin.LoadExecAccount(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.LoadAccount(AddrA)
account := accCoin.LoadExecAccount(AddrA, autonomyAddr)
assert.Equal(t, total-types.Coin*190, account.Balance)
account = accCoin.LoadAccount(address.ExecAddress(auty.AutonomyX))
account = accCoin.LoadExecAccount(autonomyAddr, autonomyAddr)
assert.Equal(t, types.Coin*190, account.Balance)
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment