Skip to content
Snippets Groups Projects
Commit 7f26a9dc authored by Hans Moog's avatar Hans Moog
Browse files

Feat: transaction get solid now

parent e43c4192
Branches
Tags
No related merge requests found
Showing
with 135 additions and 48 deletions
package serialize
import (
"reflect"
"unsafe"
)
type SerializedObject struct {
readOffset int
}
func (so *SerializedObject) SerializeInt(int int) []byte {
hdr := reflect.SliceHeader{Data: uintptr(unsafe.Pointer(&int)), Len: 8, Cap: 8}
return *(*[]byte)(unsafe.Pointer(&hdr))
}
...@@ -24,6 +24,7 @@ type Spammer struct { ...@@ -24,6 +24,7 @@ type Spammer struct {
func New(tangle *tangle.Tangle, tipSelector *tipselector.TipSelector) *Spammer { func New(tangle *tangle.Tangle, tipSelector *tipselector.TipSelector) *Spammer {
return &Spammer{ return &Spammer{
shutdownSignal: make(chan types.Empty),
tangle: tangle, tangle: tangle,
tipSelector: tipSelector, tipSelector: tipSelector,
} }
...@@ -44,7 +45,7 @@ func (spammer *Spammer) Shutdown() { ...@@ -44,7 +45,7 @@ func (spammer *Spammer) Shutdown() {
spammer.startStopMutex.Lock() spammer.startStopMutex.Lock()
defer spammer.startStopMutex.Unlock() defer spammer.startStopMutex.Unlock()
if !spammer.running { if spammer.running {
spammer.running = false spammer.running = false
spammer.shutdownSignal <- types.Void spammer.shutdownSignal <- types.Void
......
package storageprefix package storageprefix
var ( var (
Mainnet = []byte{0} Mainnet = []byte{88}
TangleTransaction = []byte{1} TangleTransaction = []byte{1}
TangleTransactionMetadata = []byte{2} TangleTransactionMetadata = []byte{2}
......
...@@ -34,6 +34,6 @@ func transactionIdEvent(handler interface{}, params ...interface{}) { ...@@ -34,6 +34,6 @@ func transactionIdEvent(handler interface{}, params ...interface{}) {
func cachedTransactionEvent(handler interface{}, params ...interface{}) { func cachedTransactionEvent(handler interface{}, params ...interface{}) {
handler.(func(*transaction.CachedTransaction, *transactionmetadata.CachedTransactionMetadata))( handler.(func(*transaction.CachedTransaction, *transactionmetadata.CachedTransactionMetadata))(
params[0].(*transaction.CachedTransaction).Retain(), params[0].(*transaction.CachedTransaction).Retain(),
params[1].(*transactionmetadata.CachedTransactionMetadata).Retain().(*transactionmetadata.CachedTransactionMetadata), params[1].(*transactionmetadata.CachedTransactionMetadata).Retain(),
) )
} }
...@@ -8,8 +8,8 @@ type CachedTransactionMetadata struct { ...@@ -8,8 +8,8 @@ type CachedTransactionMetadata struct {
objectstorage.CachedObject objectstorage.CachedObject
} }
func (cachedObject *CachedTransactionMetadata) Retain() objectstorage.CachedObject { func (cachedObject *CachedTransactionMetadata) Retain() *CachedTransactionMetadata {
return &CachedTransactionMetadata{cachedObject} return &CachedTransactionMetadata{cachedObject.CachedObject.Retain()}
} }
func (cachedObject *CachedTransactionMetadata) Unwrap() *TransactionMetadata { func (cachedObject *CachedTransactionMetadata) Unwrap() *TransactionMetadata {
......
package transactionmetadata
import (
"fmt"
"reflect"
"runtime"
"time"
"unsafe"
)
type Proto struct {
receivedTime time.Time
solidificationTime time.Time
solid bool
}
// region GENERIC SERIALIZATION CODE ///////////////////////////////////////////////////////////////////////////////////
var sizeOfProto = int(unsafe.Sizeof(Proto{}))
func ProtoFromBytes(bytes []byte) (result *Proto, err error) {
if bytesLength := len(bytes); bytesLength != sizeOfProto {
return nil, fmt.Errorf("bytes are not long enough (%d instead of %d)", bytesLength, sizeOfProto)
}
copiedBytes := make([]byte, sizeOfProto)
copy(copiedBytes, bytes)
result = (*Proto)(unsafe.Pointer(
(*reflect.SliceHeader)(unsafe.Pointer(&copiedBytes)).Data,
))
runtime.KeepAlive(copiedBytes)
return
}
func (proto *Proto) ToBytes() (result []byte) {
result = make([]byte, sizeOfProto)
copy(result, *(*[]byte)(unsafe.Pointer(&reflect.SliceHeader{
Data: uintptr(unsafe.Pointer(proto)),
Len: sizeOfProto,
Cap: sizeOfProto,
})))
runtime.KeepAlive(proto)
return
}
// endregion ///////////////////////////////////////////////////////////////////////////////////////////////////////////
...@@ -86,9 +86,22 @@ func (transactionMetadata *TransactionMetadata) Update(other objectstorage.Stora ...@@ -86,9 +86,22 @@ func (transactionMetadata *TransactionMetadata) Update(other objectstorage.Stora
} }
func (transactionMetadata *TransactionMetadata) MarshalBinary() ([]byte, error) { func (transactionMetadata *TransactionMetadata) MarshalBinary() ([]byte, error) {
return nil, nil return (&Proto{
receivedTime: transactionMetadata.receivedTime,
solidificationTime: transactionMetadata.solidificationTime,
solid: transactionMetadata.solid,
}).ToBytes(), nil
} }
func (transactionMetadata *TransactionMetadata) UnmarshalBinary([]byte) error { func (transactionMetadata *TransactionMetadata) UnmarshalBinary(data []byte) (err error) {
return nil proto, err := ProtoFromBytes(data)
if err != nil {
return
}
transactionMetadata.receivedTime = proto.receivedTime
transactionMetadata.solidificationTime = proto.solidificationTime
transactionMetadata.solid = proto.solid
return
} }
...@@ -8,15 +8,19 @@ import ( ...@@ -8,15 +8,19 @@ import (
"github.com/dgraph-io/badger/v2" "github.com/dgraph-io/badger/v2"
"github.com/iotaledger/hive.go/events" "github.com/iotaledger/hive.go/events"
"github.com/iotaledger/hive.go/database"
"github.com/iotaledger/goshimmer/packages/binary/identity" "github.com/iotaledger/goshimmer/packages/binary/identity"
"github.com/iotaledger/goshimmer/packages/binary/tangle/model/transaction" "github.com/iotaledger/goshimmer/packages/binary/tangle/model/transaction"
"github.com/iotaledger/goshimmer/packages/binary/tangle/model/transaction/payload/data" "github.com/iotaledger/goshimmer/packages/binary/tangle/model/transaction/payload/data"
"github.com/iotaledger/goshimmer/packages/binary/tangle/model/transactionmetadata" "github.com/iotaledger/goshimmer/packages/binary/tangle/model/transactionmetadata"
"github.com/iotaledger/goshimmer/packages/database" "github.com/iotaledger/goshimmer/plugins/config"
) )
var testDatabase *badger.DB var testDatabase *badger.DB
var _ = config.PLUGIN
func init() { func init() {
testDatabase = database.GetBadgerInstance() testDatabase = database.GetBadgerInstance()
} }
......
...@@ -16,9 +16,7 @@ import ( ...@@ -16,9 +16,7 @@ import (
"github.com/iotaledger/hive.go/logger" "github.com/iotaledger/hive.go/logger"
"github.com/iotaledger/hive.go/node" "github.com/iotaledger/hive.go/node"
"github.com/iotaledger/goshimmer/packages/netutil"
"github.com/iotaledger/goshimmer/plugins/autopeering/local" "github.com/iotaledger/goshimmer/plugins/autopeering/local"
"github.com/iotaledger/goshimmer/plugins/cli"
"github.com/iotaledger/goshimmer/plugins/config" "github.com/iotaledger/goshimmer/plugins/config"
"github.com/iotaledger/goshimmer/plugins/gossip" "github.com/iotaledger/goshimmer/plugins/gossip"
) )
...@@ -161,6 +159,7 @@ func parseEntryNodes() (result []*peer.Peer, err error) { ...@@ -161,6 +159,7 @@ func parseEntryNodes() (result []*peer.Peer, err error) {
} }
func checkConnection(localAddr *net.UDPAddr, self *peer.Peer) { func checkConnection(localAddr *net.UDPAddr, self *peer.Peer) {
/*
peering := self.Services().Get(service.PeeringKey) peering := self.Services().Get(service.PeeringKey)
remoteAddr, err := net.ResolveUDPAddr(peering.Network(), peering.String()) remoteAddr, err := net.ResolveUDPAddr(peering.Network(), peering.String())
if err != nil { if err != nil {
...@@ -174,4 +173,5 @@ func checkConnection(localAddr *net.UDPAddr, self *peer.Peer) { ...@@ -174,4 +173,5 @@ func checkConnection(localAddr *net.UDPAddr, self *peer.Peer) {
log.Panicf("Please check that %s is publicly reachable at %s/%s", log.Panicf("Please check that %s is publicly reachable at %s/%s",
cli.AppName, peering.String(), peering.Network()) cli.AppName, peering.String(), peering.Network())
} }
*/
} }
...@@ -52,7 +52,7 @@ func parseParameters() { ...@@ -52,7 +52,7 @@ func parseParameters() {
// It automatically reads in a single config file starting with "config" (can be changed via the --config CLI flag) // It automatically reads in a single config file starting with "config" (can be changed via the --config CLI flag)
// and ending with: .json, .toml, .yaml or .yml (in this sequence). // and ending with: .json, .toml, .yaml or .yml (in this sequence).
func Fetch(printConfig bool, ignoreSettingsAtPrint ...[]string) error { func Fetch(printConfig bool, ignoreSettingsAtPrint ...[]string) error {
err := parameter.LoadConfigFile(NodeConfig, *configDirPath, *configName, true, false) err := parameter.LoadConfigFile(NodeConfig, *configDirPath, *configName, true, true)
if err != nil { if err != nil {
return err return err
} }
......
...@@ -4,7 +4,6 @@ import ( ...@@ -4,7 +4,6 @@ import (
"fmt" "fmt"
"net" "net"
"strconv" "strconv"
"sync"
"github.com/iotaledger/hive.go/autopeering/peer" "github.com/iotaledger/hive.go/autopeering/peer"
"github.com/iotaledger/hive.go/autopeering/peer/service" "github.com/iotaledger/hive.go/autopeering/peer/service"
...@@ -14,7 +13,6 @@ import ( ...@@ -14,7 +13,6 @@ import (
gp "github.com/iotaledger/goshimmer/packages/gossip" gp "github.com/iotaledger/goshimmer/packages/gossip"
"github.com/iotaledger/goshimmer/packages/gossip/server" "github.com/iotaledger/goshimmer/packages/gossip/server"
"github.com/iotaledger/goshimmer/plugins/autopeering/local" "github.com/iotaledger/goshimmer/plugins/autopeering/local"
"github.com/iotaledger/goshimmer/plugins/cli"
"github.com/iotaledger/goshimmer/plugins/config" "github.com/iotaledger/goshimmer/plugins/config"
"github.com/iotaledger/goshimmer/plugins/tangle" "github.com/iotaledger/goshimmer/plugins/tangle"
) )
...@@ -84,6 +82,7 @@ func start(shutdownSignal <-chan struct{}) { ...@@ -84,6 +82,7 @@ func start(shutdownSignal <-chan struct{}) {
} }
func checkConnection(srv *server.TCP, self *peer.Peer) { func checkConnection(srv *server.TCP, self *peer.Peer) {
/*
var wg sync.WaitGroup var wg sync.WaitGroup
wg.Add(1) wg.Add(1)
go func() { go func() {
...@@ -103,6 +102,7 @@ func checkConnection(srv *server.TCP, self *peer.Peer) { ...@@ -103,6 +102,7 @@ func checkConnection(srv *server.TCP, self *peer.Peer) {
} }
_ = conn.Close() _ = conn.Close()
wg.Wait() wg.Wait()
*/
} }
func getTransaction(transactionId transaction.Id) (bytes []byte, err error) { func getTransaction(transactionId transaction.Id) (bytes []byte, err error) {
......
package tangle package tangle
import ( import (
"fmt"
"github.com/iotaledger/goshimmer/packages/binary/storageprefix" "github.com/iotaledger/goshimmer/packages/binary/storageprefix"
"github.com/iotaledger/goshimmer/packages/binary/tangle"
"github.com/iotaledger/goshimmer/packages/binary/tangle/model/transaction" "github.com/iotaledger/goshimmer/packages/binary/tangle/model/transaction"
"github.com/iotaledger/goshimmer/packages/binary/tangle/model/transactionmetadata" "github.com/iotaledger/goshimmer/packages/binary/tangle/model/transactionmetadata"
"github.com/iotaledger/goshimmer/packages/binary/tangle/tipselector" "github.com/iotaledger/goshimmer/packages/binary/tangle/tipselector"
...@@ -9,11 +12,9 @@ import ( ...@@ -9,11 +12,9 @@ import (
"github.com/iotaledger/goshimmer/packages/binary/tangle/transactionrequester" "github.com/iotaledger/goshimmer/packages/binary/tangle/transactionrequester"
"github.com/iotaledger/goshimmer/packages/database" "github.com/iotaledger/goshimmer/packages/database"
"github.com/iotaledger/goshimmer/packages/shutdown" "github.com/iotaledger/goshimmer/packages/shutdown"
"github.com/iotaledger/hive.go/daemon" "github.com/iotaledger/hive.go/daemon"
"github.com/iotaledger/hive.go/events" "github.com/iotaledger/hive.go/events"
"github.com/iotaledger/goshimmer/packages/binary/tangle"
"github.com/iotaledger/hive.go/logger" "github.com/iotaledger/hive.go/logger"
"github.com/iotaledger/hive.go/node" "github.com/iotaledger/hive.go/node"
) )
...@@ -56,6 +57,8 @@ func configure(*node.Plugin) { ...@@ -56,6 +57,8 @@ func configure(*node.Plugin) {
// setup TipSelector // setup TipSelector
Instance.Events.TransactionSolid.Attach(events.NewClosure(func(cachedTransaction *transaction.CachedTransaction, cachedTransactionMetadata *transactionmetadata.CachedTransactionMetadata) { Instance.Events.TransactionSolid.Attach(events.NewClosure(func(cachedTransaction *transaction.CachedTransaction, cachedTransactionMetadata *transactionmetadata.CachedTransactionMetadata) {
fmt.Println(cachedTransaction.Unwrap())
cachedTransactionMetadata.Release() cachedTransactionMetadata.Release()
cachedTransaction.Consume(TipSelector.AddTip) cachedTransaction.Consume(TipSelector.AddTip)
......
...@@ -10,7 +10,7 @@ import ( ...@@ -10,7 +10,7 @@ import (
var transactionSpammer *spammer.Spammer var transactionSpammer *spammer.Spammer
var PLUGIN = node.NewPlugin("Spammer", node.Disabled, configure) var PLUGIN = node.NewPlugin("Spammer", node.Enabled, configure)
func configure(plugin *node.Plugin) { func configure(plugin *node.Plugin) {
transactionSpammer = spammer.New(tangle.Instance, tangle.TipSelector) transactionSpammer = spammer.New(tangle.Instance, tangle.TipSelector)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment