github.com/elastos/Elastos.ELA.SideChain.ETH@v0.2.2/dpos/proposal.go (about) 1 // Copyright (c) 2017-2019 The Elastos Foundation 2 // Use of this source code is governed by an MIT 3 // license that can be found in the LICENSE file. 4 // 5 6 package dpos 7 8 import ( 9 "github.com/elastos/Elastos.ELA/common" 10 "github.com/elastos/Elastos.ELA/core/types/payload" 11 "github.com/elastos/Elastos.ELA/crypto" 12 "github.com/elastos/Elastos.ELA/dpos/account" 13 ) 14 15 func StartProposal(ac account.Account, blockHash common.Uint256, viewOffset uint32) (*payload.DPOSProposal, error) { 16 Info("[StartProposal] start") 17 defer Info("[StartProposal] end") 18 proposal := &payload.DPOSProposal{Sponsor: ac.PublicKeyBytes(), 19 BlockHash: blockHash, ViewOffset: viewOffset} 20 sign, err := ac.SignProposal(proposal) 21 if err != nil { 22 Error("[StartProposal] start proposal failed:", err.Error()) 23 return nil, err 24 } 25 Info("[StartProposal] hash:", proposal.Hash().String()) 26 proposal.Sign = sign 27 28 return proposal, nil 29 } 30 31 func CheckProposal(proposal *payload.DPOSProposal) error { 32 pk, err := crypto.DecodePoint(proposal.Sponsor) 33 if err != nil { 34 Error("[CheckProposal] decode signer "+"error, details: ", err) 35 return err 36 } 37 38 if err := crypto.Verify(*pk, proposal.Data(), proposal.Sign); err != nil { 39 Error("[CheckProposal] sign verify "+"error, details: ", err) 40 return err 41 } 42 return nil 43 }