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  }