Commit 80c2cd69 authored by liuyuhang's avatar liuyuhang

modify board project ticket fund

parent 093e15cd
......@@ -21,6 +21,7 @@ var (
alog = log.New("module", "execs.autonomy")
driverName = auty.AutonomyX
autonomyFundAddr = address.ExecAddress("autonomyfund")
autonomyAddr = address.ExecAddress("autonomy")
cfg subConfig
)
......
......@@ -86,7 +86,8 @@ 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.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)
return nil, err
......@@ -152,7 +153,7 @@ func (a *action) rvkPropBoard(rvkProb *auty.RevokeProposalBoard) (*types.Receipt
var logs []*types.ReceiptLog
var kv []*types.KeyValue
receipt, err := a.coinsAccount.ExecActive(a.fromaddr, a.execaddr, cur.CurRule.ProposalAmount)
receipt, err := a.coinsAccount.TransferWithdraw(a.fromaddr, a.execaddr, cur.CurRule.ProposalAmount)
if err != nil {
alog.Error("rvkPropBoard ", "addr", a.fromaddr, "execaddr", a.execaddr, "ExecActive amount", cur.CurRule.ProposalAmount, "err", err)
return nil, err
......@@ -255,16 +256,16 @@ 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.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 &&
......@@ -349,16 +350,16 @@ 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...)
}
//// 未进行投票情况下,符合提案关闭的也需要扣除提案费用
//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
......
......@@ -251,8 +251,8 @@ func testPropBoard(t *testing.T, env *ExecEnv, exec drivers.Driver, stateDB dbm.
// check
accCoin := account.NewCoinsAccount()
accCoin.SetDB(stateDB)
account := accCoin.LoadExecAccount(AddrA, address.ExecAddress(auty.AutonomyX))
assert.Equal(t, proposalAmount, account.Frozen)
account := accCoin.LoadAccount(address.ExecAddress(auty.AutonomyX))
assert.Equal(t, proposalAmount, account.Balance)
}
func propBoardTx(parm *auty.ProposalBoard) (*types.Transaction, error) {
......@@ -301,8 +301,8 @@ func revokeProposalBoard(t *testing.T, env *ExecEnv, exec drivers.Driver, stateD
// 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(address.ExecAddress(auty.AutonomyX))
assert.Equal(t, int64(0), account.Balance)
}
func revokeProposalBoardTx(parm *auty.RevokeProposalBoard) (*types.Transaction, error) {
......@@ -407,9 +407,9 @@ func voteProposalBoard(t *testing.T, env *ExecEnv, exec drivers.Driver, stateDB
// balance
accCoin := account.NewCoinsAccount()
accCoin.SetDB(stateDB)
account := accCoin.LoadExecAccount(AddrA, address.ExecAddress(auty.AutonomyX))
assert.Equal(t, int64(0), account.Frozen)
account = accCoin.LoadExecAccount(autonomyFundAddr, address.ExecAddress(auty.AutonomyX))
account := accCoin.LoadAccount(AddrA)
assert.Equal(t, total - proposalAmount, account.Balance)
account = accCoin.LoadAccount(address.ExecAddress(auty.AutonomyX))
assert.Equal(t, proposalAmount, account.Balance)
// status
value, err := stateDB.Get(propBoardID(proposalID))
......@@ -484,8 +484,10 @@ func terminateProposalBoard(t *testing.T, env *ExecEnv, exec drivers.Driver, sta
// 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 terminateProposalBoardTx(parm *auty.TerminateProposalBoard) (*types.Transaction, error) {
......
......@@ -238,7 +238,7 @@ func (a *action) tmintPropChange(tmintProb *auty.TerminateProposalChange) (*type
}
end := cur.GetPropChange().EndBlockHeight
if a.height < end && !cur.VoteResult.Pass {
if a.height <= end && !cur.VoteResult.Pass {
err := auty.ErrTerminatePeriod
alog.Error("tmintPropChange ", "addr", a.fromaddr, "status", cur.Status, "height", a.height,
"in vote period can not terminate", tmintProb.ProposalID, "err", err)
......
......@@ -56,12 +56,20 @@ func (a *action) propProject(prob *auty.ProposalProject) (*types.Receipt, error)
alog.Error("propProject ", "addr", a.fromaddr, "execaddr", a.execaddr, "getActiveRule failed", err)
return nil, err
}
// 判断基金中是否有足够资金
account := a.coinsAccount.LoadAccount(a.execaddr)
if account == nil || account.Balance < prob.Amount {
err = auty.ErrNotEnoughFund
alog.Error("propProject ", "addr", a.fromaddr, "execaddr", a.execaddr, "the find have enough amount ", err)
return nil, err
}
var logs []*types.ReceiptLog
var kv []*types.KeyValue
// 冻结提案金
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("propProject ", "addr", a.fromaddr, "execaddr", a.execaddr, "ExecFrozen proposal amount", rule.ProposalAmount, "error", err)
return nil, err
......@@ -69,14 +77,14 @@ func (a *action) propProject(prob *auty.ProposalProject) (*types.Receipt, error)
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...)
//// 冻结项目金
//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 {
......@@ -140,7 +148,7 @@ func (a *action) rvkPropProject(rvkProb *auty.RevokeProposalProject) (*types.Rec
var kv []*types.KeyValue
// 解冻提案金
receipt, err := a.coinsAccount.ExecActive(a.fromaddr, a.execaddr, cur.CurRule.ProposalAmount)
receipt, err := a.coinsAccount.TransferWithdraw(a.fromaddr, a.execaddr, cur.CurRule.ProposalAmount)
if err != nil {
alog.Error("rvkPropProject ", "addr", a.fromaddr, "execaddr", a.execaddr, "ExecActive amount", cur.CurRule.ProposalAmount, "err", err)
return nil, err
......@@ -148,14 +156,14 @@ func (a *action) rvkPropProject(rvkProb *auty.RevokeProposalProject) (*types.Rec
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...)
//// 解冻项目金
//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
......@@ -231,16 +239,16 @@ 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.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 {
......@@ -258,7 +266,7 @@ func (a *action) votePropProject(voteProb *auty.VoteProposalProject) (*types.Rec
} else {
cur.Status = auty.AutonomyStatusTmintPropProject
// 提案通过,将工程金额从基金付款给承包商
receipt, err := a.coinsAccount.ExecTransferFrozen(autonomyFundAddr, cur.PropProject.ToAddr, a.execaddr, cur.PropProject.Amount)
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)
return nil, err
......@@ -379,14 +387,14 @@ 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...)
//// 解冻项目金
//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)
......@@ -471,20 +479,20 @@ func (a *action) tmintPropProject(tmintProb *auty.TerminateProposalProject) (*ty
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.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.ExecTransferFrozen(autonomyFundAddr, cur.PropProject.ToAddr, a.execaddr, cur.PropProject.Amount)
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)
return nil, err
......@@ -498,16 +506,17 @@ func (a *action) tmintPropProject(tmintProb *auty.TerminateProposalProject) (*ty
return nil, err
}
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...)
}
// 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
......
......@@ -28,10 +28,10 @@ import (
// testLargeProjectAmount int64 = 1
//)
var autonomyAddr = address.ExecAddress(auty.AutonomyX)
const (
testProjectAmount int64 = types.Coin * 100 // 工程需要资金
testFundAmount int64 = types.Coin * 1000 // 工程需要资金
)
func InitBoard(stateDB dbm.KV) {
......@@ -58,11 +58,12 @@ func InitFund(stateDB dbm.KV, amount int64) {
accountA := types.Account{
Balance: amount,
Frozen: 0,
Addr: autonomyFundAddr,
Addr: autonomyAddr,
}
accCoin := account.NewCoinsAccount()
accCoin.SetDB(stateDB)
accCoin.SaveExecAccount(autonomyAddr, &accountA)
//accCoin.ExecIssueCoins(autonomyAddr, amount)
accCoin.SaveAccount(&accountA)
}
func TestPropProject(t *testing.T) {
......@@ -131,7 +132,7 @@ func TestPropProject(t *testing.T) {
func TestRevokeProposalProject(t *testing.T) {
env, exec, stateDB, kvdb := InitEnv()
InitBoard(stateDB)
InitFund(stateDB, testProjectAmount)
InitFund(stateDB, testFundAmount)
// PropProject
testPropProject(t, env, exec, stateDB, kvdb, true)
//RevokeProposalProject
......@@ -141,7 +142,7 @@ func TestRevokeProposalProject(t *testing.T) {
func TestVoteProposalProject(t *testing.T) {
env, exec, stateDB, kvdb := InitEnv()
InitBoard(stateDB)
InitFund(stateDB, testProjectAmount)
InitFund(stateDB, testFundAmount)
// PropProject
testPropProject(t, env, exec, stateDB, kvdb, true)
//voteProposalProject
......@@ -154,7 +155,7 @@ func TestPubVoteProposalProject(t *testing.T) {
env, exec, stateDB, kvdb := InitEnv()
InitBoard(stateDB)
InitRule(stateDB)
InitFund(stateDB, testProjectAmount)
InitFund(stateDB, testFundAmount)
// PropProject
testPropProject(t, env, exec, stateDB, kvdb, true)
// voteProposalProject
......@@ -169,7 +170,7 @@ func TestPubVoteProposalProject(t *testing.T) {
func TestTerminateProposalProject(t *testing.T) {
env, exec, stateDB, kvdb := InitEnv()
InitBoard(stateDB)
InitFund(stateDB, testProjectAmount)
InitFund(stateDB, testFundAmount)
// PropProject
testPropProject(t, env, exec, stateDB, kvdb, true)
//terminateProposalProject
......@@ -262,8 +263,8 @@ func testPropProject(t *testing.T, env *ExecEnv, exec drivers.Driver, stateDB db
// check
accCoin := account.NewCoinsAccount()
accCoin.SetDB(stateDB)
account := accCoin.LoadExecAccount(AddrA, address.ExecAddress(auty.AutonomyX))
assert.Equal(t, proposalAmount, account.Frozen)
account := accCoin.LoadAccount(address.ExecAddress(auty.AutonomyX))
assert.Equal(t, proposalAmount + testFundAmount, account.Balance)
}
func propProjectTx(parm *auty.ProposalProject) (*types.Transaction, error) {
......@@ -313,8 +314,8 @@ func revokeProposalProject(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(address.ExecAddress(auty.AutonomyX))
assert.Equal(t, testFundAmount, account.Balance)
// check Project
au := &Autonomy{
drivers.DriverBase{},
......@@ -443,13 +444,6 @@ func voteProposalProjectTx(parm *auty.VoteProposalProject) (*types.Transaction,
func checkVoteProposalProjectResult(t *testing.T, stateDB dbm.KV, proposalID string) {
// check
// balance
accCoin := account.NewCoinsAccount()
accCoin.SetDB(stateDB)
account := accCoin.LoadExecAccount(AddrA, address.ExecAddress(auty.AutonomyX))
assert.Equal(t, int64(0), account.Frozen)
account = accCoin.LoadExecAccount(autonomyFundAddr, address.ExecAddress(auty.AutonomyX))
assert.Equal(t, proposalAmount, account.Balance)
// status
value, err := stateDB.Get(propProjectID(proposalID))
assert.NoError(t, err)
......@@ -458,7 +452,15 @@ func checkVoteProposalProjectResult(t *testing.T, stateDB dbm.KV, proposalID str
assert.NoError(t, err)
assert.Equal(t, int32(auty.AutonomyStatusTmintPropProject), cur.Status)
assert.Equal(t, AddrA, cur.Address)
// 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)
// 更新董事会累计审批金
value, err = stateDB.Get(activeBoardID())
assert.NoError(t, err)
......@@ -559,13 +561,6 @@ func pubVoteProposalProject(t *testing.T, env *ExecEnv, exec drivers.Driver, sta
func checkPubVoteProposalProjectResult(t *testing.T, stateDB dbm.KV, proposalID string) {
// check
// balance
accCoin := account.NewCoinsAccount()
accCoin.SetDB(stateDB)
account := accCoin.LoadExecAccount(AddrA, address.ExecAddress(auty.AutonomyX))
assert.Equal(t, int64(0), account.Frozen)
account = accCoin.LoadExecAccount(autonomyFundAddr, address.ExecAddress(auty.AutonomyX))
assert.Equal(t, proposalAmount+testProjectAmount, account.Balance)
// status
value, err := stateDB.Get(propProjectID(proposalID))
assert.NoError(t, err)
......@@ -574,6 +569,15 @@ func checkPubVoteProposalProjectResult(t *testing.T, stateDB dbm.KV, proposalID
assert.NoError(t, err)
assert.Equal(t, int32(auty.AutonomyStatusTmintPropProject), cur.Status)
assert.Equal(t, AddrA, cur.Address)
// 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)
// 更新董事会累计审批金
value, err = stateDB.Get(activeBoardID())
......@@ -646,8 +650,10 @@ func terminateProposalProject(t *testing.T, env *ExecEnv, exec drivers.Driver, s
// 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, testFundAmount + proposalAmount, account.Balance)
// check Project
au := &Autonomy{
......
......@@ -304,7 +304,7 @@ func (a *action) tmintPropRule(tmintProb *auty.TerminateProposalRule) (*types.Re
start := cur.GetPropRule().StartBlockHeight
end := cur.GetPropRule().EndBlockHeight
if a.height < end && !cur.VoteResult.Pass {
if a.height <= end && !cur.VoteResult.Pass {
err := auty.ErrTerminatePeriod
alog.Error("tmintPropRule ", "addr", a.fromaddr, "status", cur.Status, "height", a.height,
"in vote period can not terminate", tmintProb.ProposalID, "err", err)
......
......@@ -33,7 +33,7 @@ message ProposalChange {
int32 day = 3;
// 修改董事会成员
repeated Change Changes = 4;
repeated Change changes = 4;
// 投票相关
int64 startBlockHeight = 5; // 提案开始投票高度
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -35,4 +35,6 @@ var (
ErrBoardNumber = errors.New("ErrBoardNumber")
// ErrRepeatAddr 重复地址
ErrRepeatAddr = errors.New("ErrRepeatAddr")
// ErrNotEnoughFund 重复地址
ErrNotEnoughFund = errors.New("ErrNotEnoughFund")
)
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -340,11 +340,22 @@ func (action *Action) TicketMiner(miner *ty.TicketMiner, index int) (*types.Rece
return nil, err
}
//fund
receipt2, err := action.coinsAccount.ExecDepositFrozen(types.GetFundAddr(), action.execaddr, cfg.CoinDevFund)
if err != nil {
tlog.Error("TicketMiner.ExecDepositFrozen fund", "addr", types.GetFundAddr(), "execaddr", action.execaddr)
return nil, err
var receipt2 *types.Receipt
if types.IsFork(action.height, "ForkTicketFundAddrV2") {
// issue coins to exec addr
receipt2, err = action.coinsAccount.ExecIssueCoins(types.GetFundAddr(), cfg.CoinDevFund)
if err != nil {
tlog.Error("TicketMiner.ExecDepositFrozen fund to autonomy fund", "addr", types.GetFundAddr())
return nil, err
}
} else {
receipt2, err = action.coinsAccount.ExecDepositFrozen(types.GetFundAddr(), action.execaddr, cfg.CoinDevFund)
if err != nil {
tlog.Error("TicketMiner.ExecDepositFrozen fund", "addr", types.GetFundAddr(), "execaddr", action.execaddr)
return nil, err
}
}
t.Save(action.db)
logs = append(logs, t.GetReceiptLog())
kv = append(kv, t.GetKVSet()...)
......
......@@ -61,6 +61,7 @@ func init() {
types.RegisterDappFork(TicketX, "Enable", 0)
types.RegisterDappFork(TicketX, "ForkTicketId", 1062000)
types.RegisterDappFork(TicketX, "ForkTicketVrf", 1770000)
types.RegisterDappFork(TicketX, "ForkTicketFundAddrV2", 500 * 10000)
}
// TicketType ticket exec type
......
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