Commit 4d9f49bd authored by liuyuhang's avatar liuyuhang

modify rule change and some bug

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