CreateRandomBlock create a new random block
(parent hash.Hash, isGenesis bool)
| 57 | |
| 58 | // CreateRandomBlock create a new random block |
| 59 | func CreateRandomBlock(parent hash.Hash, isGenesis bool) (b *Block, err error) { |
| 60 | // Generate key pair |
| 61 | priv, _, err := asymmetric.GenSecp256k1KeyPair() |
| 62 | |
| 63 | if err != nil { |
| 64 | return |
| 65 | } |
| 66 | |
| 67 | h := hash.Hash{} |
| 68 | rand.Read(h[:]) |
| 69 | |
| 70 | b = &Block{ |
| 71 | SignedHeader: SignedHeader{ |
| 72 | Header: Header{ |
| 73 | Version: 0x01000000, |
| 74 | Producer: proto.NodeID(h.String()), |
| 75 | GenesisHash: genesisHash, |
| 76 | ParentHash: parent, |
| 77 | Timestamp: time.Now().UTC(), |
| 78 | }, |
| 79 | }, |
| 80 | } |
| 81 | |
| 82 | if isGenesis { |
| 83 | emptyNode := &proto.RawNodeID{} |
| 84 | b.SignedHeader.ParentHash = hash.Hash{} |
| 85 | b.SignedHeader.GenesisHash = hash.Hash{} |
| 86 | b.SignedHeader.Producer = emptyNode.ToNodeID() |
| 87 | b.SignedHeader.MerkleRoot = hash.Hash{} |
| 88 | |
| 89 | err = b.PackAsGenesis() |
| 90 | return |
| 91 | } |
| 92 | |
| 93 | err = b.PackAndSignBlock(priv) |
| 94 | return |
| 95 | } |