Commit 4d9f49bd authored by liuyuhang's avatar liuyuhang

modify rule change and some bug

parent 80c2cd69
...@@ -86,9 +86,11 @@ name="ticket" ...@@ -86,9 +86,11 @@ name="ticket"
minerstart=true minerstart=true
genesisBlockTime=1514533394 genesisBlockTime=1514533394
genesis="14KEKbYtKKQm4wMthSK9J4La4nAiidGozt" genesis="14KEKbYtKKQm4wMthSK9J4La4nAiidGozt"
minerExecs=["ticket", "autonomy"]
[mver.consensus] [mver.consensus]
fundKeyAddr = "1BQXS6TxaYYG5mADaWij4AxhZZUTpw95a5" fundKeyAddr = "1BQXS6TxaYYG5mADaWij4AxhZZUTpw95a5"
autonomyFundAddr = "1Ji3W12KGScCM7C2p8bg635sNkayDM8MGY"
coinReward = 18 coinReward = 18
coinDevFund = 12 coinDevFund = 12
ticketPrice = 10000 ticketPrice = 10000
...@@ -226,4 +228,3 @@ paraConsensusStopBlocks=30000 ...@@ -226,4 +228,3 @@ paraConsensusStopBlocks=30000
[exec.sub.autonomy] [exec.sub.autonomy]
total="16htvcBNSEA7fZhAdLJphDwQRQJaHpyHTp" total="16htvcBNSEA7fZhAdLJphDwQRQJaHpyHTp"
useBalance=false useBalance=false
\ No newline at end of file
...@@ -37,7 +37,6 @@ func addProposalRuleFlags(cmd *cobra.Command) { ...@@ -37,7 +37,6 @@ func addProposalRuleFlags(cmd *cobra.Command) {
cmd.MarkFlagRequired("endBlock") 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("boardApproveRatio", "r", 0, "board approve ratio(unit is %)")
cmd.Flags().Int32P("pubOpposeRatio", "o", 0, "public oppose ratio(unit is %)") cmd.Flags().Int32P("pubOpposeRatio", "o", 0, "public oppose ratio(unit is %)")
cmd.Flags().Int64P("proposalAmount", "p", 0, "proposal cost amount") cmd.Flags().Int64P("proposalAmount", "p", 0, "proposal cost amount")
......
...@@ -20,7 +20,6 @@ type subConfig struct { ...@@ -20,7 +20,6 @@ type subConfig struct {
var ( var (
alog = log.New("module", "execs.autonomy") alog = log.New("module", "execs.autonomy")
driverName = auty.AutonomyX driverName = auty.AutonomyX
autonomyFundAddr = address.ExecAddress("autonomyfund")
autonomyAddr = address.ExecAddress("autonomy") autonomyAddr = address.ExecAddress("autonomy")
cfg subConfig cfg subConfig
) )
......
...@@ -54,14 +54,14 @@ func newAction(a *Autonomy, tx *types.Transaction, index int32) *action { ...@@ -54,14 +54,14 @@ func newAction(a *Autonomy, tx *types.Transaction, index int32) *action {
func (a *action) propBoard(prob *auty.ProposalBoard) (*types.Receipt, error) { func (a *action) propBoard(prob *auty.ProposalBoard) (*types.Receipt, error) {
if len(prob.Boards) > maxBoards || len(prob.Boards) < minBoards { if len(prob.Boards) > maxBoards || len(prob.Boards) < minBoards {
alog.Error("propBoard ", "proposal boards number is invaild", len(prob.Boards)) 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 || if prob.StartBlockHeight < a.height || prob.EndBlockHeight < a.height ||
prob.StartBlockHeight+startEndBlockPeriod > prob.EndBlockHeight { prob.StartBlockHeight+startEndBlockPeriod > prob.EndBlockHeight {
alog.Error("propBoard height invaild", "StartBlockHeight", prob.StartBlockHeight, "EndBlockHeight", alog.Error("propBoard height invaild", "StartBlockHeight", prob.StartBlockHeight, "EndBlockHeight",
prob.EndBlockHeight, "height", a.height) prob.EndBlockHeight, "height", a.height)
return nil, types.ErrInvalidParam return nil, auty.ErrSetBlockHeight
} }
mpBd := make(map[string]struct{}) mpBd := make(map[string]struct{})
...@@ -86,10 +86,9 @@ func (a *action) propBoard(prob *auty.ProposalBoard) (*types.Receipt, error) { ...@@ -86,10 +86,9 @@ func (a *action) propBoard(prob *auty.ProposalBoard) (*types.Receipt, error) {
return nil, err 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) receipt, err := a.coinsAccount.Transfer(a.fromaddr, a.execaddr, rule.ProposalAmount)
if err != nil { 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 return nil, err
} }
...@@ -153,9 +152,9 @@ func (a *action) rvkPropBoard(rvkProb *auty.RevokeProposalBoard) (*types.Receipt ...@@ -153,9 +152,9 @@ func (a *action) rvkPropBoard(rvkProb *auty.RevokeProposalBoard) (*types.Receipt
var logs []*types.ReceiptLog var logs []*types.ReceiptLog
var kv []*types.KeyValue var kv []*types.KeyValue
receipt, err := a.coinsAccount.TransferWithdraw(a.fromaddr, a.execaddr, cur.CurRule.ProposalAmount) receipt, err := a.coinsAccount.Transfer(a.execaddr, a.fromaddr, cur.CurRule.ProposalAmount)
if err != nil { 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 return nil, err
} }
logs = append(logs, receipt.Logs...) logs = append(logs, receipt.Logs...)
...@@ -256,16 +255,6 @@ func (a *action) votePropBoard(voteProb *auty.VoteProposalBoard) (*types.Receipt ...@@ -256,16 +255,6 @@ func (a *action) votePropBoard(voteProb *auty.VoteProposalBoard) (*types.Receipt
var logs []*types.ReceiptLog var logs []*types.ReceiptLog
var kv []*types.KeyValue 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 && if cur.VoteResult.TotalVotes != 0 &&
cur.VoteResult.ApproveVotes+cur.VoteResult.OpposeVotes != 0 && cur.VoteResult.ApproveVotes+cur.VoteResult.OpposeVotes != 0 &&
...@@ -350,17 +339,6 @@ func (a *action) tmintPropBoard(tmintProb *auty.TerminateProposalBoard) (*types. ...@@ -350,17 +339,6 @@ func (a *action) tmintPropBoard(tmintProb *auty.TerminateProposalBoard) (*types.
var logs []*types.ReceiptLog var logs []*types.ReceiptLog
var kv []*types.KeyValue 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 cur.Status = auty.AutonomyStatusTmintPropBoard
kv = append(kv, &types.KeyValue{Key: propBoardID(tmintProb.ProposalID), Value: types.Encode(cur)}) kv = append(kv, &types.KeyValue{Key: propBoardID(tmintProb.ProposalID), Value: types.Encode(cur)})
...@@ -393,7 +371,8 @@ func (a *action) getTotalVotes(height int64) (int32, error) { ...@@ -393,7 +371,8 @@ func (a *action) getTotalVotes(height int64) (int32, error) {
} }
func (a *action) verifyMinerAddr(addrs []string, bindAddr string) (string, error) { func (a *action) verifyMinerAddr(addrs []string, bindAddr string) (string, error) {
// 验证绑定关系 // 验证绑定关系与重复地址
mp := make(map[string]struct{})
for _, addr := range addrs { for _, addr := range addrs {
value, err := a.db.Get(ticket.BindKey(addr)) value, err := a.db.Get(ticket.BindKey(addr))
if err != nil { if err != nil {
...@@ -404,6 +383,10 @@ func (a *action) verifyMinerAddr(addrs []string, bindAddr string) (string, error ...@@ -404,6 +383,10 @@ func (a *action) verifyMinerAddr(addrs []string, bindAddr string) (string, error
if err != nil || tkBind.MinerAddress != bindAddr { if err != nil || tkBind.MinerAddress != bindAddr {
return addr, auty.ErrBindAddr return addr, auty.ErrBindAddr
} }
if _, ok := mp[addr]; ok {
return addr, auty.ErrRepeatAddr
}
mp[addr] = struct{}{}
} }
return "", nil return "", nil
} }
......
...@@ -598,6 +598,16 @@ func TestVerifyMinerAddr(t *testing.T) { ...@@ -598,6 +598,16 @@ func TestVerifyMinerAddr(t *testing.T) {
} }
_, err := action.verifyMinerAddr(addrs, AddrD) _, err := action.verifyMinerAddr(addrs, AddrD)
assert.NoError(t, err) 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 // ErrMinerAddr
testf := "12HKLEn6g4FH39yUbHh4EVJWcFo5CXg22d" testf := "12HKLEn6g4FH39yUbHh4EVJWcFo5CXg22d"
......
...@@ -8,6 +8,7 @@ import ( ...@@ -8,6 +8,7 @@ import (
"github.com/33cn/chain33/common" "github.com/33cn/chain33/common"
"github.com/33cn/chain33/types" "github.com/33cn/chain33/types"
auty "github.com/33cn/plugin/plugin/dapp/autonomy/types" auty "github.com/33cn/plugin/plugin/dapp/autonomy/types"
"sort"
) )
func (a *action) propChange(prob *auty.ProposalChange) (*types.Receipt, error) { func (a *action) propChange(prob *auty.ProposalChange) (*types.Receipt, error) {
...@@ -20,7 +21,7 @@ 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 { prob.StartBlockHeight+startEndBlockPeriod > prob.EndBlockHeight {
alog.Error("propChange height invaild", "StartBlockHeight", prob.StartBlockHeight, "EndBlockHeight", alog.Error("propChange height invaild", "StartBlockHeight", prob.StartBlockHeight, "EndBlockHeight",
prob.EndBlockHeight, "height", a.height) prob.EndBlockHeight, "height", a.height)
return nil, types.ErrInvalidParam return nil, auty.ErrSetBlockHeight
} }
act, err := a.getActiveBoard() act, err := a.getActiveBoard()
...@@ -42,9 +43,9 @@ func (a *action) propChange(prob *auty.ProposalChange) (*types.Receipt, error) { ...@@ -42,9 +43,9 @@ func (a *action) propChange(prob *auty.ProposalChange) (*types.Receipt, error) {
return nil, err 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 { 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 return nil, err
} }
...@@ -111,9 +112,9 @@ func (a *action) rvkPropChange(rvkProb *auty.RevokeProposalChange) (*types.Recei ...@@ -111,9 +112,9 @@ func (a *action) rvkPropChange(rvkProb *auty.RevokeProposalChange) (*types.Recei
var logs []*types.ReceiptLog var logs []*types.ReceiptLog
var kv []*types.KeyValue var kv []*types.KeyValue
receipt, err := a.coinsAccount.ExecActive(a.fromaddr, a.execaddr, cur.CurRule.ProposalAmount) receipt, err := a.coinsAccount.Transfer(a.execaddr, a.fromaddr, cur.CurRule.ProposalAmount)
if err != nil { 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 return nil, err
} }
logs = append(logs, receipt.Logs...) logs = append(logs, receipt.Logs...)
...@@ -176,16 +177,6 @@ func (a *action) votePropChange(voteProb *auty.VoteProposalChange) (*types.Recei ...@@ -176,16 +177,6 @@ func (a *action) votePropChange(voteProb *auty.VoteProposalChange) (*types.Recei
var logs []*types.ReceiptLog var logs []*types.ReceiptLog
var kv []*types.KeyValue 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 && if cur.VoteResult.TotalVotes != 0 &&
float32(cur.VoteResult.ApproveVotes)/float32(cur.VoteResult.TotalVotes) > float32(cur.CurRule.BoardApproveRatio)/100.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 ...@@ -256,18 +247,6 @@ func (a *action) tmintPropChange(tmintProb *auty.TerminateProposalChange) (*type
var logs []*types.ReceiptLog var logs []*types.ReceiptLog
var kv []*types.KeyValue 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 cur.Status = auty.AutonomyStatusTmintPropChange
kv = append(kv, &types.KeyValue{Key: propChangeID(tmintProb.ProposalID), Value: types.Encode(cur)}) 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) ( ...@@ -331,9 +310,11 @@ func (a *action) checkChangeable(act *auty.ActiveBoard, change []*auty.Change) (
for k := range mpBd { for k := range mpBd {
new.Boards = append(new.Boards, k) new.Boards = append(new.Boards, k)
} }
sort.Strings(new.Boards)
for k := range mpRbd { for k := range mpRbd {
new.Revboards = append(new.Revboards, k) new.Revboards = append(new.Revboards, k)
} }
sort.Strings(new.Revboards)
return new, nil return new, nil
} }
......
...@@ -99,8 +99,8 @@ func testPropChange(t *testing.T, env *ExecEnv, exec drivers.Driver, stateDB dbm ...@@ -99,8 +99,8 @@ func testPropChange(t *testing.T, env *ExecEnv, exec drivers.Driver, stateDB dbm
// check // check
accCoin := account.NewCoinsAccount() accCoin := account.NewCoinsAccount()
accCoin.SetDB(stateDB) accCoin.SetDB(stateDB)
account := accCoin.LoadExecAccount(AddrA, address.ExecAddress(auty.AutonomyX)) account := accCoin.LoadAccount(address.ExecAddress(auty.AutonomyX))
assert.Equal(t, proposalAmount, account.Frozen) assert.Equal(t, proposalAmount, account.Balance)
} }
func propChangeTx(parm *auty.ProposalChange) (*types.Transaction, error) { func propChangeTx(parm *auty.ProposalChange) (*types.Transaction, error) {
...@@ -149,8 +149,8 @@ func revokeProposalChange(t *testing.T, env *ExecEnv, exec drivers.Driver, state ...@@ -149,8 +149,8 @@ func revokeProposalChange(t *testing.T, env *ExecEnv, exec drivers.Driver, state
// check // check
accCoin := account.NewCoinsAccount() accCoin := account.NewCoinsAccount()
accCoin.SetDB(stateDB) accCoin.SetDB(stateDB)
account := accCoin.LoadExecAccount(AddrA, address.ExecAddress(auty.AutonomyX)) account := accCoin.LoadAccount(address.ExecAddress(auty.AutonomyX))
assert.Equal(t, int64(0), account.Frozen) assert.Equal(t, int64(0), account.Balance)
} }
func revokeProposalChangeTx(parm *auty.RevokeProposalChange) (*types.Transaction, error) { func revokeProposalChangeTx(parm *auty.RevokeProposalChange) (*types.Transaction, error) {
...@@ -262,9 +262,9 @@ func voteProposalChange(t *testing.T, env *ExecEnv, exec drivers.Driver, stateDB ...@@ -262,9 +262,9 @@ func voteProposalChange(t *testing.T, env *ExecEnv, exec drivers.Driver, stateDB
// balance // balance
accCoin := account.NewCoinsAccount() accCoin := account.NewCoinsAccount()
accCoin.SetDB(stateDB) accCoin.SetDB(stateDB)
account := accCoin.LoadExecAccount(AddrA, address.ExecAddress(auty.AutonomyX)) account := accCoin.LoadAccount(AddrA)
assert.Equal(t, int64(0), account.Frozen) assert.Equal(t, total - proposalAmount, account.Balance)
account = accCoin.LoadExecAccount(autonomyFundAddr, address.ExecAddress(auty.AutonomyX)) account = accCoin.LoadAccount(address.ExecAddress(auty.AutonomyX))
assert.Equal(t, proposalAmount, account.Balance) assert.Equal(t, proposalAmount, account.Balance)
// status // status
value, err := stateDB.Get(propChangeID(proposalID)) value, err := stateDB.Get(propChangeID(proposalID))
...@@ -347,8 +347,10 @@ func terminateProposalChange(t *testing.T, env *ExecEnv, exec drivers.Driver, st ...@@ -347,8 +347,10 @@ func terminateProposalChange(t *testing.T, env *ExecEnv, exec drivers.Driver, st
// check // check
accCoin := account.NewCoinsAccount() accCoin := account.NewCoinsAccount()
accCoin.SetDB(stateDB) accCoin.SetDB(stateDB)
account := accCoin.LoadExecAccount(AddrA, address.ExecAddress(auty.AutonomyX)) account := accCoin.LoadAccount(AddrA)
assert.Equal(t, int64(0), account.Frozen) 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) { func terminateProposalChangeTx(parm *auty.TerminateProposalChange) (*types.Transaction, error) {
......
...@@ -27,7 +27,7 @@ func (a *action) propProject(prob *auty.ProposalProject) (*types.Receipt, error) ...@@ -27,7 +27,7 @@ func (a *action) propProject(prob *auty.ProposalProject) (*types.Receipt, error)
prob.StartBlockHeight+startEndBlockPeriod > prob.EndBlockHeight { prob.StartBlockHeight+startEndBlockPeriod > prob.EndBlockHeight {
alog.Error("propProject height or amount invaild", "StartBlockHeight", prob.StartBlockHeight, "EndBlockHeight", alog.Error("propProject height or amount invaild", "StartBlockHeight", prob.StartBlockHeight, "EndBlockHeight",
prob.EndBlockHeight, "height", a.height, "amount", prob.Amount) 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) ...@@ -68,23 +68,15 @@ func (a *action) propProject(prob *auty.ProposalProject) (*types.Receipt, error)
var logs []*types.ReceiptLog var logs []*types.ReceiptLog
var kv []*types.KeyValue var kv []*types.KeyValue
// 冻结提案金 // 提案金
receipt, err := a.coinsAccount.Transfer(a.fromaddr, a.execaddr, rule.ProposalAmount) receipt, err := a.coinsAccount.Transfer(a.fromaddr, a.execaddr, rule.ProposalAmount)
if err != nil { 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 return nil, err
} }
logs = append(logs, receipt.Logs...) logs = append(logs, receipt.Logs...)
kv = append(kv, receipt.KV...) 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 var isPubVote bool
if prob.Amount >= rule.LargeProjectAmount { if prob.Amount >= rule.LargeProjectAmount {
...@@ -147,24 +139,15 @@ func (a *action) rvkPropProject(rvkProb *auty.RevokeProposalProject) (*types.Rec ...@@ -147,24 +139,15 @@ func (a *action) rvkPropProject(rvkProb *auty.RevokeProposalProject) (*types.Rec
var logs []*types.ReceiptLog var logs []*types.ReceiptLog
var kv []*types.KeyValue var kv []*types.KeyValue
// 解冻提案金 // 提案金
receipt, err := a.coinsAccount.TransferWithdraw(a.fromaddr, a.execaddr, cur.CurRule.ProposalAmount) receipt, err := a.coinsAccount.Transfer(a.execaddr, a.fromaddr, cur.CurRule.ProposalAmount)
if err != nil { 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 return nil, err
} }
logs = append(logs, receipt.Logs...) logs = append(logs, receipt.Logs...)
kv = append(kv, receipt.KV...) 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 cur.Status = auty.AutonomyStatusRvkPropProject
kv = append(kv, &types.KeyValue{Key: propProjectID(rvkProb.ProposalID), Value: types.Encode(cur)}) 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 ...@@ -239,17 +222,6 @@ func (a *action) votePropProject(voteProb *auty.VoteProposalProject) (*types.Rec
var logs []*types.ReceiptLog var logs []*types.ReceiptLog
var kv []*types.KeyValue 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 && if cur.BoardVoteRes.TotalVotes != 0 &&
float32(cur.BoardVoteRes.ApproveVotes)/float32(cur.BoardVoteRes.TotalVotes) >= float32(cur.CurRule.BoardApproveRatio)/100.0 { float32(cur.BoardVoteRes.ApproveVotes)/float32(cur.BoardVoteRes.TotalVotes) >= float32(cur.CurRule.BoardApproveRatio)/100.0 {
cur.BoardVoteRes.Pass = true cur.BoardVoteRes.Pass = true
...@@ -268,7 +240,7 @@ func (a *action) votePropProject(voteProb *auty.VoteProposalProject) (*types.Rec ...@@ -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) receipt, err := a.coinsAccount.Transfer(a.execaddr, cur.PropProject.ToAddr, cur.PropProject.Amount)
if err != nil { 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 return nil, err
} }
logs = append(logs, receipt.Logs...) logs = append(logs, receipt.Logs...)
...@@ -387,14 +359,6 @@ func (a *action) pubVotePropProject(voteProb *auty.PubVoteProposalProject) (*typ ...@@ -387,14 +359,6 @@ func (a *action) pubVotePropProject(voteProb *auty.PubVoteProposalProject) (*typ
cur.PubVote.PubPass = false cur.PubVote.PubPass = false
cur.PropProject.RealEndBlockHeight = a.height 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) key := propProjectID(voteProb.ProposalID)
...@@ -478,23 +442,12 @@ func (a *action) tmintPropProject(tmintProb *auty.TerminateProposalProject) (*ty ...@@ -478,23 +442,12 @@ func (a *action) tmintPropProject(tmintProb *auty.TerminateProposalProject) (*ty
var logs []*types.ReceiptLog var logs []*types.ReceiptLog
var kv []*types.KeyValue 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) || // 需要公示且公示通过 if (cur.PubVote.Publicity && cur.PubVote.PubPass) || // 需要公示且公示通过
(!cur.PubVote.Publicity && cur.BoardVoteRes.Pass) { // 不需要公示且董事会通过 (!cur.PubVote.Publicity && cur.BoardVoteRes.Pass) { // 不需要公示且董事会通过
// 提案通过,将工程金额从基金付款给承包商 // 提案通过,将工程金额从基金付款给承包商
receipt, err := a.coinsAccount.Transfer(a.execaddr, cur.PropProject.ToAddr, cur.PropProject.Amount) receipt, err := a.coinsAccount.Transfer(a.execaddr, cur.PropProject.ToAddr, cur.PropProject.Amount)
if err != nil { 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 return nil, err
} }
logs = append(logs, receipt.Logs...) logs = append(logs, receipt.Logs...)
...@@ -507,16 +460,6 @@ func (a *action) tmintPropProject(tmintProb *auty.TerminateProposalProject) (*ty ...@@ -507,16 +460,6 @@ func (a *action) tmintPropProject(tmintProb *auty.TerminateProposalProject) (*ty
} }
kv = append(kv, pakv) 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 cur.Status = auty.AutonomyStatusTmintPropProject
......
...@@ -20,14 +20,6 @@ import ( ...@@ -20,14 +20,6 @@ import (
"github.com/stretchr/testify/mock" "github.com/stretchr/testify/mock"
) )
//const (
// testBoardAttendRatio int32 = 60
// testBoardApproveRatio int32 = 60
// testPubOpposeRatio int32 = 30
// testProposalAmount int64 = 0
// testLargeProjectAmount int64 = 1
//)
const ( const (
testProjectAmount int64 = types.Coin * 100 // 工程需要资金 testProjectAmount int64 = types.Coin * 100 // 工程需要资金
...@@ -103,8 +95,8 @@ func TestPropProject(t *testing.T) { ...@@ -103,8 +95,8 @@ func TestPropProject(t *testing.T) {
result := []error{ result := []error{
types.ErrInvalidAddress, types.ErrInvalidAddress,
types.ErrInvalidParam, auty.ErrSetBlockHeight,
types.ErrInvalidParam, auty.ErrSetBlockHeight,
types.ErrNotFound, types.ErrNotFound,
auty.ErrNoPeriodAmount, auty.ErrNoPeriodAmount,
} }
......
...@@ -56,7 +56,7 @@ func (a *action) propRule(prob *auty.ProposalRule) (*types.Receipt, error) { ...@@ -56,7 +56,7 @@ func (a *action) propRule(prob *auty.ProposalRule) (*types.Receipt, error) {
prob.StartBlockHeight+startEndBlockPeriod > prob.EndBlockHeight { prob.StartBlockHeight+startEndBlockPeriod > prob.EndBlockHeight {
alog.Error("propRule height invaild", "StartBlockHeight", prob.StartBlockHeight, "EndBlockHeight", alog.Error("propRule height invaild", "StartBlockHeight", prob.StartBlockHeight, "EndBlockHeight",
prob.EndBlockHeight, "height", a.height) 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) { ...@@ -66,9 +66,9 @@ func (a *action) propRule(prob *auty.ProposalRule) (*types.Receipt, error) {
return nil, err 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 { 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 return nil, err
} }
...@@ -134,9 +134,9 @@ func (a *action) rvkPropRule(rvkProb *auty.RevokeProposalRule) (*types.Receipt, ...@@ -134,9 +134,9 @@ func (a *action) rvkPropRule(rvkProb *auty.RevokeProposalRule) (*types.Receipt,
var logs []*types.ReceiptLog var logs []*types.ReceiptLog
var kv []*types.KeyValue var kv []*types.KeyValue
receipt, err := a.coinsAccount.ExecActive(a.fromaddr, a.execaddr, cur.CurRule.ProposalAmount) receipt, err := a.coinsAccount.Transfer(a.execaddr, a.fromaddr, cur.CurRule.ProposalAmount)
if err != nil { 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 return nil, err
} }
logs = append(logs, receipt.Logs...) logs = append(logs, receipt.Logs...)
...@@ -238,17 +238,6 @@ func (a *action) votePropRule(voteProb *auty.VoteProposalRule) (*types.Receipt, ...@@ -238,17 +238,6 @@ func (a *action) votePropRule(voteProb *auty.VoteProposalRule) (*types.Receipt,
var logs []*types.ReceiptLog var logs []*types.ReceiptLog
var kv []*types.KeyValue 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 && if cur.VoteResult.TotalVotes != 0 &&
cur.VoteResult.ApproveVotes+cur.VoteResult.OpposeVotes != 0 && cur.VoteResult.ApproveVotes+cur.VoteResult.OpposeVotes != 0 &&
float32(cur.VoteResult.ApproveVotes+cur.VoteResult.OpposeVotes)/float32(cur.VoteResult.TotalVotes) > float32(pubAttendRatio)/100.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 ...@@ -330,17 +319,6 @@ func (a *action) tmintPropRule(tmintProb *auty.TerminateProposalRule) (*types.Re
var logs []*types.ReceiptLog var logs []*types.ReceiptLog
var kv []*types.KeyValue 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 cur.Status = auty.AutonomyStatusTmintPropRule
...@@ -366,7 +344,7 @@ func (a *action) transfer(tf *auty.TransferFund) (*types.Receipt, error) { ...@@ -366,7 +344,7 @@ func (a *action) transfer(tf *auty.TransferFund) (*types.Receipt, error) {
var logs []*types.ReceiptLog var logs []*types.ReceiptLog
var kv []*types.KeyValue var kv []*types.KeyValue
receipt, err := a.coinsAccount.ExecTransfer(a.fromaddr, autonomyFundAddr, a.execaddr, tf.Amount) receipt, err := a.coinsAccount.Transfer(a.fromaddr, autonomyAddr, tf.Amount)
if err != nil { if err != nil {
alog.Error("autonomy transfer ", "addr", a.fromaddr, "amount", tf.Amount, "ExecTransfer fail", err) alog.Error("autonomy transfer ", "addr", a.fromaddr, "amount", tf.Amount, "ExecTransfer fail", err)
return nil, err return nil, err
......
...@@ -186,8 +186,8 @@ func testPropRule(t *testing.T, env *ExecEnv, exec drivers.Driver, stateDB dbm.K ...@@ -186,8 +186,8 @@ func testPropRule(t *testing.T, env *ExecEnv, exec drivers.Driver, stateDB dbm.K
// check // check
accCoin := account.NewCoinsAccount() accCoin := account.NewCoinsAccount()
accCoin.SetDB(stateDB) accCoin.SetDB(stateDB)
account := accCoin.LoadExecAccount(AddrA, address.ExecAddress(auty.AutonomyX)) account := accCoin.LoadAccount(address.ExecAddress(auty.AutonomyX))
assert.Equal(t, proposalAmount, account.Frozen) assert.Equal(t, proposalAmount, account.Balance)
} }
func propRuleTx(parm *auty.ProposalRule) (*types.Transaction, error) { func propRuleTx(parm *auty.ProposalRule) (*types.Transaction, error) {
...@@ -236,8 +236,8 @@ func revokeProposalRule(t *testing.T, env *ExecEnv, exec drivers.Driver, stateDB ...@@ -236,8 +236,8 @@ func revokeProposalRule(t *testing.T, env *ExecEnv, exec drivers.Driver, stateDB
// check // check
accCoin := account.NewCoinsAccount() accCoin := account.NewCoinsAccount()
accCoin.SetDB(stateDB) accCoin.SetDB(stateDB)
account := accCoin.LoadExecAccount(AddrA, address.ExecAddress(auty.AutonomyX)) account := accCoin.LoadAccount(address.ExecAddress(auty.AutonomyX))
assert.Equal(t, int64(0), account.Frozen) assert.Equal(t, int64(0), account.Balance)
// check rule // check rule
au := &Autonomy{ au := &Autonomy{
drivers.DriverBase{}, drivers.DriverBase{},
...@@ -356,9 +356,9 @@ func voteProposalRule(t *testing.T, env *ExecEnv, exec drivers.Driver, stateDB d ...@@ -356,9 +356,9 @@ func voteProposalRule(t *testing.T, env *ExecEnv, exec drivers.Driver, stateDB d
// balance // balance
accCoin := account.NewCoinsAccount() accCoin := account.NewCoinsAccount()
accCoin.SetDB(stateDB) accCoin.SetDB(stateDB)
account := accCoin.LoadExecAccount(AddrA, address.ExecAddress(auty.AutonomyX)) account := accCoin.LoadAccount(AddrA)
assert.Equal(t, int64(0), account.Frozen) assert.Equal(t, total - proposalAmount, account.Balance)
account = accCoin.LoadExecAccount(autonomyFundAddr, address.ExecAddress(auty.AutonomyX)) account = accCoin.LoadAccount(address.ExecAddress(auty.AutonomyX))
assert.Equal(t, proposalAmount, account.Balance) assert.Equal(t, proposalAmount, account.Balance)
// status // status
value, err := stateDB.Get(propRuleID(proposalID)) value, err := stateDB.Get(propRuleID(proposalID))
...@@ -447,8 +447,10 @@ func terminateProposalRule(t *testing.T, env *ExecEnv, exec drivers.Driver, stat ...@@ -447,8 +447,10 @@ func terminateProposalRule(t *testing.T, env *ExecEnv, exec drivers.Driver, stat
// check // check
accCoin := account.NewCoinsAccount() accCoin := account.NewCoinsAccount()
accCoin.SetDB(stateDB) accCoin.SetDB(stateDB)
account := accCoin.LoadExecAccount(AddrA, address.ExecAddress(auty.AutonomyX)) account := accCoin.LoadAccount(AddrA)
assert.Equal(t, int64(0), account.Frozen) assert.Equal(t, total - proposalAmount, account.Balance)
account = accCoin.LoadAccount(address.ExecAddress(auty.AutonomyX))
assert.Equal(t, proposalAmount, account.Balance)
// check rule // check rule
au := &Autonomy{ au := &Autonomy{
...@@ -589,9 +591,9 @@ func TestTransfer(t *testing.T) { ...@@ -589,9 +591,9 @@ func TestTransfer(t *testing.T) {
// check // check
accCoin := account.NewCoinsAccount() accCoin := account.NewCoinsAccount()
accCoin.SetDB(stateDB) accCoin.SetDB(stateDB)
account := accCoin.LoadExecAccount(AddrA, address.ExecAddress(auty.AutonomyX)) account := accCoin.LoadAccount(AddrA)
assert.Equal(t, total-types.Coin*190, account.Balance) assert.Equal(t, total-types.Coin*190, account.Balance)
account = accCoin.LoadExecAccount(autonomyFundAddr, address.ExecAddress(auty.AutonomyX)) account = accCoin.LoadAccount(address.ExecAddress(auty.AutonomyX))
assert.Equal(t, types.Coin*190, account.Balance) assert.Equal(t, types.Coin*190, account.Balance)
} }
......
...@@ -37,4 +37,6 @@ var ( ...@@ -37,4 +37,6 @@ var (
ErrRepeatAddr = errors.New("ErrRepeatAddr") ErrRepeatAddr = errors.New("ErrRepeatAddr")
// ErrNotEnoughFund 重复地址 // ErrNotEnoughFund 重复地址
ErrNotEnoughFund = errors.New("ErrNotEnoughFund") ErrNotEnoughFund = errors.New("ErrNotEnoughFund")
// ErrSetBlockHeight
ErrSetBlockHeight = errors.New("ErrSetBlockHeight")
) )
...@@ -341,11 +341,12 @@ func (action *Action) TicketMiner(miner *ty.TicketMiner, index int) (*types.Rece ...@@ -341,11 +341,12 @@ func (action *Action) TicketMiner(miner *ty.TicketMiner, index int) (*types.Rece
} }
//fund //fund
var receipt2 *types.Receipt var receipt2 *types.Receipt
if types.IsFork(action.height, "ForkTicketFundAddrV2") { if types.IsFork(action.height, "ForkTicketFundAddrV1") {
// issue coins to exec addr // 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 { 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 return nil, err
} }
} else { } else {
......
...@@ -61,7 +61,7 @@ func init() { ...@@ -61,7 +61,7 @@ func init() {
types.RegisterDappFork(TicketX, "Enable", 0) types.RegisterDappFork(TicketX, "Enable", 0)
types.RegisterDappFork(TicketX, "ForkTicketId", 1062000) types.RegisterDappFork(TicketX, "ForkTicketId", 1062000)
types.RegisterDappFork(TicketX, "ForkTicketVrf", 1770000) types.RegisterDappFork(TicketX, "ForkTicketVrf", 1770000)
types.RegisterDappFork(TicketX, "ForkTicketFundAddrV2", 500 * 10000) types.RegisterDappFork(TicketX, "ForkTicketFundAddrV1", 500 * 10000)
} }
// TicketType ticket exec type // 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