From 73d1ca6258f52ffcad0200d5dbd01d9e1d733562 Mon Sep 17 00:00:00 2001
From: Jonas Theis <mail@jonastheis.de>
Date: Sat, 28 Mar 2020 01:36:17 +0100
Subject: [PATCH] Integrate uniform node identity  (#304)

* Move marshalutil to hive.go

* Refactor existing code (before binary) to use new hive.go/identity #282

* Adjust binary code to use hive.go/identity and remove signature/ed25519 #282

* Adjust moved files from merge to use hive.go/marshalutil

* Adjust moved files from merge to use hive.go/identity and hive.go/crypto

* Adjust for changes in hive.go

* Fix: fixed a bug due to refactor

Co-authored-by: Hans Moog <hm@mkjc.net>
---
 .../binary/messagelayer/message/message.go    | 33 +++++-------
 .../binary/messagelayer/tangle/tangle_test.go | 12 +++--
 .../messagelayer/test/transaction_test.go     | 11 ++--
 .../tipselector/tipselector_test.go           | 11 ++--
 .../transactionparser_test.go                 | 11 ++--
 packages/binary/signature/ed25119/ed25119.go  | 18 -------
 packages/binary/signature/ed25119/key_pair.go |  6 ---
 .../binary/signature/ed25119/private_key.go   | 31 -----------
 .../binary/signature/ed25119/public_key.go    | 53 -------------------
 .../binary/signature/ed25119/signature.go     | 48 -----------------
 packages/binary/spammer/spammer.go            | 34 +++++++++---
 .../binary/valuetransfer/address/address.go   |  5 +-
 .../address/signaturescheme/ed25519.go        | 20 +++----
 .../valuetransfer/payload/payload_test.go     | 12 +++--
 .../valuetransfer/tangle/tangle_test.go       |  6 +--
 .../transaction/signatures_test.go            |  6 +--
 packages/gossip/manager.go                    | 30 ++++++-----
 packages/gossip/neighbor_test.go              | 11 ++--
 packages/gossip/server/server.go              | 34 ++++++------
 packages/gossip/server/server_test.go         |  4 +-
 plugins/autopeering/autopeering.go            | 17 ++++--
 plugins/spa/explorer_routes.go                |  4 +-
 plugins/webapi/getNeighbors/plugin.go         |  6 +--
 23 files changed, 156 insertions(+), 267 deletions(-)
 delete mode 100644 packages/binary/signature/ed25119/ed25119.go
 delete mode 100644 packages/binary/signature/ed25119/key_pair.go
 delete mode 100644 packages/binary/signature/ed25119/private_key.go
 delete mode 100644 packages/binary/signature/ed25119/public_key.go
 delete mode 100644 packages/binary/signature/ed25119/signature.go

diff --git a/packages/binary/messagelayer/message/message.go b/packages/binary/messagelayer/message/message.go
index 7bd44f50..26064030 100644
--- a/packages/binary/messagelayer/message/message.go
+++ b/packages/binary/messagelayer/message/message.go
@@ -4,16 +4,15 @@ import (
 	"sync"
 	"time"
 
+	"github.com/iotaledger/hive.go/crypto/ed25519"
+	"github.com/iotaledger/hive.go/identity"
 	"github.com/iotaledger/hive.go/marshalutil"
 	"github.com/iotaledger/hive.go/objectstorage"
 	"github.com/iotaledger/hive.go/stringify"
-
-	"github.com/iotaledger/goshimmer/packages/binary/messagelayer/payload"
-	"github.com/iotaledger/goshimmer/packages/binary/signature/ed25119"
-
 	"github.com/mr-tron/base58"
-
 	"golang.org/x/crypto/blake2b"
+
+	"github.com/iotaledger/goshimmer/packages/binary/messagelayer/payload"
 )
 
 // region Message //////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -25,13 +24,13 @@ type Message struct {
 	// core properties (they are part of the transaction when being sent)
 	trunkTransactionId  Id
 	branchTransactionId Id
-	issuerPublicKey     ed25119.PublicKey
+	issuerPublicKey     ed25519.PublicKey
 	issuingTime         time.Time
 	sequenceNumber      uint64
 	payload             payload.Payload
 	bytes               []byte
 	bytesMutex          sync.RWMutex
-	signature           ed25119.Signature
+	signature           ed25519.Signature
 	signatureMutex      sync.RWMutex
 
 	// derived properties
@@ -41,20 +40,20 @@ type Message struct {
 	payloadIdMutex sync.RWMutex
 
 	// only stored on the machine of the signer
-	issuerPrivateKey ed25119.PrivateKey
+	issuerLocalIdentity *identity.LocalIdentity
 }
 
 // New creates a new transaction with the details provided by the issuer.
-func New(trunkTransactionId Id, branchTransactionId Id, issuerKeyPair ed25119.KeyPair, issuingTime time.Time, sequenceNumber uint64, payload payload.Payload) (result *Message) {
+func New(trunkTransactionId Id, branchTransactionId Id, issuerPublicKey ed25519.PublicKey, issuingTime time.Time, sequenceNumber uint64, payload payload.Payload, localIdentity *identity.LocalIdentity) (result *Message) {
 	return &Message{
 		trunkTransactionId:  trunkTransactionId,
 		branchTransactionId: branchTransactionId,
-		issuerPublicKey:     issuerKeyPair.PublicKey,
+		issuerPublicKey:     issuerPublicKey,
 		issuingTime:         issuingTime,
 		sequenceNumber:      sequenceNumber,
 		payload:             payload,
 
-		issuerPrivateKey: issuerKeyPair.PrivateKey,
+		issuerLocalIdentity: localIdentity,
 	}
 }
 
@@ -124,7 +123,7 @@ func (transaction *Message) VerifySignature() (result bool) {
 	transactionBytes := transaction.Bytes()
 
 	transaction.signatureMutex.RLock()
-	result = transaction.issuerPublicKey.VerifySignature(transactionBytes[:len(transactionBytes)-ed25119.SignatureSize], transaction.signature)
+	result = transaction.issuerPublicKey.VerifySignature(transactionBytes[:len(transactionBytes)-ed25519.SignatureSize], transaction.signature)
 	transaction.signatureMutex.RUnlock()
 
 	return
@@ -246,7 +245,7 @@ func (transaction *Message) Bytes() []byte {
 	marshalUtil.WriteTime(transaction.issuingTime)
 	marshalUtil.WriteUint64(transaction.sequenceNumber)
 	marshalUtil.WriteBytes(transaction.payload.Bytes())
-	marshalUtil.WriteBytes(transaction.issuerPrivateKey.Sign(marshalUtil.Bytes()).Bytes())
+	marshalUtil.WriteBytes(transaction.issuerLocalIdentity.Sign(marshalUtil.Bytes()).Bytes())
 
 	return marshalUtil.Bytes()
 }
@@ -262,9 +261,7 @@ func (transaction *Message) UnmarshalObjectStorageValue(data []byte) (err error,
 	if transaction.branchTransactionId, err = ParseId(marshalUtil); err != nil {
 		return
 	}
-	if transaction.issuerPublicKey, err = ed25119.ParsePublicKey(marshalUtil); err != nil {
-		return
-	}
+	// TODO PARSE PUBLIC KEY
 	if transaction.issuingTime, err = marshalUtil.ReadTime(); err != nil {
 		return
 	}
@@ -274,9 +271,7 @@ func (transaction *Message) UnmarshalObjectStorageValue(data []byte) (err error,
 	if transaction.payload, err = payload.Parse(marshalUtil); err != nil {
 		return
 	}
-	if transaction.signature, err = ed25119.ParseSignature(marshalUtil); err != nil {
-		return
-	}
+	// TODO PARSE SIGNATURE
 
 	// return the number of bytes we processed
 	consumedBytes = marshalUtil.ReadOffset()
diff --git a/packages/binary/messagelayer/tangle/tangle_test.go b/packages/binary/messagelayer/tangle/tangle_test.go
index 40a263f6..b8ca0521 100644
--- a/packages/binary/messagelayer/tangle/tangle_test.go
+++ b/packages/binary/messagelayer/tangle/tangle_test.go
@@ -8,11 +8,11 @@ import (
 	"time"
 
 	"github.com/iotaledger/hive.go/events"
+	"github.com/iotaledger/hive.go/identity"
 	"github.com/stretchr/testify/require"
 
 	"github.com/iotaledger/goshimmer/packages/binary/messagelayer/message"
 	"github.com/iotaledger/goshimmer/packages/binary/messagelayer/payload"
-	"github.com/iotaledger/goshimmer/packages/binary/signature/ed25119"
 	"github.com/iotaledger/goshimmer/packages/database"
 	"github.com/iotaledger/goshimmer/plugins/config"
 )
@@ -31,11 +31,11 @@ func BenchmarkTangle_AttachTransaction(b *testing.B) {
 		return
 	}
 
-	testIdentity := ed25119.GenerateKeyPair()
+	testIdentity := identity.GenerateLocalIdentity()
 
 	transactionBytes := make([]*message.Message, b.N)
 	for i := 0; i < b.N; i++ {
-		transactionBytes[i] = message.New(message.EmptyId, message.EmptyId, testIdentity, time.Now(), 0, payload.NewData([]byte("some data")))
+		transactionBytes[i] = message.New(message.EmptyId, message.EmptyId, testIdentity.PublicKey(), time.Now(), 0, payload.NewData([]byte("some data")), testIdentity)
 		transactionBytes[i].Bytes()
 	}
 
@@ -90,8 +90,10 @@ func TestTangle_AttachTransaction(t *testing.T) {
 		fmt.Println("REMOVED:", transactionId)
 	}))
 
-	newTransaction1 := message.New(message.EmptyId, message.EmptyId, ed25119.GenerateKeyPair(), time.Now(), 0, payload.NewData([]byte("some data")))
-	newTransaction2 := message.New(newTransaction1.GetId(), newTransaction1.GetId(), ed25119.GenerateKeyPair(), time.Now(), 0, payload.NewData([]byte("some other data")))
+	localIdentity1 := identity.GenerateLocalIdentity()
+	localIdentity2 := identity.GenerateLocalIdentity()
+	newTransaction1 := message.New(message.EmptyId, message.EmptyId, localIdentity1.PublicKey(), time.Now(), 0, payload.NewData([]byte("some data")), localIdentity1)
+	newTransaction2 := message.New(newTransaction1.GetId(), newTransaction1.GetId(), localIdentity2.PublicKey(), time.Now(), 0, payload.NewData([]byte("some other data")), localIdentity2)
 
 	messageTangle.AttachMessage(newTransaction2)
 
diff --git a/packages/binary/messagelayer/test/transaction_test.go b/packages/binary/messagelayer/test/transaction_test.go
index 6881c27c..e5b913cd 100644
--- a/packages/binary/messagelayer/test/transaction_test.go
+++ b/packages/binary/messagelayer/test/transaction_test.go
@@ -7,21 +7,22 @@ import (
 	"time"
 
 	"github.com/iotaledger/hive.go/async"
-
+	"github.com/iotaledger/hive.go/identity"
 	"github.com/panjf2000/ants/v2"
 
 	"github.com/iotaledger/goshimmer/packages/binary/messagelayer/message"
 	"github.com/iotaledger/goshimmer/packages/binary/messagelayer/payload"
-	"github.com/iotaledger/goshimmer/packages/binary/signature/ed25119"
 )
 
 func BenchmarkVerifyDataTransactions(b *testing.B) {
 	var pool async.WorkerPool
 	pool.Tune(runtime.NumCPU() * 2)
 
+	localIdentity := identity.GenerateLocalIdentity()
+
 	transactions := make([][]byte, b.N)
 	for i := 0; i < b.N; i++ {
-		tx := message.New(message.EmptyId, message.EmptyId, ed25119.GenerateKeyPair(), time.Now(), 0, payload.NewData([]byte("some data")))
+		tx := message.New(message.EmptyId, message.EmptyId, localIdentity.PublicKey(), time.Now(), 0, payload.NewData([]byte("some data")), localIdentity)
 
 		transactions[i] = tx.Bytes()
 	}
@@ -45,9 +46,11 @@ func BenchmarkVerifyDataTransactions(b *testing.B) {
 func BenchmarkVerifySignature(b *testing.B) {
 	pool, _ := ants.NewPool(80, ants.WithNonblocking(false))
 
+	localIdentity := identity.GenerateLocalIdentity()
+
 	transactions := make([]*message.Message, b.N)
 	for i := 0; i < b.N; i++ {
-		transactions[i] = message.New(message.EmptyId, message.EmptyId, ed25119.GenerateKeyPair(), time.Now(), 0, payload.NewData([]byte("test")))
+		transactions[i] = message.New(message.EmptyId, message.EmptyId, localIdentity.PublicKey(), time.Now(), 0, payload.NewData([]byte("test")), localIdentity)
 		transactions[i].Bytes()
 	}
 
diff --git a/packages/binary/messagelayer/tipselector/tipselector_test.go b/packages/binary/messagelayer/tipselector/tipselector_test.go
index 9adda6fc..929d515c 100644
--- a/packages/binary/messagelayer/tipselector/tipselector_test.go
+++ b/packages/binary/messagelayer/tipselector/tipselector_test.go
@@ -4,11 +4,11 @@ import (
 	"testing"
 	"time"
 
+	"github.com/iotaledger/hive.go/identity"
 	"github.com/stretchr/testify/assert"
 
 	"github.com/iotaledger/goshimmer/packages/binary/messagelayer/message"
 	"github.com/iotaledger/goshimmer/packages/binary/messagelayer/payload"
-	"github.com/iotaledger/goshimmer/packages/binary/signature/ed25119"
 )
 
 func Test(t *testing.T) {
@@ -21,7 +21,8 @@ func Test(t *testing.T) {
 	assert.Equal(t, message.EmptyId, branch1)
 
 	// create a transaction and attach it
-	transaction1 := message.New(trunk1, branch1, ed25119.GenerateKeyPair(), time.Now(), 0, payload.NewData([]byte("testtransaction")))
+	localIdentity1 := identity.GenerateLocalIdentity()
+	transaction1 := message.New(trunk1, branch1, localIdentity1.PublicKey(), time.Now(), 0, payload.NewData([]byte("testtransaction")), localIdentity1)
 	tipSelector.AddTip(transaction1)
 
 	// check if the tip shows up in the tip count
@@ -33,15 +34,17 @@ func Test(t *testing.T) {
 	assert.Equal(t, transaction1.GetId(), branch2)
 
 	// create a 2nd transaction and attach it
-	transaction2 := message.New(message.EmptyId, message.EmptyId, ed25119.GenerateKeyPair(), time.Now(), 0, payload.NewData([]byte("testtransaction")))
+	localIdentity2 := identity.GenerateLocalIdentity()
+	transaction2 := message.New(message.EmptyId, message.EmptyId, localIdentity2.PublicKey(), time.Now(), 0, payload.NewData([]byte("testtransaction")), localIdentity2)
 	tipSelector.AddTip(transaction2)
 
 	// check if the tip shows up in the tip count
 	assert.Equal(t, 2, tipSelector.GetTipCount())
 
 	// attach a transaction to our two tips
+	localIdentity3 := identity.GenerateLocalIdentity()
 	trunk3, branch3 := tipSelector.GetTips()
-	transaction3 := message.New(trunk3, branch3, ed25119.GenerateKeyPair(), time.Now(), 0, payload.NewData([]byte("testtransaction")))
+	transaction3 := message.New(trunk3, branch3, localIdentity3.PublicKey(), time.Now(), 0, payload.NewData([]byte("testtransaction")), localIdentity3)
 	tipSelector.AddTip(transaction3)
 
 	// check if the tip shows replaces the current tips
diff --git a/packages/binary/messagelayer/transactionparser/transactionparser_test.go b/packages/binary/messagelayer/transactionparser/transactionparser_test.go
index eb0c4af4..b1493d5c 100644
--- a/packages/binary/messagelayer/transactionparser/transactionparser_test.go
+++ b/packages/binary/messagelayer/transactionparser/transactionparser_test.go
@@ -7,14 +7,15 @@ import (
 	"time"
 
 	"github.com/iotaledger/hive.go/events"
+	"github.com/iotaledger/hive.go/identity"
 
 	"github.com/iotaledger/goshimmer/packages/binary/messagelayer/message"
 	"github.com/iotaledger/goshimmer/packages/binary/messagelayer/payload"
-	"github.com/iotaledger/goshimmer/packages/binary/signature/ed25119"
 )
 
 func BenchmarkTransactionParser_ParseBytesSame(b *testing.B) {
-	txBytes := message.New(message.EmptyId, message.EmptyId, ed25119.GenerateKeyPair(), time.Now(), 0, payload.NewData([]byte("Test"))).Bytes()
+	localIdentity := identity.GenerateLocalIdentity()
+	txBytes := message.New(message.EmptyId, message.EmptyId, localIdentity.PublicKey(), time.Now(), 0, payload.NewData([]byte("Test")), localIdentity).Bytes()
 	txParser := New()
 
 	b.ResetTimer()
@@ -28,8 +29,9 @@ func BenchmarkTransactionParser_ParseBytesSame(b *testing.B) {
 
 func BenchmarkTransactionParser_ParseBytesDifferent(b *testing.B) {
 	transactionBytes := make([][]byte, b.N)
+	localIdentity := identity.GenerateLocalIdentity()
 	for i := 0; i < b.N; i++ {
-		transactionBytes[i] = message.New(message.EmptyId, message.EmptyId, ed25119.GenerateKeyPair(), time.Now(), 0, payload.NewData([]byte("Test"+strconv.Itoa(i)))).Bytes()
+		transactionBytes[i] = message.New(message.EmptyId, message.EmptyId, localIdentity.PublicKey(), time.Now(), 0, payload.NewData([]byte("Test"+strconv.Itoa(i))), localIdentity).Bytes()
 	}
 
 	txParser := New()
@@ -44,7 +46,8 @@ func BenchmarkTransactionParser_ParseBytesDifferent(b *testing.B) {
 }
 
 func TestTransactionParser_ParseTransaction(t *testing.T) {
-	tx := message.New(message.EmptyId, message.EmptyId, ed25119.GenerateKeyPair(), time.Now(), 0, payload.NewData([]byte("Test")))
+	localIdentity := identity.GenerateLocalIdentity()
+	tx := message.New(message.EmptyId, message.EmptyId, localIdentity.PublicKey(), time.Now(), 0, payload.NewData([]byte("Test")), localIdentity)
 
 	txParser := New()
 	txParser.Parse(tx.Bytes(), nil)
diff --git a/packages/binary/signature/ed25119/ed25119.go b/packages/binary/signature/ed25119/ed25119.go
deleted file mode 100644
index d4b65997..00000000
--- a/packages/binary/signature/ed25119/ed25119.go
+++ /dev/null
@@ -1,18 +0,0 @@
-package ed25119
-
-import (
-	"crypto/rand"
-
-	"github.com/oasislabs/ed25519"
-)
-
-func GenerateKeyPair() (keyPair KeyPair) {
-	if public, private, err := ed25519.GenerateKey(rand.Reader); err != nil {
-		panic(err)
-	} else {
-		copy(keyPair.PrivateKey[:], private)
-		copy(keyPair.PublicKey[:], public)
-
-		return
-	}
-}
diff --git a/packages/binary/signature/ed25119/key_pair.go b/packages/binary/signature/ed25119/key_pair.go
deleted file mode 100644
index ad0c31bb..00000000
--- a/packages/binary/signature/ed25119/key_pair.go
+++ /dev/null
@@ -1,6 +0,0 @@
-package ed25119
-
-type KeyPair struct {
-	PrivateKey PrivateKey
-	PublicKey  PublicKey
-}
diff --git a/packages/binary/signature/ed25119/private_key.go b/packages/binary/signature/ed25119/private_key.go
deleted file mode 100644
index 9885a643..00000000
--- a/packages/binary/signature/ed25119/private_key.go
+++ /dev/null
@@ -1,31 +0,0 @@
-package ed25119
-
-import (
-	"fmt"
-
-	"github.com/oasislabs/ed25519"
-)
-
-type PrivateKey [PrivateKeySize]byte
-
-func PrivateKeyFromBytes(bytes []byte) (result PrivateKey, err error, consumedBytes int) {
-	if len(bytes) < PrivateKeySize {
-		err = fmt.Errorf("bytes too short")
-
-		return
-	}
-
-	copy(result[:], bytes)
-
-	consumedBytes = PrivateKeySize
-
-	return
-}
-
-func (privateKey PrivateKey) Sign(data []byte) (result Signature) {
-	copy(result[:], ed25519.Sign(privateKey[:], data))
-
-	return
-}
-
-const PrivateKeySize = 64
diff --git a/packages/binary/signature/ed25119/public_key.go b/packages/binary/signature/ed25119/public_key.go
deleted file mode 100644
index 485ac0fe..00000000
--- a/packages/binary/signature/ed25119/public_key.go
+++ /dev/null
@@ -1,53 +0,0 @@
-package ed25119
-
-import (
-	"errors"
-	"fmt"
-
-	"github.com/iotaledger/hive.go/marshalutil"
-	"github.com/oasislabs/ed25519"
-)
-
-type PublicKey [PublicKeySize]byte
-
-func PublicKeyFromBytes(bytes []byte) (result PublicKey, err error, consumedBytes int) {
-	if len(bytes) < PublicKeySize {
-		err = fmt.Errorf("bytes too short")
-
-		return
-	}
-
-	copy(result[:], bytes)
-
-	consumedBytes = PublicKeySize
-
-	return
-}
-
-func ParsePublicKey(marshalUtil *marshalutil.MarshalUtil) (PublicKey, error) {
-	if id, err := marshalUtil.Parse(func(data []byte) (interface{}, error, int) { return PublicKeyFromBytes(data) }); err != nil {
-		return PublicKey{}, err
-	} else {
-		return id.(PublicKey), nil
-	}
-}
-
-func (publicKey PublicKey) VerifySignature(data []byte, signature Signature) bool {
-	return ed25519.Verify(publicKey[:], data, signature[:])
-}
-
-func (publicKey PublicKey) Bytes() []byte {
-	return publicKey[:]
-}
-
-func (publicKey *PublicKey) UnmarshalBinary(bytes []byte) (err error) {
-	if len(bytes) < PublicKeySize {
-		return errors.New("not enough bytes")
-	}
-
-	copy(publicKey[:], bytes[:])
-
-	return
-}
-
-const PublicKeySize = 32
diff --git a/packages/binary/signature/ed25119/signature.go b/packages/binary/signature/ed25119/signature.go
deleted file mode 100644
index 6362dce5..00000000
--- a/packages/binary/signature/ed25119/signature.go
+++ /dev/null
@@ -1,48 +0,0 @@
-package ed25119
-
-import (
-	"errors"
-	"fmt"
-
-	"github.com/iotaledger/hive.go/marshalutil"
-)
-
-type Signature [SignatureSize]byte
-
-func SignatureFromBytes(bytes []byte) (result Signature, err error, consumedBytes int) {
-	if len(bytes) < SignatureSize {
-		err = fmt.Errorf("bytes too short")
-
-		return
-	}
-
-	copy(result[:SignatureSize], bytes)
-
-	consumedBytes = SignatureSize
-
-	return
-}
-
-func ParseSignature(marshalUtil *marshalutil.MarshalUtil) (Signature, error) {
-	if id, err := marshalUtil.Parse(func(data []byte) (interface{}, error, int) { return SignatureFromBytes(data) }); err != nil {
-		return Signature{}, err
-	} else {
-		return id.(Signature), nil
-	}
-}
-
-func (signature Signature) Bytes() []byte {
-	return signature[:]
-}
-
-func (signature *Signature) UnmarshalBinary(bytes []byte) (err error) {
-	if len(bytes) < SignatureSize {
-		return errors.New("not enough bytes")
-	}
-
-	copy(signature[:], bytes[:])
-
-	return
-}
-
-const SignatureSize = 64
diff --git a/packages/binary/spammer/spammer.go b/packages/binary/spammer/spammer.go
index d8adc712..525ae075 100644
--- a/packages/binary/spammer/spammer.go
+++ b/packages/binary/spammer/spammer.go
@@ -4,13 +4,13 @@ import (
 	"sync/atomic"
 	"time"
 
+	"github.com/iotaledger/hive.go/identity"
 	"github.com/iotaledger/hive.go/types"
 
 	"github.com/iotaledger/goshimmer/packages/binary/messagelayer/message"
 	"github.com/iotaledger/goshimmer/packages/binary/messagelayer/payload"
 	"github.com/iotaledger/goshimmer/packages/binary/messagelayer/tipselector"
 	"github.com/iotaledger/goshimmer/packages/binary/messagelayer/transactionparser"
-	"github.com/iotaledger/goshimmer/packages/binary/signature/ed25119"
 )
 
 type Spammer struct {
@@ -42,7 +42,8 @@ func (spammer *Spammer) Shutdown() {
 }
 
 func (spammer *Spammer) run(tps int, processId int64) {
-	spammingIdentity := ed25119.GenerateKeyPair()
+	// TODO: this should be the local peer's identity
+	spammingIdentity := identity.GenerateLocalIdentity()
 	currentSentCounter := 0
 	start := time.Now()
 
@@ -51,11 +52,19 @@ func (spammer *Spammer) run(tps int, processId int64) {
 			return
 		}
 
+		// TODO: use transaction factory
 		trunkTransactionId, branchTransactionId := spammer.tipSelector.GetTips()
-		spammer.transactionParser.Parse(
-			message.New(trunkTransactionId, branchTransactionId, spammingIdentity, time.Now(), 0, payload.NewData([]byte("SPAM"))).Bytes(),
-			nil,
+
+		msg := message.New(
+			trunkTransactionId,
+			branchTransactionId,
+			spammingIdentity.PublicKey(),
+			time.Now(),
+			0,
+			payload.NewData([]byte("SPAM")),
+			spammingIdentity,
 		)
+		spammer.transactionParser.Parse(msg.Bytes(), nil)
 
 		currentSentCounter++
 
@@ -73,7 +82,8 @@ func (spammer *Spammer) run(tps int, processId int64) {
 }
 
 func (spammer *Spammer) sendBurst(transactions int, processId int64) {
-	spammingIdentity := ed25119.GenerateKeyPair()
+	// TODO: this should be the local peer's identity
+	spammingIdentity := identity.GenerateLocalIdentity()
 
 	previousTransactionId := message.EmptyId
 
@@ -83,7 +93,17 @@ func (spammer *Spammer) sendBurst(transactions int, processId int64) {
 			return
 		}
 
-		spamTransaction := message.New(previousTransactionId, previousTransactionId, spammingIdentity, time.Now(), 0, payload.NewData([]byte("SPAM")))
+		// TODO: use transaction factory
+		spamTransaction := message.New(
+			previousTransactionId,
+			previousTransactionId,
+			spammingIdentity.PublicKey(),
+			time.Now(),
+			0,
+			payload.NewData([]byte("SPAM")),
+			spammingIdentity,
+		)
+
 		previousTransactionId = spamTransaction.GetId()
 		burstBuffer[i] = spamTransaction.Bytes()
 	}
diff --git a/packages/binary/valuetransfer/address/address.go b/packages/binary/valuetransfer/address/address.go
index 57a024af..26bfa6f2 100644
--- a/packages/binary/valuetransfer/address/address.go
+++ b/packages/binary/valuetransfer/address/address.go
@@ -3,10 +3,11 @@ package address
 import (
 	"crypto/rand"
 	"fmt"
+
+	"github.com/iotaledger/hive.go/crypto/ed25519"
 	"github.com/mr-tron/base58"
 	"golang.org/x/crypto/blake2b"
 
-	"github.com/iotaledger/goshimmer/packages/binary/signature/ed25119"
 	"github.com/iotaledger/hive.go/marshalutil"
 )
 
@@ -55,7 +56,7 @@ func FromBase58(base58String string) (address Address, err error) {
 }
 
 // FromED25519PubKey creates an address from an ed25519 public key.
-func FromED25519PubKey(key ed25119.PublicKey) (address Address) {
+func FromED25519PubKey(key ed25519.PublicKey) (address Address) {
 	digest := blake2b.Sum256(key[:])
 
 	address[0] = VERSION_ED25519
diff --git a/packages/binary/valuetransfer/address/signaturescheme/ed25519.go b/packages/binary/valuetransfer/address/signaturescheme/ed25519.go
index 7da880a3..54349efe 100644
--- a/packages/binary/valuetransfer/address/signaturescheme/ed25519.go
+++ b/packages/binary/valuetransfer/address/signaturescheme/ed25519.go
@@ -3,16 +3,16 @@ package signaturescheme
 import (
 	"fmt"
 
+	"github.com/iotaledger/hive.go/crypto/ed25519"
 	"github.com/iotaledger/hive.go/marshalutil"
 
-	"github.com/iotaledger/goshimmer/packages/binary/signature/ed25119"
 	"github.com/iotaledger/goshimmer/packages/binary/valuetransfer/address"
 )
 
 // region PUBLIC API ///////////////////////////////////////////////////////////////////////////////////////////////////
 
 // ED25519 creates an instance of a signature scheme, that is used to sign the corresponding address.
-func ED25519(keyPair ed25119.KeyPair) SignatureScheme {
+func ED25519(keyPair ed25519.KeyPair) SignatureScheme {
 	return &ed25519SignatureScheme{
 		keyPair: keyPair,
 	}
@@ -24,7 +24,7 @@ func ED25519(keyPair ed25119.KeyPair) SignatureScheme {
 
 // ed25519SignatureScheme defines an interface for ED25519 elliptic curve signatures.
 type ed25519SignatureScheme struct {
-	keyPair ed25119.KeyPair
+	keyPair ed25519.KeyPair
 }
 
 // Version returns the version byte that is associated to this signature scheme.
@@ -54,8 +54,8 @@ var _ SignatureScheme = &ed25519SignatureScheme{}
 
 // ed25519Signature represents a signature for an addresses that uses elliptic curve cryptography.
 type ed25519Signature struct {
-	publicKey ed25119.PublicKey
-	signature ed25119.Signature
+	publicKey ed25519.PublicKey
+	signature ed25519.Signature
 }
 
 // ed25519SignatureFromBytes unmarshals an ed25519 signatures from a sequence of bytes.
@@ -85,18 +85,18 @@ func Ed25519SignatureFromBytes(bytes []byte, optionalTargetObject ...*ed25519Sig
 	}
 
 	// read public key
-	publicKey, err := marshalUtil.Parse(func(data []byte) (interface{}, error, int) { return ed25119.PublicKeyFromBytes(data) })
+	publicKey, err := marshalUtil.Parse(func(data []byte) (interface{}, error, int) { return ed25519.PublicKeyFromBytes(data) })
 	if err != nil {
 		return
 	}
-	result.publicKey = publicKey.(ed25119.PublicKey)
+	result.publicKey = publicKey.(ed25519.PublicKey)
 
 	// read signature
-	signature, err := marshalUtil.Parse(func(data []byte) (interface{}, error, int) { return ed25119.SignatureFromBytes(data) })
+	signature, err := marshalUtil.Parse(func(data []byte) (interface{}, error, int) { return ed25519.SignatureFromBytes(data) })
 	if err != nil {
 		return
 	}
-	result.signature = signature.(ed25119.Signature)
+	result.signature = signature.(ed25519.Signature)
 
 	// return the number of bytes we processed
 	consumedBytes = marshalUtil.ReadOffset()
@@ -111,7 +111,7 @@ func (signature *ed25519Signature) IsValid(signedData []byte) bool {
 
 // Bytes returns a marshaled version of the signature.
 func (signature *ed25519Signature) Bytes() []byte {
-	marshalUtil := marshalutil.New(1 + ed25119.PublicKeySize + ed25119.SignatureSize)
+	marshalUtil := marshalutil.New(1 + ed25519.PublicKeySize + ed25519.SignatureSize)
 	marshalUtil.WriteByte(address.VERSION_ED25519)
 	marshalUtil.WriteBytes(signature.publicKey[:])
 	marshalUtil.WriteBytes(signature.signature[:])
diff --git a/packages/binary/valuetransfer/payload/payload_test.go b/packages/binary/valuetransfer/payload/payload_test.go
index fc7b762a..46d445cf 100644
--- a/packages/binary/valuetransfer/payload/payload_test.go
+++ b/packages/binary/valuetransfer/payload/payload_test.go
@@ -5,10 +5,11 @@ import (
 	"testing"
 	"time"
 
+	"github.com/iotaledger/hive.go/crypto/ed25519"
+	"github.com/iotaledger/hive.go/identity"
 	"github.com/stretchr/testify/assert"
 
 	"github.com/iotaledger/goshimmer/packages/binary/messagelayer/message"
-	"github.com/iotaledger/goshimmer/packages/binary/signature/ed25119"
 	"github.com/iotaledger/goshimmer/packages/binary/valuetransfer/address"
 	"github.com/iotaledger/goshimmer/packages/binary/valuetransfer/address/signaturescheme"
 	"github.com/iotaledger/goshimmer/packages/binary/valuetransfer/balance"
@@ -45,6 +46,7 @@ func ExamplePayload() {
 	)
 
 	// 3. build actual transaction (the base layer creates this and wraps the ontology provided payload)
+	localIdentity := identity.GenerateLocalIdentity()
 	tx := message.New(
 		// trunk in "network tangle" ontology (filled by tipSelector)
 		message.EmptyId,
@@ -53,7 +55,7 @@ func ExamplePayload() {
 		message.EmptyId,
 
 		// issuer of the transaction (signs automatically)
-		ed25119.GenerateKeyPair(),
+		localIdentity.PublicKey(),
 
 		// the time when the transaction was created
 		time.Now(),
@@ -63,14 +65,16 @@ func ExamplePayload() {
 
 		// payload
 		valuePayload,
+
+		localIdentity,
 	)
 
 	fmt.Println(tx)
 }
 
 func TestPayload(t *testing.T) {
-	addressKeyPair1 := ed25119.GenerateKeyPair()
-	addressKeyPair2 := ed25119.GenerateKeyPair()
+	addressKeyPair1 := ed25519.GenerateKeyPair()
+	addressKeyPair2 := ed25519.GenerateKeyPair()
 
 	originalPayload := New(
 		GenesisId,
diff --git a/packages/binary/valuetransfer/tangle/tangle_test.go b/packages/binary/valuetransfer/tangle/tangle_test.go
index 93e35e7d..f2f371ec 100644
--- a/packages/binary/valuetransfer/tangle/tangle_test.go
+++ b/packages/binary/valuetransfer/tangle/tangle_test.go
@@ -6,11 +6,11 @@ import (
 	"os"
 	"testing"
 
+	"github.com/iotaledger/hive.go/crypto/ed25519"
 	"github.com/iotaledger/hive.go/events"
 	"github.com/stretchr/testify/assert"
 	"github.com/stretchr/testify/require"
 
-	"github.com/iotaledger/goshimmer/packages/binary/signature/ed25119"
 	"github.com/iotaledger/goshimmer/packages/binary/valuetransfer/address"
 	"github.com/iotaledger/goshimmer/packages/binary/valuetransfer/balance"
 	"github.com/iotaledger/goshimmer/packages/binary/valuetransfer/payload"
@@ -59,8 +59,8 @@ func TestTangle_AttachPayload(t *testing.T) {
 		metadata.Release()
 	}))
 
-	addressKeyPair1 := ed25119.GenerateKeyPair()
-	addressKeyPair2 := ed25119.GenerateKeyPair()
+	addressKeyPair1 := ed25519.GenerateKeyPair()
+	addressKeyPair2 := ed25519.GenerateKeyPair()
 
 	transferId1, _ := transaction.IdFromBase58("8opHzTAnfzRpPEx21XtnrVTX28YQuCpAjcn1PczScKh")
 	transferId2, _ := transaction.IdFromBase58("4uQeVj5tqViQh7yWWGStvkEG1Zmhx6uasJtWCJziofM")
diff --git a/packages/binary/valuetransfer/transaction/signatures_test.go b/packages/binary/valuetransfer/transaction/signatures_test.go
index a27426c1..a344780c 100644
--- a/packages/binary/valuetransfer/transaction/signatures_test.go
+++ b/packages/binary/valuetransfer/transaction/signatures_test.go
@@ -3,9 +3,9 @@ package transaction
 import (
 	"testing"
 
+	"github.com/iotaledger/hive.go/crypto/ed25519"
 	"github.com/stretchr/testify/assert"
 
-	"github.com/iotaledger/goshimmer/packages/binary/signature/ed25119"
 	"github.com/iotaledger/goshimmer/packages/binary/valuetransfer/address"
 	"github.com/iotaledger/goshimmer/packages/binary/valuetransfer/address/signaturescheme"
 )
@@ -13,8 +13,8 @@ import (
 func TestSignatures(t *testing.T) {
 	dataToSign := []byte("test")
 
-	address1SigScheme := signaturescheme.ED25519(ed25119.GenerateKeyPair())
-	address2SigScheme := signaturescheme.ED25519(ed25119.GenerateKeyPair())
+	address1SigScheme := signaturescheme.ED25519(ed25519.GenerateKeyPair())
+	address2SigScheme := signaturescheme.ED25519(ed25519.GenerateKeyPair())
 	address3SigScheme := signaturescheme.RandBLS()
 
 	signatures := NewSignatures()
diff --git a/packages/gossip/manager.go b/packages/gossip/manager.go
index b8b676a9..00846158 100644
--- a/packages/gossip/manager.go
+++ b/packages/gossip/manager.go
@@ -6,14 +6,16 @@ import (
 	"net"
 	"sync"
 
-	"github.com/iotaledger/goshimmer/packages/binary/messagelayer/message"
-
 	"github.com/golang/protobuf/proto"
-	pb "github.com/iotaledger/goshimmer/packages/gossip/proto"
-	"github.com/iotaledger/goshimmer/packages/gossip/server"
+	"go.uber.org/zap"
+
 	"github.com/iotaledger/hive.go/autopeering/peer"
 	"github.com/iotaledger/hive.go/events"
-	"go.uber.org/zap"
+	"github.com/iotaledger/hive.go/identity"
+
+	"github.com/iotaledger/goshimmer/packages/binary/messagelayer/message"
+	pb "github.com/iotaledger/goshimmer/packages/gossip/proto"
+	"github.com/iotaledger/goshimmer/packages/gossip/server"
 )
 
 const (
@@ -37,7 +39,7 @@ type Manager struct {
 
 	mu        sync.RWMutex
 	srv       *server.TCP
-	neighbors map[peer.ID]*Neighbor
+	neighbors map[identity.ID]*Neighbor
 	running   bool
 }
 
@@ -47,7 +49,7 @@ func NewManager(local *peer.Local, f GetTransaction, log *zap.SugaredLogger) *Ma
 		getTransaction: f,
 		log:            log,
 		srv:            nil,
-		neighbors:      make(map[peer.ID]*Neighbor),
+		neighbors:      make(map[identity.ID]*Neighbor),
 		running:        false,
 	}
 }
@@ -113,7 +115,7 @@ func (m *Manager) AddInbound(p *peer.Peer) error {
 }
 
 // NeighborRemoved disconnects the neighbor with the given ID.
-func (m *Manager) DropNeighbor(id peer.ID) error {
+func (m *Manager) DropNeighbor(id identity.ID) error {
 	n, err := m.removeNeighbor(id)
 	if err != nil {
 		return err
@@ -125,7 +127,7 @@ func (m *Manager) DropNeighbor(id peer.ID) error {
 
 // RequestTransaction requests the transaction with the given hash from the neighbors.
 // If no peer is provided, all neighbors are queried.
-func (m *Manager) RequestTransaction(txHash []byte, to ...peer.ID) {
+func (m *Manager) RequestTransaction(txHash []byte, to ...identity.ID) {
 	req := &pb.TransactionRequest{
 		Hash: txHash,
 	}
@@ -135,7 +137,7 @@ func (m *Manager) RequestTransaction(txHash []byte, to ...peer.ID) {
 
 // SendTransaction adds the given transaction data to the send queue of the neighbors.
 // The actual send then happens asynchronously. If no peer is provided, it is send to all neighbors.
-func (m *Manager) SendTransaction(txData []byte, to ...peer.ID) {
+func (m *Manager) SendTransaction(txData []byte, to ...identity.ID) {
 	tx := &pb.Transaction{
 		Data: txData,
 	}
@@ -153,14 +155,14 @@ func (m *Manager) GetAllNeighbors() []*Neighbor {
 	return result
 }
 
-func (m *Manager) getNeighbors(ids ...peer.ID) []*Neighbor {
+func (m *Manager) getNeighbors(ids ...identity.ID) []*Neighbor {
 	if len(ids) > 0 {
 		return m.getNeighborsById(ids)
 	}
 	return m.GetAllNeighbors()
 }
 
-func (m *Manager) getNeighborsById(ids []peer.ID) []*Neighbor {
+func (m *Manager) getNeighborsById(ids []identity.ID) []*Neighbor {
 	result := make([]*Neighbor, 0, len(ids))
 
 	m.mu.RLock()
@@ -173,7 +175,7 @@ func (m *Manager) getNeighborsById(ids []peer.ID) []*Neighbor {
 	return result
 }
 
-func (m *Manager) send(b []byte, to ...peer.ID) {
+func (m *Manager) send(b []byte, to ...identity.ID) {
 	neighbors := m.getNeighbors(to...)
 
 	for _, nbr := range neighbors {
@@ -219,7 +221,7 @@ func (m *Manager) addNeighbor(peer *peer.Peer, connectorFunc func(*peer.Peer) (n
 	return nil
 }
 
-func (m *Manager) removeNeighbor(id peer.ID) (*Neighbor, error) {
+func (m *Manager) removeNeighbor(id identity.ID) (*Neighbor, error) {
 	m.mu.Lock()
 	defer m.mu.Unlock()
 	if _, ok := m.neighbors[id]; !ok {
diff --git a/packages/gossip/neighbor_test.go b/packages/gossip/neighbor_test.go
index 2ec1a2be..bde828f5 100644
--- a/packages/gossip/neighbor_test.go
+++ b/packages/gossip/neighbor_test.go
@@ -1,7 +1,6 @@
 package gossip
 
 import (
-	"crypto/ed25519"
 	"net"
 	"sync"
 	"sync/atomic"
@@ -10,7 +9,9 @@ import (
 
 	"github.com/iotaledger/hive.go/autopeering/peer"
 	"github.com/iotaledger/hive.go/autopeering/peer/service"
+	"github.com/iotaledger/hive.go/crypto/ed25519"
 	"github.com/iotaledger/hive.go/events"
+	"github.com/iotaledger/hive.go/identity"
 	"github.com/stretchr/testify/assert"
 	"github.com/stretchr/testify/require"
 )
@@ -126,9 +127,11 @@ func newTestPeer(name string, conn net.Conn) *peer.Peer {
 	services := service.New()
 	services.Update(service.PeeringKey, conn.LocalAddr().Network(), 0)
 	services.Update(service.GossipKey, conn.LocalAddr().Network(), 0)
-	key := make([]byte, ed25519.PublicKeySize)
-	copy(key, name)
-	return peer.NewPeer(key, net.IPv4zero, services)
+
+	var publicKey ed25519.PublicKey
+	copy(publicKey[:], name)
+
+	return peer.NewPeer(identity.NewIdentity(publicKey), net.IPv4zero, services)
 }
 
 func newPipe() (net.Conn, net.Conn, func()) {
diff --git a/packages/gossip/server/server.go b/packages/gossip/server/server.go
index 80a1d183..133e92ef 100644
--- a/packages/gossip/server/server.go
+++ b/packages/gossip/server/server.go
@@ -17,6 +17,8 @@ import (
 	"github.com/iotaledger/hive.go/autopeering/peer/service"
 	pb "github.com/iotaledger/hive.go/autopeering/server/proto"
 	"github.com/iotaledger/hive.go/backoff"
+	"github.com/iotaledger/hive.go/crypto/ed25519"
+	"github.com/iotaledger/hive.go/identity"
 	"github.com/iotaledger/hive.go/netutil"
 	"go.uber.org/zap"
 )
@@ -72,9 +74,9 @@ type acceptMatcher struct {
 }
 
 type accept struct {
-	fromID peer.ID  // ID of the connecting peer
-	req    []byte   // raw data of the handshake request
-	conn   net.Conn // the actual network connection
+	fromID identity.ID // ID of the connecting peer
+	req    []byte      // raw data of the handshake request
+	conn   net.Conn    // the actual network connection
 }
 
 // ServeTCP creates the object and starts listening for incoming connections.
@@ -297,7 +299,7 @@ func (t *TCP) listenLoop() {
 
 		select {
 		case t.acceptReceived <- accept{
-			fromID: key.ID(),
+			fromID: identity.NewID(key),
 			req:    req,
 			conn:   conn,
 		}:
@@ -308,15 +310,15 @@ func (t *TCP) listenLoop() {
 	}
 }
 
-func (t *TCP) doHandshake(key peer.PublicKey, remoteAddr string, conn net.Conn) error {
+func (t *TCP) doHandshake(key ed25519.PublicKey, remoteAddr string, conn net.Conn) error {
 	reqData, err := newHandshakeRequest(remoteAddr)
 	if err != nil {
 		return err
 	}
 
 	pkt := &pb.Packet{
-		PublicKey: t.local.PublicKey(),
-		Signature: t.local.Sign(reqData),
+		PublicKey: t.local.PublicKey().Bytes(),
+		Signature: t.local.Sign(reqData).Bytes(),
 		Data:      reqData,
 	}
 	b, err := proto.Marshal(pkt)
@@ -353,7 +355,7 @@ func (t *TCP) doHandshake(key peer.PublicKey, remoteAddr string, conn net.Conn)
 	}
 
 	signer, err := peer.RecoverKeyFromSignedData(pkt)
-	if err != nil || !bytes.Equal(key, signer) {
+	if err != nil || !bytes.Equal(key.Bytes(), signer.Bytes()) {
 		return ErrInvalidHandshake
 	}
 	if !t.validateHandshakeResponse(pkt.GetData(), reqData) {
@@ -363,29 +365,29 @@ func (t *TCP) doHandshake(key peer.PublicKey, remoteAddr string, conn net.Conn)
 	return nil
 }
 
-func (t *TCP) readHandshakeRequest(conn net.Conn) (peer.PublicKey, []byte, error) {
+func (t *TCP) readHandshakeRequest(conn net.Conn) (ed25519.PublicKey, []byte, error) {
 	if err := conn.SetReadDeadline(time.Now().Add(handshakeTimeout)); err != nil {
-		return nil, nil, err
+		return ed25519.PublicKey{}, nil, err
 	}
 	b := make([]byte, maxHandshakePacketSize)
 	n, err := conn.Read(b)
 	if err != nil {
-		return nil, nil, fmt.Errorf("%w: %s", ErrInvalidHandshake, err.Error())
+		return ed25519.PublicKey{}, nil, fmt.Errorf("%w: %s", ErrInvalidHandshake, err.Error())
 	}
 
 	pkt := &pb.Packet{}
 	err = proto.Unmarshal(b[:n], pkt)
 	if err != nil {
-		return nil, nil, err
+		return ed25519.PublicKey{}, nil, err
 	}
 
 	key, err := peer.RecoverKeyFromSignedData(pkt)
 	if err != nil {
-		return nil, nil, err
+		return ed25519.PublicKey{}, nil, err
 	}
 
 	if !t.validateHandshakeRequest(pkt.GetData()) {
-		return nil, nil, ErrInvalidHandshake
+		return ed25519.PublicKey{}, nil, ErrInvalidHandshake
 	}
 
 	return key, pkt.GetData(), nil
@@ -398,8 +400,8 @@ func (t *TCP) writeHandshakeResponse(reqData []byte, conn net.Conn) error {
 	}
 
 	pkt := &pb.Packet{
-		PublicKey: t.local.PublicKey(),
-		Signature: t.local.Sign(data),
+		PublicKey: t.local.PublicKey().Bytes(),
+		Signature: t.local.Sign(data).Bytes(),
 		Data:      data,
 	}
 	b, err := proto.Marshal(pkt)
diff --git a/packages/gossip/server/server_test.go b/packages/gossip/server/server_test.go
index 98385670..5c62ef5e 100644
--- a/packages/gossip/server/server_test.go
+++ b/packages/gossip/server/server_test.go
@@ -58,7 +58,7 @@ func TestUnansweredDial(t *testing.T) {
 	// create peer with invalid gossip address
 	services := getPeer(transA).Services().CreateRecord()
 	services.Update(service.GossipKey, "tcp", 0)
-	unreachablePeer := peer.NewPeer(getPeer(transA).PublicKey(), net.ParseIP("127.0.0.1"), services)
+	unreachablePeer := peer.NewPeer(getPeer(transA).Identity, net.ParseIP("127.0.0.1"), services)
 
 	_, err := transA.DialPeer(unreachablePeer)
 	assert.Error(t, err)
@@ -82,7 +82,7 @@ func TestNoHandshakeResponse(t *testing.T) {
 	// create peer for the listener
 	services := getPeer(transA).Services().CreateRecord()
 	services.Update(service.GossipKey, lis.Addr().Network(), lis.Addr().(*net.TCPAddr).Port)
-	p := peer.NewPeer(getPeer(transA).PublicKey(), lis.Addr().(*net.TCPAddr).IP, services)
+	p := peer.NewPeer(getPeer(transA).Identity, lis.Addr().(*net.TCPAddr).IP, services)
 
 	_, err = transA.DialPeer(p)
 	assert.Error(t, err)
diff --git a/plugins/autopeering/autopeering.go b/plugins/autopeering/autopeering.go
index 658c39be..460bacd8 100644
--- a/plugins/autopeering/autopeering.go
+++ b/plugins/autopeering/autopeering.go
@@ -9,17 +9,20 @@ import (
 	"strconv"
 	"strings"
 
-	"github.com/iotaledger/goshimmer/plugins/autopeering/local"
-	"github.com/iotaledger/goshimmer/plugins/banner"
-	"github.com/iotaledger/goshimmer/plugins/config"
-	"github.com/iotaledger/goshimmer/plugins/gossip"
 	"github.com/iotaledger/hive.go/autopeering/discover"
 	"github.com/iotaledger/hive.go/autopeering/peer"
 	"github.com/iotaledger/hive.go/autopeering/peer/service"
 	"github.com/iotaledger/hive.go/autopeering/selection"
 	"github.com/iotaledger/hive.go/autopeering/server"
+	"github.com/iotaledger/hive.go/crypto/ed25519"
+	"github.com/iotaledger/hive.go/identity"
 	"github.com/iotaledger/hive.go/logger"
 	"github.com/iotaledger/hive.go/node"
+
+	"github.com/iotaledger/goshimmer/plugins/autopeering/local"
+	"github.com/iotaledger/goshimmer/plugins/banner"
+	"github.com/iotaledger/goshimmer/plugins/config"
+	"github.com/iotaledger/goshimmer/plugins/gossip"
 )
 
 // autopeering constants
@@ -160,11 +163,15 @@ func parseEntryNodes() (result []*peer.Peer, err error) {
 		if err != nil {
 			return nil, fmt.Errorf("%w: host cannot be resolved: %s", ErrParsingMasterNode, err)
 		}
+		publicKey, err, _ := ed25519.PublicKeyFromBytes(pubKey)
+		if err != nil {
+			return nil, err
+		}
 
 		services := service.New()
 		services.Update(service.PeeringKey, addr.Network(), addr.Port)
 
-		result = append(result, peer.NewPeer(pubKey, addr.IP, services))
+		result = append(result, peer.NewPeer(identity.NewIdentity(publicKey), addr.IP, services))
 	}
 
 	return result, nil
diff --git a/plugins/spa/explorer_routes.go b/plugins/spa/explorer_routes.go
index 448a57e9..e42e3f26 100644
--- a/plugins/spa/explorer_routes.go
+++ b/plugins/spa/explorer_routes.go
@@ -26,7 +26,7 @@ type ExplorerTx struct {
 func createExplorerTx(tx *message.Message) (*ExplorerTx, error) {
 	transactionId := tx.GetId()
 
-	txMetadata := messagelayer.Tangle.GetTransactionMetadata(transactionId)
+	txMetadata := messagelayer.Tangle.MessageMetadata(transactionId)
 
 	t := &ExplorerTx{
 		Hash:                     transactionId.String(),
@@ -116,7 +116,7 @@ func setupExplorerRoutes(routeGroup *echo.Group) {
 }
 
 func findTransaction(transactionId message.Id) (explorerTx *ExplorerTx, err error) {
-	if !messagelayer.Tangle.GetTransaction(transactionId).Consume(func(transaction *message.Message) {
+	if !messagelayer.Tangle.Message(transactionId).Consume(func(transaction *message.Message) {
 		explorerTx, err = createExplorerTx(transaction)
 	}) {
 		err = errors.Wrapf(ErrNotFound, "tx hash: %s", transactionId.String())
diff --git a/plugins/webapi/getNeighbors/plugin.go b/plugins/webapi/getNeighbors/plugin.go
index 5f4f4567..acedd3f3 100644
--- a/plugins/webapi/getNeighbors/plugin.go
+++ b/plugins/webapi/getNeighbors/plugin.go
@@ -39,7 +39,7 @@ func getNeighbors(c echo.Context) error {
 		for _, peer := range autopeering.Discovery.GetVerifiedPeers() {
 			n := Neighbor{
 				ID:        peer.ID().String(),
-				PublicKey: base64.StdEncoding.EncodeToString(peer.PublicKey()),
+				PublicKey: base64.StdEncoding.EncodeToString(peer.PublicKey().Bytes()),
 			}
 			n.Services = getServices(peer)
 			knownPeers = append(knownPeers, n)
@@ -49,7 +49,7 @@ func getNeighbors(c echo.Context) error {
 	for _, peer := range autopeering.Selection.GetOutgoingNeighbors() {
 		n := Neighbor{
 			ID:        peer.ID().String(),
-			PublicKey: base64.StdEncoding.EncodeToString(peer.PublicKey()),
+			PublicKey: base64.StdEncoding.EncodeToString(peer.PublicKey().Bytes()),
 		}
 		n.Services = getServices(peer)
 		chosen = append(chosen, n)
@@ -57,7 +57,7 @@ func getNeighbors(c echo.Context) error {
 	for _, peer := range autopeering.Selection.GetIncomingNeighbors() {
 		n := Neighbor{
 			ID:        peer.ID().String(),
-			PublicKey: base64.StdEncoding.EncodeToString(peer.PublicKey()),
+			PublicKey: base64.StdEncoding.EncodeToString(peer.PublicKey().Bytes()),
 		}
 		n.Services = getServices(peer)
 		accepted = append(accepted, n)
-- 
GitLab