Skip to content
Snippets Groups Projects
Select Git revision
  • 68473afc07b4c0446c97c9fa782230b64e2f91e6
  • without_tipselection default
  • develop protected
  • fix/grafana-local-dashboard
  • wasp
  • fix/dashboard-explorer-freeze
  • master
  • feat/timerqueue
  • test/sync_debug_and_650
  • feat/sync_revamp_inv
  • wip/sync
  • tool/db-recovery
  • portcheck/fix
  • fix/synchronization
  • feat/new-dashboard-analysis
  • feat/refactored-analysis-dashboard
  • feat/new-analysis-dashboard
  • test/demo-prometheus-fpc
  • prometheus_metrics
  • wip/analysis-server
  • merge/fpc-test-value-transfer
  • v0.2.2
  • v0.2.1
  • v0.2.0
  • v0.1.3
  • v0.1.2
  • v0.1.1
  • v0.1.0
28 results

plugin.go

Blame
  • tangle.go 78.14 KiB
    package tangle
    
    import (
    	"container/list"
    	"errors"
    	"fmt"
    	"math"
    
    	"github.com/iotaledger/hive.go/async"
    	"github.com/iotaledger/hive.go/events"
    	"github.com/iotaledger/hive.go/kvstore"
    	"github.com/iotaledger/hive.go/marshalutil"
    	"github.com/iotaledger/hive.go/objectstorage"
    	"github.com/iotaledger/hive.go/types"
    
    	"github.com/iotaledger/goshimmer/dapps/valuetransfers/packages/address"
    	"github.com/iotaledger/goshimmer/dapps/valuetransfers/packages/balance"
    	"github.com/iotaledger/goshimmer/dapps/valuetransfers/packages/branchmanager"
    	"github.com/iotaledger/goshimmer/dapps/valuetransfers/packages/payload"
    	"github.com/iotaledger/goshimmer/dapps/valuetransfers/packages/transaction"
    	"github.com/iotaledger/goshimmer/packages/binary/storageprefix"
    )
    
    // Tangle represents the value tangle that consists out of value payloads.
    // It is an independent ontology, that lives inside the tangle.
    type Tangle struct {
    	branchManager *branchmanager.BranchManager
    
    	payloadStorage             *objectstorage.ObjectStorage
    	payloadMetadataStorage     *objectstorage.ObjectStorage
    	approverStorage            *objectstorage.ObjectStorage
    	missingPayloadStorage      *objectstorage.ObjectStorage
    	transactionStorage         *objectstorage.ObjectStorage
    	transactionMetadataStorage *objectstorage.ObjectStorage
    	attachmentStorage          *objectstorage.ObjectStorage
    	outputStorage              *objectstorage.ObjectStorage
    	consumerStorage            *objectstorage.ObjectStorage
    
    	Events *Events
    
    	workerPool async.WorkerPool
    }
    
    // New is the constructor of a Tangle and creates a new Tangle object from the given details.
    func New(store kvstore.KVStore) (tangle *Tangle) {
    	osFactory := objectstorage.NewFactory(store, storageprefix.ValueTransfers)
    
    	tangle = &Tangle{
    		branchManager: branchmanager.New(store),
    
    		payloadStorage:             osFactory.New(osPayload, osPayloadFactory, objectstorage.CacheTime(cacheTime)),
    		payloadMetadataStorage:     osFactory.New(osPayloadMetadata, osPayloadMetadataFactory, objectstorage.CacheTime(cacheTime)),
    		missingPayloadStorage:      osFactory.New(osMissingPayload, osMissingPayloadFactory, objectstorage.CacheTime(cacheTime)),
    		approverStorage:            osFactory.New(osApprover, osPayloadApproverFactory, objectstorage.CacheTime(cacheTime), objectstorage.PartitionKey(payload.IDLength, payload.IDLength), objectstorage.KeysOnly(true)),
    		transactionStorage:         osFactory.New(osTransaction, osTransactionFactory, objectstorage.CacheTime(cacheTime), osLeakDetectionOption),
    		transactionMetadataStorage: osFactory.New(osTransactionMetadata, osTransactionMetadataFactory, objectstorage.CacheTime(cacheTime), osLeakDetectionOption),
    		attachmentStorage:          osFactory.New(osAttachment, osAttachmentFactory, objectstorage.CacheTime(cacheTime), objectstorage.PartitionKey(transaction.IDLength, payload.IDLength), osLeakDetectionOption),
    		outputStorage:              osFactory.New(osOutput, osOutputFactory, OutputKeyPartitions, objectstorage.CacheTime(cacheTime), osLeakDetectionOption),
    		consumerStorage:            osFactory.New(osConsumer, osConsumerFactory, ConsumerPartitionKeys, objectstorage.CacheTime(cacheTime), osLeakDetectionOption),
    
    		Events: newEvents(),
    	}
    	tangle.setupDAGSynchronization()
    
    	// TODO: CHANGE BACK TO MULTI THREADING ONCE WE FIXED LOGICAL RACE CONDITIONS
    	tangle.workerPool.Tune(1)
    
    	return
    }