package test
import (
- "github.com/vapor/mining/tensority"
+ "encoding/hex"
+
+ "github.com/vapor/consensus"
+ "github.com/vapor/crypto"
+ "github.com/vapor/crypto/ed25519/chainkd"
+ "github.com/vapor/errors"
"github.com/vapor/protocol"
"github.com/vapor/protocol/bc"
"github.com/vapor/protocol/bc/types"
"github.com/vapor/protocol/validation"
"github.com/vapor/protocol/vm"
+ "github.com/vapor/protocol/vm/vmutil"
)
// NewBlock create block according to the current status of chain
}
preBlockHeader := chain.BestBlockHeader()
- preBlockHash := preBlockHeader.Hash()
- nextBits, err := chain.CalcNextBits(&preBlockHash)
- if err != nil {
- return nil, err
- }
b := &types.Block{
BlockHeader: types.BlockHeader{
PreviousBlockHash: preBlockHeader.Hash(),
Timestamp: preBlockHeader.Timestamp + 1,
BlockCommitment: types.BlockCommitment{},
- Bits: nextBits,
},
Transactions: []*types.Tx{nil},
}
}
b.TransactionStatusHash, err = types.TxStatusMerkleRoot(txStatus.VerifyStatus)
+ proof, err := generateProof(*b)
+ if err != nil {
+ return nil, err
+ }
+ b.Proof = proof
return b, err
}
+func generateProof(block types.Block) (types.Proof, error) {
+ var xPrv chainkd.XPrv
+ if consensus.ActiveNetParams.Signer == "" {
+ return types.Proof{}, errors.New("Signer is empty")
+ }
+ xPrv.UnmarshalText([]byte(consensus.ActiveNetParams.Signer))
+ sign := xPrv.Sign(block.BlockCommitment.TransactionsMerkleRoot.Bytes())
+ pubHash := crypto.Ripemd160(xPrv.XPub().PublicKey())
+ control, err := vmutil.P2WPKHProgram([]byte(pubHash))
+ if err != nil {
+ return types.Proof{}, err
+ }
+ return types.Proof{Sign: sign, ControlProgram: control}, nil
+}
+
// ReplaceCoinbase replace the coinbase tx of block with coinbaseTx
func ReplaceCoinbase(block *types.Block, coinbaseTx *types.Tx) (err error) {
block.Transactions[0] = coinbaseTx
return nil
}
+func setAuthoritys(chain *protocol.Chain) {
+ authoritys := make(map[string]string)
+ xpubStr := "96bc2ad4b1c2db399990c811c4367688cbb7867612bb9d04e4dc7848e425c6395264d3b177a96646bc0ce517ae7fd63504c183ab6d330dea184331a4cf5912d5"
+ var xpub chainkd.XPub
+ xpub.UnmarshalText([]byte(xpubStr))
+
+ pubHash := crypto.Ripemd160(xpub.PublicKey())
+ control, _ := vmutil.P2WPKHProgram([]byte(pubHash))
+ key := hex.EncodeToString(control)
+ authoritys[key] = xpub.String()
+
+ chain.SetAuthoritys(authoritys)
+}
+
// SolveAndUpdate solve difficulty and update chain status
func SolveAndUpdate(chain *protocol.Chain, block *types.Block) error {
- seed, err := chain.CalcNextSeed(&block.PreviousBlockHash)
- if err != nil {
- return err
- }
- Solve(seed, block)
- _, err = chain.ProcessBlock(block)
+ _, err := chain.ProcessBlock(block)
return err
}
-
-// Solve simulate solve difficulty by add result to cache
-func Solve(seed *bc.Hash, block *types.Block) {
- hash := block.BlockHeader.Hash()
- tensority.AIHash.AddCache(&hash, seed, &bc.Hash{})
-}