Skip to content
Snippets Groups Projects
Select Git revision
  • 5f2212da202ed2d4221b94b5f3954f1aa700ef7d
  • 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

curl.go

Blame
  • tangle.go 13.01 KiB
    package tangle
    
    import (
    	"container/list"
    	"time"
    
    	"github.com/iotaledger/goshimmer/packages/binary/tangle/model/approvers"
    	"github.com/iotaledger/goshimmer/packages/binary/tangle/model/missingtransaction"
    	"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/valuetransfer"
    	"github.com/iotaledger/goshimmer/packages/binary/tangle/model/transactionmetadata"
    	"github.com/iotaledger/goshimmer/packages/storageprefix"
    
    	"github.com/iotaledger/hive.go/async"
    	"github.com/iotaledger/hive.go/objectstorage"
    )
    
    const (
    	MAX_MISSING_TIME_BEFORE_CLEANUP = 30 * time.Second
    	MISSING_CHECK_INTERVAL          = 5 * time.Second
    )
    
    type Tangle struct {
    	storageId []byte
    
    	transactionStorage         *objectstorage.ObjectStorage
    	transactionMetadataStorage *objectstorage.ObjectStorage
    	approversStorage           *objectstorage.ObjectStorage
    	missingTransactionsStorage *objectstorage.ObjectStorage
    
    	Events Events
    
    	storeTransactionsWorkerPool async.WorkerPool
    	solidifierWorkerPool        async.WorkerPool
    	cleanupWorkerPool           async.WorkerPool
    }
    
    // Constructor for the tangle.
    func New(storageId []byte) (result *Tangle) {
    	result = &Tangle{
    		storageId:                  storageId,
    		transactionStorage:         objectstorage.New(append(storageId, storageprefix.TangleTransaction...), transaction.FromStorage),
    		transactionMetadataStorage: objectstorage.New(append(storageId, storageprefix.TangleTransactionMetadata...), transactionmetadata.FromStorage),
    		approversStorage:           objectstorage.New(append(storageId, storageprefix.TangleApprovers...), approvers.FromStorage),
    		missingTransactionsStorage: objectstorage.New(append(storageId, storageprefix.TangleMissingTransaction...), missingtransaction.FromStorage),
    
    		Events: *newEvents(),
    	}
    
    	result.solidifierWorkerPool.Tune(1024)
    
    	return
    }
    
    func (tangle *Tangle) LoadSnapshot(snapshot *Snapshot) {
    	fakeTransactionId := func(tx *transaction.Transaction, id transaction.Id) *transaction.Transaction {
    		fakedTransaction := transaction.FromStorage(id[:])
    		if err := fakedTransaction.UnmarshalBinary(tx.GetBytes()); err != nil {
    			panic(err)
    		}
    
    		return fakedTransaction.(*transaction.Transaction)
    	}
    
    	for transactionId, addresses := range snapshot.SolidEntryPoints {
    		if addresses == nil {
    			tangle.AttachTransaction(fakeTransactionId(transaction.New(transaction.EmptyId, transaction.EmptyId, nil, data.New(nil)), transactionId))
    		} else {
    			valueTransfer := valuetransfer.New()