Commit 9771febb authored by liuyuhang's avatar liuyuhang

add change test

parent 05b8ae47
...@@ -117,9 +117,9 @@ type RoundState struct { ...@@ -117,9 +117,9 @@ type RoundState struct {
// RoundStateMessage ... // RoundStateMessage ...
func (rs *RoundState) RoundStateMessage() *tmtypes.NewRoundStepMsg { func (rs *RoundState) RoundStateMessage() *tmtypes.NewRoundStepMsg {
return &tmtypes.NewRoundStepMsg{ return &tmtypes.NewRoundStepMsg{
Height: rs.Height, Height: rs.Height,
Round: int32(rs.Round), Round: int32(rs.Round),
Step: int32(rs.Step), Step: int32(rs.Step),
SecondsSinceStartTime: int32(time.Since(rs.StartTime).Seconds()), SecondsSinceStartTime: int32(time.Since(rs.StartTime).Seconds()),
LastCommitRound: int32(rs.LastCommit.Round()), LastCommitRound: int32(rs.LastCommit.Round()),
} }
......
...@@ -58,14 +58,14 @@ func proposalChange(cmd *cobra.Command, args []string) { ...@@ -58,14 +58,14 @@ func proposalChange(cmd *cobra.Command, args []string) {
if len(per) == 2 { if len(per) == 2 {
if per[1] == "true" { if per[1] == "true" {
change := &auty.Change{ change := &auty.Change{
Cancel:true, Cancel: true,
Addr:per[0], Addr: per[0],
} }
changes = append(changes, change) changes = append(changes, change)
} else if per[1] == "false" { } else if per[1] == "false" {
change := &auty.Change{ change := &auty.Change{
Cancel:false, Cancel: false,
Addr:per[0], Addr: per[0],
} }
changes = append(changes, change) changes = append(changes, change)
} }
...@@ -75,7 +75,7 @@ func proposalChange(cmd *cobra.Command, args []string) { ...@@ -75,7 +75,7 @@ func proposalChange(cmd *cobra.Command, args []string) {
Year: year, Year: year,
Month: month, Month: month,
Day: day, Day: day,
Changes: changes, Changes: changes,
StartBlockHeight: startBlock, StartBlockHeight: startBlock,
EndBlockHeight: endBlock, EndBlockHeight: endBlock,
} }
......
...@@ -7,12 +7,13 @@ package commands ...@@ -7,12 +7,13 @@ package commands
import ( import (
"encoding/json" "encoding/json"
"strings"
jsonrpc "github.com/33cn/chain33/rpc/jsonclient" jsonrpc "github.com/33cn/chain33/rpc/jsonclient"
rpctypes "github.com/33cn/chain33/rpc/types" rpctypes "github.com/33cn/chain33/rpc/types"
"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"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"strings"
) )
// ProposalProjectCmd 创建提案命令 // ProposalProjectCmd 创建提案命令
......
...@@ -7,12 +7,13 @@ package commands ...@@ -7,12 +7,13 @@ package commands
import ( import (
"encoding/json" "encoding/json"
"strings"
jsonrpc "github.com/33cn/chain33/rpc/jsonclient" jsonrpc "github.com/33cn/chain33/rpc/jsonclient"
rpctypes "github.com/33cn/chain33/rpc/types" rpctypes "github.com/33cn/chain33/rpc/types"
"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"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"strings"
) )
// ProposalRuleCmd 创建提案命令 // ProposalRuleCmd 创建提案命令
......
...@@ -285,7 +285,7 @@ func (a *action) votePropBoard(voteProb *auty.VoteProposalBoard) (*types.Receipt ...@@ -285,7 +285,7 @@ func (a *action) votePropBoard(voteProb *auty.VoteProposalBoard) (*types.Receipt
// 更新当前具有权利的董事会成员 // 更新当前具有权利的董事会成员
if cur.VoteResult.Pass { if cur.VoteResult.Pass {
act := &auty.ActiveBoard{ act := &auty.ActiveBoard{
Boards: cur.PropBoard.Boards, Boards: cur.PropBoard.Boards,
StartHeight: a.height, StartHeight: a.height,
} }
kv = append(kv, &types.KeyValue{Key: activeBoardID(), Value: types.Encode(act)}) kv = append(kv, &types.KeyValue{Key: activeBoardID(), Value: types.Encode(act)})
...@@ -365,7 +365,7 @@ func (a *action) tmintPropBoard(tmintProb *auty.TerminateProposalBoard) (*types. ...@@ -365,7 +365,7 @@ func (a *action) tmintPropBoard(tmintProb *auty.TerminateProposalBoard) (*types.
// 更新当前具有权利的董事会成员 // 更新当前具有权利的董事会成员
if cur.VoteResult.Pass { if cur.VoteResult.Pass {
act := &auty.ActiveBoard{ act := &auty.ActiveBoard{
Boards: cur.PropBoard.Boards, Boards: cur.PropBoard.Boards,
StartHeight: a.height, StartHeight: a.height,
} }
kv = append(kv, &types.KeyValue{Key: activeBoardID(), Value: types.Encode(act)}) kv = append(kv, &types.KeyValue{Key: activeBoardID(), Value: types.Encode(act)})
...@@ -398,7 +398,7 @@ func (a *action) verifyMinerAddr(addrs []string, bindAddr string) (string, error ...@@ -398,7 +398,7 @@ func (a *action) verifyMinerAddr(addrs []string, bindAddr string) (string, error
} }
tkBind := &ticketTy.TicketBind{} tkBind := &ticketTy.TicketBind{}
err = types.Decode(value, tkBind) err = types.Decode(value, tkBind)
if err != nil ||tkBind.MinerAddress != bindAddr { if err != nil || tkBind.MinerAddress != bindAddr {
return addr, auty.ErrBindAddr return addr, auty.ErrBindAddr
} }
} }
...@@ -503,7 +503,7 @@ func (a *action) checkVotesRecord(addrs []string, key []byte) (*auty.VotesRecord ...@@ -503,7 +503,7 @@ func (a *action) checkVotesRecord(addrs []string, key []byte) (*auty.VotesRecord
for _, addr := range votes.Address { for _, addr := range votes.Address {
if _, ok := mp[addr]; ok { if _, ok := mp[addr]; ok {
err := auty.ErrRepeatVoteAddr err := auty.ErrRepeatVoteAddr
alog.Error("autonomy ", "addr", addr, "err", err) alog.Error("autonomy ", "addr", addr, "err", err)
return nil, err return nil, err
} }
} }
......
...@@ -20,10 +20,10 @@ import ( ...@@ -20,10 +20,10 @@ import (
"github.com/33cn/chain33/types" "github.com/33cn/chain33/types"
"github.com/33cn/chain33/util" "github.com/33cn/chain33/util"
auty "github.com/33cn/plugin/plugin/dapp/autonomy/types" auty "github.com/33cn/plugin/plugin/dapp/autonomy/types"
ticket "github.com/33cn/plugin/plugin/dapp/ticket/executor"
ticketTy "github.com/33cn/plugin/plugin/dapp/ticket/types"
"github.com/stretchr/testify/mock" "github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
ticketTy "github.com/33cn/plugin/plugin/dapp/ticket/types"
ticket "github.com/33cn/plugin/plugin/dapp/ticket/executor"
) )
// ExecEnv exec environment // ExecEnv exec environment
...@@ -47,43 +47,70 @@ var ( ...@@ -47,43 +47,70 @@ var (
AddrC = "1NLHPEcbTWWxxU3dGUZBhayjrCHD3psX7k" AddrC = "1NLHPEcbTWWxxU3dGUZBhayjrCHD3psX7k"
AddrD = "1MCftFynyvG2F4ED5mdHYgziDxx6vDrScs" AddrD = "1MCftFynyvG2F4ED5mdHYgziDxx6vDrScs"
PrivKey1 = "0x9d4f8ab11361be596468b265cb66946c87873d4a119713fd0c3d8302eae0a8e4" PrivKey1 = "0x9d4f8ab11361be596468b265cb66946c87873d4a119713fd0c3d8302eae0a8e4"
PrivKey2 = "0xd165c84ed37c2a427fea487470ee671b7a0495d68d82607cafbc6348bf23bec5" PrivKey2 = "0xd165c84ed37c2a427fea487470ee671b7a0495d68d82607cafbc6348bf23bec5"
PrivKey3 = "0xc21d38be90493512a5c2417d565269a8b23ce8152010e404ff4f75efead8183a" PrivKey3 = "0xc21d38be90493512a5c2417d565269a8b23ce8152010e404ff4f75efead8183a"
PrivKey4 = "0xfdf2bbff853ecff2e7b86b2a8b45726c6538ca7d1403dc94e50131ef379bdca0" PrivKey4 = "0xfdf2bbff853ecff2e7b86b2a8b45726c6538ca7d1403dc94e50131ef379bdca0"
PrivKey5 = "0x794443611e7369a57b078881445b93b754cbc9b9b8f526535ab9c6d21d29203d" PrivKey5 = "0x794443611e7369a57b078881445b93b754cbc9b9b8f526535ab9c6d21d29203d"
PrivKey6 = "0xf2cc48d30560e4c92e84821df68cf1086de82ee6a5725fc2a590a58d6ffe4fc5" PrivKey6 = "0xf2cc48d30560e4c92e84821df68cf1086de82ee6a5725fc2a590a58d6ffe4fc5"
PrivKey7 = "0xeb4738a7c685a7ccf5471c3335a2d7ebe284b11d8a1717d814904b8d1ba936d9" PrivKey7 = "0xeb4738a7c685a7ccf5471c3335a2d7ebe284b11d8a1717d814904b8d1ba936d9"
PrivKey8 = "0x9d315182e56fde7fadb94408d360203894e5134216944e858f9b31f70e9ecf40" PrivKey8 = "0x9d315182e56fde7fadb94408d360203894e5134216944e858f9b31f70e9ecf40"
PrivKey9 = "0x128de4afa7c061c00d854a1bca51b58e80a2c292583739e5aebf4c0f778959e1" PrivKey9 = "0x128de4afa7c061c00d854a1bca51b58e80a2c292583739e5aebf4c0f778959e1"
PrivKey10 = "0x1c3e6cac2f887e1ab9180e2d5772dc4ba01accb8d4df434faba097003eb35482" PrivKey10 = "0x1c3e6cac2f887e1ab9180e2d5772dc4ba01accb8d4df434faba097003eb35482"
Addr1 = "12HKLEn6g4FH39yUbHh4EVJWcFo5CXg22d"
Addr2 = "1Ka7EPFRqs3v9yreXG6qA4RQbNmbPJCZPj"
Addr3 = "12cjnN5D4DPdBQSwh6vjwJbtsW4EJALTMv"
Addr4 = "1Luh4AziYyaC5zP3hUXtXFZS873xAxm6rH"
Addr5 = "1NNaYHkscJaLJ2wUrFNeh6cQXBS4TrFYeB"
Addr6 = "1L1puAUjfmtDECKo2C1qLWsAMZtDGTBWf6"
Addr7 = "1LNf9AVXzUMQkQM5hgGLhkdrVtD8UMBSUm"
Addr8 = "1PcGKYYoLn1PLLJJodc1UpgWGeFAQasAkx"
Addr9 = "1BM2xhBk95qoae8zKNDWwAVGgBERhb7DQu"
Addr10 = "1Q9sQwothzM1gKSzkVZ8Dt1tqKX1uzSagx"
PrivKey11 = "0xfd0c4a8a1efcd221ee0f36b7d4f57d8ff843cb8bc193b39c7863332d355acafa"
PrivKey12 = "0x4c9691bf6acc908ef5c07abcad23cf7f98e46e84101aa5059322aa53eb4dc471"
PrivKey13 = "0x50b9c6a4358ef8ffc96d5831a8dfd5e0fae504d49e20c5eafd12b6015423de33"
PrivKey14 = "0x96e3c766850a915fe4718b890d96208d5d1a3694b2597e08165480b5b48b84cb"
PrivKey15 = "0xeac5e45243c3920cf8a98f3d3a2e3a9b43f30a21769b57f734213913511e7575"
PrivKey16 = "0xd2aaa6f050a4db13fbd2c8bf87cbb96e217289172baca6c12e8a8b0680b9aa1a"
PrivKey17 = "0x33b3b977c657435a49773b5605a704ad5fdca0fa34fe36a02ea0f13a49099832"
Addr11 = "15VUiygdxMSZ3rykwe742yomp2cPJ9Tfve"
Addr12 = "1DyR84CU5AHbGXLEnhHMwMvWNMeunLZsuJ"
Addr13 = "132pBvrgSYgHASxzoeL3bqnsqUpaBbUktm"
Addr14 = "1DEV4XwdBUWRkMuy4ARRiEAoxQ2LoDByNG"
Addr15 = "18Y87cw2hiYC71bvpD872oYMYXtw66Qp6o"
Addr16 = "1Fghq6cgdJEDr6gQBmvba3t6aXAkyZyjr2"
Addr17 = "142KsfJLvEA5FJxAgKm9ZDtFVjkRaPdu82"
boards = []string{ boards = []string{
AddrA, AddrA,
AddrB, AddrB,
AddrC, AddrC,
AddrD, AddrD,
"12HKLEn6g4FH39yUbHh4EVJWcFo5CXg22d", Addr1,
"1Ka7EPFRqs3v9yreXG6qA4RQbNmbPJCZPj", Addr2,
"12cjnN5D4DPdBQSwh6vjwJbtsW4EJALTMv", Addr3,
"1Luh4AziYyaC5zP3hUXtXFZS873xAxm6rH", Addr4,
"1NNaYHkscJaLJ2wUrFNeh6cQXBS4TrFYeB", Addr5,
"1L1puAUjfmtDECKo2C1qLWsAMZtDGTBWf6", Addr6,
"1LNf9AVXzUMQkQM5hgGLhkdrVtD8UMBSUm", Addr7,
"1PcGKYYoLn1PLLJJodc1UpgWGeFAQasAkx", Addr8,
"1BM2xhBk95qoae8zKNDWwAVGgBERhb7DQu", Addr9,
"1Q9sQwothzM1gKSzkVZ8Dt1tqKX1uzSagx", Addr10,
"15VUiygdxMSZ3rykwe742yomp2cPJ9Tfve", Addr11,
"1DyR84CU5AHbGXLEnhHMwMvWNMeunLZsuJ", Addr12,
"132pBvrgSYgHASxzoeL3bqnsqUpaBbUktm", Addr13,
"1DEV4XwdBUWRkMuy4ARRiEAoxQ2LoDByNG", Addr14,
"18Y87cw2hiYC71bvpD872oYMYXtw66Qp6o", Addr15,
"1Fghq6cgdJEDr6gQBmvba3t6aXAkyZyjr2", Addr16,
"142KsfJLvEA5FJxAgKm9ZDtFVjkRaPdu82", Addr17,
} }
total = types.Coin * 30000 total = types.Coin * 30000
) )
func init() { func init() {
...@@ -547,7 +574,7 @@ func TestVerifyMinerAddr(t *testing.T) { ...@@ -547,7 +574,7 @@ func TestVerifyMinerAddr(t *testing.T) {
// 授权地址AddrD // 授权地址AddrD
for _, addr := range addrs { for _, addr := range addrs {
tkBind := &ticketTy.TicketBind{ tkBind := &ticketTy.TicketBind{
MinerAddress: AddrD, MinerAddress: AddrD,
ReturnAddress: addr, ReturnAddress: addr,
} }
stateDB.Set(ticket.BindKey(addr), types.Encode(tkBind)) stateDB.Set(ticket.BindKey(addr), types.Encode(tkBind))
...@@ -565,7 +592,7 @@ func TestVerifyMinerAddr(t *testing.T) { ...@@ -565,7 +592,7 @@ func TestVerifyMinerAddr(t *testing.T) {
// ErrBindAddr // ErrBindAddr
testf = "1Ka7EPFRqs3v9yreXG6qA4RQbNmbPJCZPj" testf = "1Ka7EPFRqs3v9yreXG6qA4RQbNmbPJCZPj"
tkBind := &ticketTy.TicketBind{ tkBind := &ticketTy.TicketBind{
MinerAddress: AddrA, MinerAddress: AddrA,
ReturnAddress: testf, ReturnAddress: testf,
} }
stateDB.Set(ticket.BindKey(testf), types.Encode(tkBind)) stateDB.Set(ticket.BindKey(testf), types.Encode(tkBind))
......
This diff is collapsed.
...@@ -8,10 +8,8 @@ import ( ...@@ -8,10 +8,8 @@ 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"
) )
func (a *action) propChange(prob *auty.ProposalChange) (*types.Receipt, error) { func (a *action) propChange(prob *auty.ProposalChange) (*types.Receipt, error) {
//如果全小于等于0,则说明该提案规则参数不正确 //如果全小于等于0,则说明该提案规则参数不正确
if prob == nil || len(prob.Changes) == 0 { if prob == nil || len(prob.Changes) == 0 {
...@@ -56,10 +54,10 @@ func (a *action) propChange(prob *auty.ProposalChange) (*types.Receipt, error) { ...@@ -56,10 +54,10 @@ func (a *action) propChange(prob *auty.ProposalChange) (*types.Receipt, error) {
kv = append(kv, receipt.KV...) kv = append(kv, receipt.KV...)
cur := &auty.AutonomyProposalChange{ cur := &auty.AutonomyProposalChange{
PropChange: prob, PropChange: prob,
CurRule: rule, CurRule: rule,
Board: new, Board: new,
VoteResult: &auty.VoteResult{TotalVotes:int32(len(act.Boards))}, VoteResult: &auty.VoteResult{TotalVotes: int32(len(act.Boards))},
Status: auty.AutonomyStatusProposalChange, Status: auty.AutonomyStatusProposalChange,
Address: a.fromaddr, Address: a.fromaddr,
Height: a.height, Height: a.height,
...@@ -168,15 +166,10 @@ func (a *action) votePropChange(voteProb *auty.VoteProposalChange) (*types.Recei ...@@ -168,15 +166,10 @@ func (a *action) votePropChange(voteProb *auty.VoteProposalChange) (*types.Recei
// 更新投票记录 // 更新投票记录
votes.Address = append(votes.Address, a.fromaddr) votes.Address = append(votes.Address, a.fromaddr)
// 获取可投票数
vtCouts, err := a.getAddressVotes(a.fromaddr, start)
if err != nil {
return nil, err
}
if voteProb.Approve { if voteProb.Approve {
cur.VoteResult.ApproveVotes += vtCouts cur.VoteResult.ApproveVotes++
} else { } else {
cur.VoteResult.OpposeVotes += vtCouts cur.VoteResult.OpposeVotes++
} }
var logs []*types.ReceiptLog var logs []*types.ReceiptLog
...@@ -331,7 +324,7 @@ func (a *action) checkChangeable(act *auty.ActiveBoard, change []*auty.Change) ( ...@@ -331,7 +324,7 @@ func (a *action) checkChangeable(act *auty.ActiveBoard, change []*auty.Change) (
return nil, auty.ErrBoardNumber return nil, auty.ErrBoardNumber
} }
new := &auty.ActiveBoard{ new := &auty.ActiveBoard{
Amount: act.Amount, Amount: act.Amount,
StartHeight: act.StartHeight, StartHeight: act.StartHeight,
} }
for k := range mpBd { for k := range mpBd {
...@@ -359,13 +352,14 @@ func copyAutonomyProposalChange(cur *auty.AutonomyProposalChange) *auty.Autonomy ...@@ -359,13 +352,14 @@ func copyAutonomyProposalChange(cur *auty.AutonomyProposalChange) *auty.Autonomy
} }
newAut := *cur newAut := *cur
if cur.PropChange != nil { if cur.PropChange != nil {
newPropChange := *cur.GetPropChange() newPropChange := *cur.PropChange
newAut.PropChange = &newPropChange newAut.PropChange = &newPropChange
if cur.PropChange.Changes != nil { if cur.PropChange.Changes != nil {
chs := cur.GetPropChange().GetChanges() newAut.PropChange.Changes = make([]*auty.Change, len(cur.PropChange.Changes))
for _, ch := range chs { chs := cur.PropChange.Changes
for i, ch := range chs {
newch := *ch newch := *ch
newAut.PropChange.Changes = append(newAut.PropChange.Changes, &newch) newAut.PropChange.Changes[i] = &newch
} }
} }
} }
...@@ -375,6 +369,10 @@ func copyAutonomyProposalChange(cur *auty.AutonomyProposalChange) *auty.Autonomy ...@@ -375,6 +369,10 @@ func copyAutonomyProposalChange(cur *auty.AutonomyProposalChange) *auty.Autonomy
} }
if cur.Board != nil { if cur.Board != nil {
newBoard := *cur.GetBoard() newBoard := *cur.GetBoard()
newBoard.Boards = make([]string, len(cur.Board.Boards))
copy(newBoard.Boards, cur.Board.Boards)
newBoard.Revboards = make([]string, len(cur.Board.Revboards))
copy(newBoard.Revboards, cur.Board.Revboards)
newAut.Board = &newBoard newAut.Board = &newBoard
} }
if cur.VoteResult != nil { if cur.VoteResult != nil {
......
This diff is collapsed.
...@@ -105,7 +105,6 @@ func (a *Autonomy) Exec_CommentProp(payload *auty.Comment, tx *types.Transaction ...@@ -105,7 +105,6 @@ func (a *Autonomy) Exec_CommentProp(payload *auty.Comment, tx *types.Transaction
return action.commentProp(payload) return action.commentProp(payload)
} }
// 提案修改董事会成员相关 // 提案修改董事会成员相关
// Exec_PropChange 创建提案规则 // Exec_PropChange 创建提案规则
...@@ -130,4 +129,4 @@ func (a *Autonomy) Exec_VotePropChange(payload *auty.VoteProposalChange, tx *typ ...@@ -130,4 +129,4 @@ func (a *Autonomy) Exec_VotePropChange(payload *auty.VoteProposalChange, tx *typ
func (a *Autonomy) Exec_TmintPropChange(payload *auty.TerminateProposalChange, tx *types.Transaction, index int) (*types.Receipt, error) { func (a *Autonomy) Exec_TmintPropChange(payload *auty.TerminateProposalChange, tx *types.Transaction, index int) (*types.Receipt, error) {
action := newAction(a, tx, int32(index)) action := newAction(a, tx, int32(index))
return action.tmintPropChange(payload) return action.tmintPropChange(payload)
} }
\ No newline at end of file
...@@ -85,7 +85,6 @@ func (a *Autonomy) ExecLocal_CommentProp(payload *auty.Comment, tx *types.Transa ...@@ -85,7 +85,6 @@ func (a *Autonomy) ExecLocal_CommentProp(payload *auty.Comment, tx *types.Transa
return a.execAutoLocalCommentProp(tx, receiptData) return a.execAutoLocalCommentProp(tx, receiptData)
} }
// 提案修改董事会成员相关 // 提案修改董事会成员相关
// ExecLocal_PropChange 创建提案规则 // ExecLocal_PropChange 创建提案规则
...@@ -106,4 +105,4 @@ func (a *Autonomy) ExecLocal_VotePropChange(payload *auty.VoteProposalChange, tx ...@@ -106,4 +105,4 @@ func (a *Autonomy) ExecLocal_VotePropChange(payload *auty.VoteProposalChange, tx
// ExecLocal_TmintPropChange 终止提案规则 // ExecLocal_TmintPropChange 终止提案规则
func (a *Autonomy) ExecLocal_TmintPropChange(payload *auty.TerminateProposalChange, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) { func (a *Autonomy) ExecLocal_TmintPropChange(payload *auty.TerminateProposalChange, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
return a.execAutoLocalChange(tx, receiptData) return a.execAutoLocalChange(tx, receiptData)
} }
\ No newline at end of file
...@@ -78,4 +78,4 @@ var ( ...@@ -78,4 +78,4 @@ var (
func propChangeID(txHash string) []byte { func propChangeID(txHash string) []byte {
return []byte(fmt.Sprintf("%s%s", changePrefix, txHash)) return []byte(fmt.Sprintf("%s%s", changePrefix, txHash))
} }
\ No newline at end of file
...@@ -13,8 +13,8 @@ import ( ...@@ -13,8 +13,8 @@ import (
) )
const ( const (
maxBoardPeriodAmount = types.Coin * 10000 * 300 // 每个时期董事会审批最大额度300万 maxBoardPeriodAmount = types.Coin * 10000 * 300 // 每个时期董事会审批最大额度300万
boardPeriod = 17280 * 30 * 1 // 时期为一个月 boardPeriod = 17280 * 30 * 1 // 时期为一个月
) )
func (a *action) propProject(prob *auty.ProposalProject) (*types.Receipt, error) { func (a *action) propProject(prob *auty.ProposalProject) (*types.Receipt, error) {
...@@ -37,10 +37,10 @@ func (a *action) propProject(prob *auty.ProposalProject) (*types.Receipt, error) ...@@ -37,10 +37,10 @@ func (a *action) propProject(prob *auty.ProposalProject) (*types.Receipt, error)
} }
// 检查是否可以对已审批额度归0,如果可以则设置kv // 检查是否可以对已审批额度归0,如果可以则设置kv
var kva *types.KeyValue var kva *types.KeyValue
if a.height > pboard.StartHeight + boardPeriod { if a.height > pboard.StartHeight+boardPeriod {
pboard.StartHeight = a.height pboard.StartHeight = a.height
pboard.Amount = 0 pboard.Amount = 0
kva = &types.KeyValue{Key:activeBoardID(), Value:types.Encode(pboard)} kva = &types.KeyValue{Key: activeBoardID(), Value: types.Encode(pboard)}
} }
// 检查额度 // 检查额度
pass := a.checkPeriodAmount(pboard, prob.Amount) pass := a.checkPeriodAmount(pboard, prob.Amount)
...@@ -593,7 +593,7 @@ func (a *action) checkPeriodAmount(act *auty.ActiveBoard, amount int64) bool { ...@@ -593,7 +593,7 @@ func (a *action) checkPeriodAmount(act *auty.ActiveBoard, amount int64) bool {
if act == nil { if act == nil {
return false return false
} }
if act.Amount + amount >= maxBoardPeriodAmount { if act.Amount+amount >= maxBoardPeriodAmount {
return false return false
} }
return true return true
...@@ -604,10 +604,10 @@ func (a *action) updatePeriodAmount(amount int64) (*types.KeyValue, error) { ...@@ -604,10 +604,10 @@ func (a *action) updatePeriodAmount(amount int64) (*types.KeyValue, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
if a.height > act.StartHeight + boardPeriod { if a.height > act.StartHeight+boardPeriod {
act.StartHeight = a.height act.StartHeight = a.height
act.Amount = 0 act.Amount = 0
} }
act.Amount += amount act.Amount += amount
return &types.KeyValue{Key:activeBoardID(), Value:types.Encode(act)}, nil return &types.KeyValue{Key: activeBoardID(), Value: types.Encode(act)}, nil
} }
\ No newline at end of file
...@@ -52,4 +52,4 @@ func (a *Autonomy) Query_GetProposalChange(in *types.ReqString) (types.Message, ...@@ -52,4 +52,4 @@ func (a *Autonomy) Query_GetProposalChange(in *types.ReqString) (types.Message,
// Query_ListProposalChange 批量查询 // Query_ListProposalChange 批量查询
func (a *Autonomy) Query_ListProposalChange(in *auty.ReqQueryProposalChange) (types.Message, error) { func (a *Autonomy) Query_ListProposalChange(in *auty.ReqQueryProposalChange) (types.Message, error) {
return a.listProposalChange(in) return a.listProposalChange(in)
} }
\ No newline at end of file
...@@ -9,8 +9,8 @@ import ( ...@@ -9,8 +9,8 @@ import (
"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"
"github.com/33cn/chain33/system/dapp"
"github.com/33cn/chain33/common/address" "github.com/33cn/chain33/common/address"
"github.com/33cn/chain33/system/dapp"
) )
const ( const (
...@@ -19,37 +19,36 @@ const ( ...@@ -19,37 +19,36 @@ const (
// 最大董事会赞成率 // 最大董事会赞成率
maxBoardApproveRatio = 66 maxBoardApproveRatio = 66
// 最小全体持票人否决率 // 最小全体持票人否决率
minPubOpposeRatio = 33 minPubOpposeRatio = 33
// 最大全体持票人否决率 // 最大全体持票人否决率
maxPubOpposeRatio = 50 maxPubOpposeRatio = 50
// 最小公示周期 // 最小公示周期
minPublicPeriod int32 = 17280 * 7 minPublicPeriod int32 = 17280 * 7
// 最大公示周期 // 最大公示周期
maxPublicPeriod int32 = 17280 * 14 maxPublicPeriod int32 = 17280 * 14
// 最小重大项目阈值 // 最小重大项目阈值
minLargeProjectAmount = types.Coin * 100 * 10000 minLargeProjectAmount = types.Coin * 100 * 10000
// 最大重大项目阈值 // 最大重大项目阈值
maxLargeProjectAmount = types.Coin * 300 * 10000 maxLargeProjectAmount = types.Coin * 300 * 10000
// 最小提案金 // 最小提案金
minProposalAmount = types.Coin * 20 minProposalAmount = types.Coin * 20
// 最大提案金 // 最大提案金
maxProposalAmount = types.Coin * 2000 maxProposalAmount = types.Coin * 2000
) )
func (a *action) propRule(prob *auty.ProposalRule) (*types.Receipt, error) { func (a *action) propRule(prob *auty.ProposalRule) (*types.Receipt, error) {
//如果全小于等于0,则说明该提案规则参数不正确 //如果全小于等于0,则说明该提案规则参数不正确
if prob.RuleCfg == nil || prob.RuleCfg.BoardApproveRatio <= 0 && prob.RuleCfg.PubOpposeRatio <= 0 && if prob.RuleCfg == nil || prob.RuleCfg.BoardApproveRatio <= 0 && prob.RuleCfg.PubOpposeRatio <= 0 &&
prob.RuleCfg.ProposalAmount <= 0 && prob.RuleCfg.LargeProjectAmount <= 0 && prob.RuleCfg.PublicPeriod <= 0{ prob.RuleCfg.ProposalAmount <= 0 && prob.RuleCfg.LargeProjectAmount <= 0 && prob.RuleCfg.PublicPeriod <= 0 {
alog.Error("propRule ", "ProposalRule RuleCfg invaild or have no modify param", prob.RuleCfg) alog.Error("propRule ", "ProposalRule RuleCfg invaild or have no modify param", prob.RuleCfg)
return nil, types.ErrInvalidParam return nil, types.ErrInvalidParam
} }
if prob.RuleCfg.BoardApproveRatio > maxBoardApproveRatio || prob.RuleCfg.BoardApproveRatio < minBoardApproveRatio || if prob.RuleCfg.BoardApproveRatio > maxBoardApproveRatio || prob.RuleCfg.BoardApproveRatio < minBoardApproveRatio ||
prob.RuleCfg.PubOpposeRatio > maxPubOpposeRatio || prob.RuleCfg.PubOpposeRatio < minPubOpposeRatio || prob.RuleCfg.PubOpposeRatio > maxPubOpposeRatio || prob.RuleCfg.PubOpposeRatio < minPubOpposeRatio ||
prob.RuleCfg.PublicPeriod > maxPublicPeriod || prob.RuleCfg.PublicPeriod < minPublicPeriod || prob.RuleCfg.PublicPeriod > maxPublicPeriod || prob.RuleCfg.PublicPeriod < minPublicPeriod ||
prob.RuleCfg.LargeProjectAmount > maxLargeProjectAmount || prob.RuleCfg.LargeProjectAmount < minLargeProjectAmount || prob.RuleCfg.LargeProjectAmount > maxLargeProjectAmount || prob.RuleCfg.LargeProjectAmount < minLargeProjectAmount ||
prob.RuleCfg.ProposalAmount > maxProposalAmount || prob.RuleCfg.ProposalAmount < minProposalAmount{ prob.RuleCfg.ProposalAmount > maxProposalAmount || prob.RuleCfg.ProposalAmount < minProposalAmount {
alog.Error("propRule RuleCfg invaild", "ruleCfg", prob.RuleCfg) alog.Error("propRule RuleCfg invaild", "ruleCfg", prob.RuleCfg)
return nil, types.ErrInvalidParam return nil, types.ErrInvalidParam
} }
if prob.StartBlockHeight < a.height || prob.EndBlockHeight < a.height { if prob.StartBlockHeight < a.height || prob.EndBlockHeight < a.height {
......
...@@ -23,9 +23,9 @@ import ( ...@@ -23,9 +23,9 @@ import (
const ( const (
testBoardApproveRatio int32 = 60 testBoardApproveRatio int32 = 60
testPubOpposeRatio int32 = 35 testPubOpposeRatio int32 = 35
testProposalAmount = minProposalAmount * 2 testProposalAmount = minProposalAmount * 2
testLargeProjectAmount = minLargeProjectAmount * 2 testLargeProjectAmount = minLargeProjectAmount * 2
testPublicPeriod = minPublicPeriod testPublicPeriod = minPublicPeriod
) )
func TestRevokeProposalRule(t *testing.T) { func TestRevokeProposalRule(t *testing.T) {
......
...@@ -47,7 +47,7 @@ const ( ...@@ -47,7 +47,7 @@ const (
TyLogVotePropRule = 2123 TyLogVotePropRule = 2123
TyLogTmintPropRule = 2124 TyLogTmintPropRule = 2124
TyLogCommentProp = 2131 TyLogCommentProp = 2131
TyLogPropChange = 2141 TyLogPropChange = 2141
TyLogRvkPropChange = 2142 TyLogRvkPropChange = 2142
...@@ -88,8 +88,6 @@ const ( ...@@ -88,8 +88,6 @@ const (
AutonomyStatusTmintPropChange AutonomyStatusTmintPropChange
) )
const ( const (
// GetProposalBoard 用于在cmd里面的区分不同的查询 // GetProposalBoard 用于在cmd里面的区分不同的查询
GetProposalBoard = "GetProposalBoard" GetProposalBoard = "GetProposalBoard"
......
...@@ -73,9 +73,9 @@ func ParseX509CertificateToSm2(x509Cert *x509.Certificate) *sm2.Certificate { ...@@ -73,9 +73,9 @@ func ParseX509CertificateToSm2(x509Cert *x509.Certificate) *sm2.Certificate {
UnknownExtKeyUsage: x509Cert.UnknownExtKeyUsage, UnknownExtKeyUsage: x509Cert.UnknownExtKeyUsage,
BasicConstraintsValid: x509Cert.BasicConstraintsValid, BasicConstraintsValid: x509Cert.BasicConstraintsValid,
IsCA: x509Cert.IsCA, IsCA: x509Cert.IsCA,
MaxPathLen: x509Cert.MaxPathLen, MaxPathLen: x509Cert.MaxPathLen,
MaxPathLenZero: x509Cert.MaxPathLenZero, MaxPathLenZero: x509Cert.MaxPathLenZero,
SubjectKeyId: x509Cert.SubjectKeyId, SubjectKeyId: x509Cert.SubjectKeyId,
AuthorityKeyId: x509Cert.AuthorityKeyId, AuthorityKeyId: x509Cert.AuthorityKeyId,
...@@ -136,9 +136,9 @@ func ParseSm2CertificateToX509(sm2Cert *sm2.Certificate) *x509.Certificate { ...@@ -136,9 +136,9 @@ func ParseSm2CertificateToX509(sm2Cert *sm2.Certificate) *x509.Certificate {
UnknownExtKeyUsage: sm2Cert.UnknownExtKeyUsage, UnknownExtKeyUsage: sm2Cert.UnknownExtKeyUsage,
BasicConstraintsValid: sm2Cert.BasicConstraintsValid, BasicConstraintsValid: sm2Cert.BasicConstraintsValid,
IsCA: sm2Cert.IsCA, IsCA: sm2Cert.IsCA,
MaxPathLen: sm2Cert.MaxPathLen, MaxPathLen: sm2Cert.MaxPathLen,
MaxPathLenZero: sm2Cert.MaxPathLenZero, MaxPathLenZero: sm2Cert.MaxPathLenZero,
SubjectKeyId: sm2Cert.SubjectKeyId, SubjectKeyId: sm2Cert.SubjectKeyId,
AuthorityKeyId: sm2Cert.AuthorityKeyId, AuthorityKeyId: sm2Cert.AuthorityKeyId,
......
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