+
+ data, err = json.Marshal(&dpos.VoteForgerData{Forgers: a.Forgers})
+ if err != nil {
+ return err
+ }
+ op = vm.OP_VOTE
+ case types.CancelVote:
+ if len(a.Forgers) == 0 {
+ return errors.New("Forgers is null for dpos CancelVote")
+ }
+ if a.Amount < consensus.CancelVoteForgerFee {
+ return errors.New("The transaction fee is 10000000 for dpos Registe")
+ }
+
+ for _, forger := range a.Forgers {
+ if !dpos.GDpos.HaveVote(a.Address, forger) {
+ return fmt.Errorf("delegate name: %s is not voted", forger)
+ }
+ }
+
+ data, err = json.Marshal(&dpos.CancelVoteForgerData{Forgers: a.Forgers})
+ if err != nil {
+ return err
+ }
+ op = vm.OP_REVOKE
+ }
+
+ msg := dpos.DposMsg{
+ Type: op,
+ Data: data,
+ }
+
+ referenceData, err = json.Marshal(&msg)
+ if err != nil {
+ return err