parent
8f2f64551e
commit
de780db219
@ -1,74 +0,0 @@ |
||||
package identitychain |
||||
|
||||
import ( |
||||
"bytes" |
||||
"crypto/sha256" |
||||
"encoding/gob" |
||||
"log" |
||||
"time" |
||||
|
||||
"github.com/simple-rules/harmony-benchmark/node" |
||||
"github.com/simple-rules/harmony-benchmark/utils" |
||||
) |
||||
|
||||
// IdentityBlock has the information of one node
|
||||
type IdentityBlock struct { |
||||
Timestamp int64 |
||||
PrevBlockHash [32]byte |
||||
NumIdentities int32 |
||||
Identities []*node.Node |
||||
} |
||||
|
||||
// Serialize serializes the block
|
||||
func (b *IdentityBlock) Serialize() []byte { |
||||
var result bytes.Buffer |
||||
encoder := gob.NewEncoder(&result) |
||||
err := encoder.Encode(b) |
||||
if err != nil { |
||||
log.Panic(err) |
||||
} |
||||
return result.Bytes() |
||||
} |
||||
|
||||
// GetIdentities returns a list of identities.
|
||||
func (b *IdentityBlock) GetIdentities() []*node.Node { |
||||
return b.Identities |
||||
} |
||||
|
||||
// DeserializeBlock deserializes a block
|
||||
func DeserializeBlock(d []byte) *IdentityBlock { |
||||
var block IdentityBlock |
||||
decoder := gob.NewDecoder(bytes.NewReader(d)) |
||||
err := decoder.Decode(&block) |
||||
if err != nil { |
||||
log.Panic(err) |
||||
} |
||||
return &block |
||||
} |
||||
|
||||
// NewBlock creates and returns a new block.
|
||||
func NewBlock(Identities []*node.Node, prevBlockHash [32]byte) *IdentityBlock { |
||||
block := &IdentityBlock{Timestamp: time.Now().Unix(), PrevBlockHash: prevBlockHash, NumIdentities: int32(len(Identities)), Identities: Identities} |
||||
return block |
||||
} |
||||
|
||||
// CalculateBlockHash returns a hash of the block
|
||||
func (b *IdentityBlock) CalculateBlockHash() [32]byte { |
||||
var hashes [][]byte |
||||
var blockHash [32]byte |
||||
hashes = append(hashes, utils.ConvertFixedDataIntoByteArray(b.Timestamp)) |
||||
hashes = append(hashes, b.PrevBlockHash[:]) |
||||
for _, id := range b.Identities { |
||||
hashes = append(hashes, utils.ConvertFixedDataIntoByteArray(id)) |
||||
} |
||||
hashes = append(hashes, utils.ConvertFixedDataIntoByteArray(b.NumIdentities)) |
||||
blockHash = sha256.Sum256(bytes.Join(hashes, []byte{})) |
||||
return blockHash |
||||
} |
||||
|
||||
// NewGenesisBlock creates and returns genesis Block.
|
||||
func NewGenesisBlock() *IdentityBlock { |
||||
var Ids []*node.Node |
||||
block := &IdentityBlock{Timestamp: time.Now().Unix(), PrevBlockHash: [32]byte{}, NumIdentities: 1, Identities: Ids} |
||||
return block |
||||
} |
Loading…
Reference in new issue