diff --git a/packages/batchworkerpool/batchworkerpool.go b/packages/batchworkerpool/batchworkerpool.go deleted file mode 100644 index 071015ff28bea5774fda0b0280231ef679fa8051..0000000000000000000000000000000000000000 --- a/packages/batchworkerpool/batchworkerpool.go +++ /dev/null @@ -1,163 +0,0 @@ -package batchworkerpool - -import ( - "sync" - "time" -) - -type BatchWorkerPool struct { - workerFnc func([]Task) - options *Options - - calls chan Task - batchedCalls chan []Task - terminate chan int - - running bool - mutex sync.RWMutex - wait sync.WaitGroup -} - -func New(workerFnc func([]Task), optionalOptions ...Option) (result *BatchWorkerPool) { - options := DEFAULT_OPTIONS.Override(optionalOptions...) - - result = &BatchWorkerPool{ - workerFnc: workerFnc, - options: options, - } - - result.resetChannels() - - return -} - -func (wp *BatchWorkerPool) Submit(params ...interface{}) (result chan interface{}) { - result = make(chan interface{}, 1) - - wp.mutex.RLock() - - if wp.running { - wp.calls <- Task{ - params: params, - resultChan: result, - } - } else { - close(result) - } - - wp.mutex.RUnlock() - - return -} - -func (wp *BatchWorkerPool) Start() { - wp.mutex.Lock() - - if !wp.running { - wp.running = true - - wp.startBatchDispatcher() - wp.startBatchWorkers() - } - - wp.mutex.Unlock() -} - -func (wp *BatchWorkerPool) Run() { - wp.Start() - - wp.wait.Wait() -} - -func (wp *BatchWorkerPool) Stop() { - go wp.StopAndWait() -} - -func (wp *BatchWorkerPool) StopAndWait() { - wp.mutex.Lock() - - if wp.running { - wp.running = false - - close(wp.terminate) - wp.resetChannels() - } - - wp.wait.Wait() - - wp.mutex.Unlock() -} - -func (wp *BatchWorkerPool) resetChannels() { - wp.calls = make(chan Task, wp.options.QueueSize) - wp.batchedCalls = make(chan []Task, 2*wp.options.WorkerCount) - wp.terminate = make(chan int, 1) -} - -func (wp *BatchWorkerPool) startBatchDispatcher() { - calls := wp.calls - terminate := wp.terminate - - wp.wait.Add(1) - - go func() { - for { - select { - case <-terminate: - wp.wait.Done() - - return - case firstCall := <-calls: - batchTask := append(make([]Task, 0), firstCall) - - collectionTimeout := time.After(wp.options.BatchCollectionTimeout) - - // collect additional requests that arrive within the timeout - CollectAdditionalCalls: - for { - select { - case <-terminate: - wp.wait.Done() - - return - case <-collectionTimeout: - break CollectAdditionalCalls - case call := <-wp.calls: - batchTask = append(batchTask, call) - - if len(batchTask) == wp.options.BatchSize { - break CollectAdditionalCalls - } - } - } - - wp.batchedCalls <- batchTask - } - } - }() -} - -func (wp *BatchWorkerPool) startBatchWorkers() { - batchedCalls := wp.batchedCalls - terminate := wp.terminate - - for i := 0; i < wp.options.WorkerCount; i++ { - wp.wait.Add(1) - - go func() { - aborted := false - - for !aborted { - select { - case <-terminate: - aborted = true - - case batchTask := <-batchedCalls: - wp.workerFnc(batchTask) - } - } - - wp.wait.Done() - }() - } -} diff --git a/packages/batchworkerpool/options.go b/packages/batchworkerpool/options.go deleted file mode 100644 index 47e53b75931c1b7b9c065fd344fac684fb3adccc..0000000000000000000000000000000000000000 --- a/packages/batchworkerpool/options.go +++ /dev/null @@ -1,55 +0,0 @@ -package batchworkerpool - -import ( - "runtime" - "time" -) - -var DEFAULT_OPTIONS = &Options{ - WorkerCount: 2 * runtime.NumCPU(), - QueueSize: 2 * runtime.NumCPU() * 64, - BatchSize: 64, - BatchCollectionTimeout: 15 * time.Millisecond, -} - -func WorkerCount(workerCount int) Option { - return func(args *Options) { - args.WorkerCount = workerCount - } -} - -func BatchSize(batchSize int) Option { - return func(args *Options) { - args.BatchSize = batchSize - } -} - -func BatchCollectionTimeout(batchCollectionTimeout time.Duration) Option { - return func(args *Options) { - args.BatchCollectionTimeout = batchCollectionTimeout - } -} - -func QueueSize(queueSize int) Option { - return func(args *Options) { - args.QueueSize = queueSize - } -} - -type Options struct { - WorkerCount int - QueueSize int - BatchSize int - BatchCollectionTimeout time.Duration -} - -func (options Options) Override(optionalOptions ...Option) *Options { - result := &options - for _, option := range optionalOptions { - option(result) - } - - return result -} - -type Option func(*Options) diff --git a/packages/batchworkerpool/task.go b/packages/batchworkerpool/task.go deleted file mode 100644 index 7d4ea82e80b0ff0e44714bdea19851d6f6ea329f..0000000000000000000000000000000000000000 --- a/packages/batchworkerpool/task.go +++ /dev/null @@ -1,15 +0,0 @@ -package batchworkerpool - -type Task struct { - params []interface{} - resultChan chan interface{} -} - -func (task *Task) Return(result interface{}) { - task.resultChan <- result - close(task.resultChan) -} - -func (task *Task) Param(index int) interface{} { - return task.params[index] -} diff --git a/packages/client/bundle.go b/packages/client/bundle.go index 200cd04aeab315b8aeda071412f066a03eb78ad1..da25cb6f3ad615eb5a1b7e6e68edeaa33961e338 100644 --- a/packages/client/bundle.go +++ b/packages/client/bundle.go @@ -1,8 +1,8 @@ package client import ( - "github.com/iotaledger/goshimmer/packages/curl" "github.com/iotaledger/goshimmer/packages/model/value_transaction" + "github.com/iotaledger/iota.go/curl" "github.com/iotaledger/iota.go/trinary" ) @@ -31,11 +31,9 @@ func CalculateBundleHash(transactions []*value_transaction.ValueTransaction) tri copy(concatenatedBundleEssences[value_transaction.BUNDLE_ESSENCE_SIZE*i:value_transaction.BUNDLE_ESSENCE_SIZE*(i+1)], bundleTransaction.GetBundleEssence(lastInputAddress != bundleTransaction.GetAddress())) } - var bundleHash = make(trinary.Trits, 243) - - hasher := curl.NewCurl(243, 81) - hasher.Absorb(concatenatedBundleEssences, 0, len(concatenatedBundleEssences)) - hasher.Squeeze(bundleHash, 0, 243) - + bundleHash, err := curl.HashTrits(concatenatedBundleEssences) + if err != nil { + panic(err) + } return trinary.MustTritsToTrytes(bundleHash) } diff --git a/packages/client/options.go b/packages/client/options.go deleted file mode 100644 index da13c8ef3ca33e1788a7b9560e0ade4e46b5f6f6..0000000000000000000000000000000000000000 --- a/packages/client/options.go +++ /dev/null @@ -1 +0,0 @@ -package client diff --git a/packages/client/valuebundlefactory.go b/packages/client/valuebundlefactory.go deleted file mode 100644 index 066c0877629793c1cfd3272153f774827271a630..0000000000000000000000000000000000000000 --- a/packages/client/valuebundlefactory.go +++ /dev/null @@ -1,26 +0,0 @@ -package client - -import ( - "github.com/iotaledger/iota.go/consts" - "github.com/iotaledger/iota.go/trinary" -) - -type ValueBundleFactory struct { - seed trinary.Trytes - securityLevel consts.SecurityLevel - seedInputs map[uint64]uint64 - seedOutputs map[uint64]uint64 -} - -func New(seed trinary.Trytes, securityLevel consts.SecurityLevel) *ValueBundleFactory { - return &ValueBundleFactory{ - seed: seed, - securityLevel: securityLevel, - seedInputs: make(map[uint64]uint64), - seedOutputs: make(map[uint64]uint64), - } -} - -func (factory *ValueBundleFactory) AddInput(addressIndex uint64, value uint64) { - factory.seedInputs[addressIndex] = value -} diff --git a/packages/curl/batch_hasher.go b/packages/curl/batch_hasher.go deleted file mode 100644 index 1a4d14681b950cbb7db0ddfe8ac91fd66b34b47c..0000000000000000000000000000000000000000 --- a/packages/curl/batch_hasher.go +++ /dev/null @@ -1,66 +0,0 @@ -package curl - -import ( - "strconv" - - "github.com/iotaledger/goshimmer/packages/batchworkerpool" - "github.com/iotaledger/goshimmer/packages/ternary" - "github.com/iotaledger/iota.go/trinary" -) - -type BatchHasher struct { - hashLength int - rounds int - workerPool *batchworkerpool.BatchWorkerPool -} - -func NewBatchHasher(hashLength int, rounds int) (result *BatchHasher) { - result = &BatchHasher{ - hashLength: hashLength, - rounds: rounds, - } - - result.workerPool = batchworkerpool.New(result.processHashes, batchworkerpool.BatchSize(strconv.IntSize), batchworkerpool.WorkerCount(100), batchworkerpool.QueueSize(500000)) - result.workerPool.Start() - - return -} - -func (this *BatchHasher) Hash(trits trinary.Trits) trinary.Trits { - return (<-this.workerPool.Submit(trits)).(trinary.Trits) -} - -func (this *BatchHasher) processHashes(tasks []batchworkerpool.Task) { - if len(tasks) > 1 { - // multiplex the requests - multiplexer := ternary.NewBCTernaryMultiplexer() - for _, hashRequest := range tasks { - multiplexer.Add(hashRequest.Param(0).(trinary.Trits)) - } - bcTrits, err := multiplexer.Extract() - if err != nil { - panic(err) - } - - // calculate the hash - bctCurl := NewBCTCurl(this.hashLength, this.rounds, strconv.IntSize) - bctCurl.Reset() - bctCurl.Absorb(bcTrits) - - // extract the results from the demultiplexer - demux := ternary.NewBCTernaryDemultiplexer(bctCurl.Squeeze(243)) - for i, task := range tasks { - task.Return(demux.Get(i)) - } - } else { - var resp = make(trinary.Trits, this.hashLength) - - trits := tasks[0].Param(0).(trinary.Trits) - - curl := NewCurl(this.hashLength, this.rounds) - curl.Absorb(trits, 0, len(trits)) - curl.Squeeze(resp, 0, this.hashLength) - - tasks[0].Return(resp) - } -} diff --git a/packages/curl/batch_hasher_test.go b/packages/curl/batch_hasher_test.go deleted file mode 100644 index 71eac47150aa9e4a951dfe173588256a382abdbd..0000000000000000000000000000000000000000 --- a/packages/curl/batch_hasher_test.go +++ /dev/null @@ -1,96 +0,0 @@ -package curl - -import ( - "crypto/ed25519" - "sync" - "testing" - - "github.com/iotaledger/iota.go/trinary" - "golang.org/x/crypto/blake2b" -) - -type zeroReader struct{} - -func (zeroReader) Read(buf []byte) (int, error) { - for i := range buf { - buf[i] = 0 - } - return len(buf), nil -} - -func BenchmarkEd25519(b *testing.B) { - var zero zeroReader - public, private, _ := ed25519.GenerateKey(zero) - - message := make([]byte, 75) - sig := ed25519.Sign(private, message) - - b.ResetTimer() - - var wg sync.WaitGroup - for i := 0; i < b.N; i++ { - wg.Add(1) - - go func() { - if !ed25519.Verify(public, message, sig) { - panic("valid signature rejected") - } - - wg.Done() - }() - } - wg.Wait() -} - -var sampleTransactionData = make([]byte, 750) - -func BenchmarkBytesToTrits(b *testing.B) { - bytes := blake2b.Sum512(sampleTransactionData) - - b.ResetTimer() - - var wg sync.WaitGroup - for i := 0; i < b.N; i++ { - wg.Add(1) - - go func() { - _, _ = trinary.BytesToTrits(bytes[:]) - - wg.Done() - }() - } - wg.Wait() -} - -func BenchmarkBlake2b(b *testing.B) { - var wg sync.WaitGroup - for i := 0; i < b.N; i++ { - wg.Add(1) - - go func() { - blake2b.Sum256(sampleTransactionData) - - wg.Done() - }() - } - wg.Wait() -} - -func BenchmarkBatchHasher_Hash(b *testing.B) { - batchHasher := NewBatchHasher(243, 81) - tritsToHash := make(trinary.Trits, 7500) - - b.ResetTimer() - - var wg sync.WaitGroup - for i := 0; i < b.N; i++ { - wg.Add(1) - - go func() { - batchHasher.Hash(tritsToHash) - - wg.Done() - }() - } - wg.Wait() -} diff --git a/packages/curl/bct_curl.go b/packages/curl/bct_curl.go deleted file mode 100644 index 8a5e7a5be26b582279f66b414492ae0e481d3ed8..0000000000000000000000000000000000000000 --- a/packages/curl/bct_curl.go +++ /dev/null @@ -1,124 +0,0 @@ -package curl - -import "github.com/iotaledger/goshimmer/packages/ternary" - -const ( - NUMBER_OF_TRITS_IN_A_TRYTE = 3 -) - -type BCTCurl struct { - hashLength int - numberOfRounds int - highLongBits uint - stateLength int - state ternary.BCTrits - cTransform func() -} - -func NewBCTCurl(hashLength int, numberOfRounds int, batchSize int) *BCTCurl { - - var highLongBits uint - for i := 0; i < batchSize; i++ { - highLongBits += 1 << uint(i) - } - - this := &BCTCurl{ - hashLength: hashLength, - numberOfRounds: numberOfRounds, - highLongBits: highLongBits, - stateLength: NUMBER_OF_TRITS_IN_A_TRYTE * hashLength, - state: ternary.BCTrits{ - Lo: make([]uint, NUMBER_OF_TRITS_IN_A_TRYTE*hashLength), - Hi: make([]uint, NUMBER_OF_TRITS_IN_A_TRYTE*hashLength), - }, - cTransform: nil, - } - - this.Reset() - - return this -} - -func (this *BCTCurl) Reset() { - for i := 0; i < this.stateLength; i++ { - this.state.Lo[i] = this.highLongBits - this.state.Hi[i] = this.highLongBits - } -} - -func (this *BCTCurl) Transform() { - scratchPadLo := make([]uint, this.stateLength) - scratchPadHi := make([]uint, this.stateLength) - scratchPadIndex := 0 - - for round := this.numberOfRounds; round > 0; round-- { - copy(scratchPadLo, this.state.Lo) - copy(scratchPadHi, this.state.Hi) - for stateIndex := 0; stateIndex < this.stateLength; stateIndex++ { - alpha := scratchPadLo[scratchPadIndex] - beta := scratchPadHi[scratchPadIndex] - - if scratchPadIndex < 365 { - scratchPadIndex += 364 - } else { - scratchPadIndex -= 365 - } - - delta := beta ^ scratchPadLo[scratchPadIndex] - - this.state.Lo[stateIndex] = ^(delta & alpha) - this.state.Hi[stateIndex] = delta | (alpha ^ scratchPadHi[scratchPadIndex]) - } - } -} - -func (this *BCTCurl) Absorb(bcTrits ternary.BCTrits) { - length := len(bcTrits.Lo) - offset := 0 - - for { - var lengthToCopy int - if length < this.hashLength { - lengthToCopy = length - } else { - lengthToCopy = this.hashLength - } - - copy(this.state.Lo[0:lengthToCopy], bcTrits.Lo[offset:offset+lengthToCopy]) - copy(this.state.Hi[0:lengthToCopy], bcTrits.Hi[offset:offset+lengthToCopy]) - this.Transform() - - offset += lengthToCopy - length -= lengthToCopy - - if length <= 0 { - break - } - } -} - -func (this *BCTCurl) Squeeze(tritCount int) ternary.BCTrits { - result := ternary.BCTrits{ - Lo: make([]uint, tritCount), - Hi: make([]uint, tritCount), - } - hashCount := tritCount / this.hashLength - - for i := 0; i < hashCount; i++ { - copy(result.Lo[i*this.hashLength:(i+1)*this.hashLength], this.state.Lo[0:this.hashLength]) - copy(result.Hi[i*this.hashLength:(i+1)*this.hashLength], this.state.Hi[0:this.hashLength]) - - this.Transform() - } - - last := tritCount - hashCount*this.hashLength - - copy(result.Lo[tritCount-last:], this.state.Lo[0:last]) - copy(result.Hi[tritCount-last:], this.state.Hi[0:last]) - - if tritCount%this.hashLength != 0 { - this.Transform() - } - - return result -} diff --git a/packages/curl/curl.go b/packages/curl/curl.go deleted file mode 100644 index 621ada160b0b6698d17043d747d27285bb1eb881..0000000000000000000000000000000000000000 --- a/packages/curl/curl.go +++ /dev/null @@ -1,103 +0,0 @@ -package curl - -import ( - "math" - - "github.com/iotaledger/iota.go/trinary" -) - -const ( - HASH_LENGTH = 243 - STATE_LENGTH = 3 * HASH_LENGTH -) - -var ( - TRUTH_TABLE = trinary.Trits{1, 0, -1, 2, 1, -1, 0, 2, -1, 1, 0} -) - -type Hash interface { - Initialize() - InitializeCurl(trits *[]int8, length int, rounds int) - Reset() - Absorb(trits *[]int8, offset int, length int) - Squeeze(resp []int8, offset int, length int) []int -} - -type Curl struct { - Hash - state trinary.Trits - hashLength int - rounds int -} - -func NewCurl(hashLength int, rounds int) *Curl { - this := &Curl{ - hashLength: hashLength, - rounds: rounds, - } - - this.Reset() - - return this -} - -func (curl *Curl) Initialize() { - curl.InitializeCurl(nil, 0, curl.rounds) -} - -func (curl *Curl) InitializeCurl(trits trinary.Trits, length int, rounds int) { - curl.rounds = rounds - if trits != nil { - curl.state = trits - } else { - curl.state = make(trinary.Trits, STATE_LENGTH) - } -} - -func (curl *Curl) Reset() { - curl.InitializeCurl(nil, 0, curl.rounds) -} - -func (curl *Curl) Absorb(trits trinary.Trits, offset int, length int) { - for { - limit := int(math.Min(HASH_LENGTH, float64(length))) - copy(curl.state, trits[offset:offset+limit]) - curl.Transform() - offset += HASH_LENGTH - length -= HASH_LENGTH - if length <= 0 { - break - } - } -} - -func (curl *Curl) Squeeze(resp trinary.Trits, offset int, length int) trinary.Trits { - for { - limit := int(math.Min(HASH_LENGTH, float64(length))) - copy(resp[offset:offset+limit], curl.state) - curl.Transform() - offset += HASH_LENGTH - length -= HASH_LENGTH - if length <= 0 { - break - } - } - return resp -} - -func (curl *Curl) Transform() { - var index = 0 - for round := 0; round < curl.rounds; round++ { - stateCopy := make(trinary.Trits, STATE_LENGTH) - copy(stateCopy, curl.state) - for i := 0; i < STATE_LENGTH; i++ { - incr := 364 - if index >= 365 { - incr = -365 - } - index2 := index + incr - curl.state[i] = TRUTH_TABLE[stateCopy[index]+(stateCopy[index2]<<2)+5] - index = index2 - } - } -} diff --git a/packages/curl/curlp81.go b/packages/curl/curlp81.go deleted file mode 100644 index 579271500b19e802cf94a11c665f6308cb2b8016..0000000000000000000000000000000000000000 --- a/packages/curl/curlp81.go +++ /dev/null @@ -1,10 +0,0 @@ -package curl - -const ( - CURLP81_HASH_LENGTH = 243 - CURLP81_ROUNDS = 81 -) - -var ( - CURLP81 = NewBatchHasher(CURLP81_HASH_LENGTH, CURLP81_ROUNDS) -) diff --git a/packages/filter/byte_array_filter.go b/packages/filter/byte_array_filter.go deleted file mode 100644 index e5955c32c3d34045b0764b83d2566611ee72cce7..0000000000000000000000000000000000000000 --- a/packages/filter/byte_array_filter.go +++ /dev/null @@ -1,54 +0,0 @@ -package filter - -import ( - "sync" - - "github.com/iotaledger/hive.go/typeutils" -) - -type ByteArrayFilter struct { - byteArrays [][]byte - byteArraysByKey map[string]bool - size int - mutex sync.RWMutex -} - -func NewByteArrayFilter(size int) *ByteArrayFilter { - return &ByteArrayFilter{ - byteArrays: make([][]byte, 0, size), - byteArraysByKey: make(map[string]bool, size), - size: size, - } -} - -func (filter *ByteArrayFilter) Contains(byteArray []byte) bool { - filter.mutex.RLock() - defer filter.mutex.RUnlock() - - _, exists := filter.byteArraysByKey[typeutils.BytesToString(byteArray)] - - return exists -} - -func (filter *ByteArrayFilter) Add(byteArray []byte) bool { - key := typeutils.BytesToString(byteArray) - - filter.mutex.Lock() - defer filter.mutex.Unlock() - - if _, exists := filter.byteArraysByKey[key]; !exists { - if len(filter.byteArrays) == filter.size { - delete(filter.byteArraysByKey, typeutils.BytesToString(filter.byteArrays[0])) - - filter.byteArrays = append(filter.byteArrays[1:], byteArray) - } else { - filter.byteArrays = append(filter.byteArrays, byteArray) - } - - filter.byteArraysByKey[key] = true - - return true - } else { - return false - } -} diff --git a/packages/filter/byte_array_filter_test.go b/packages/filter/byte_array_filter_test.go deleted file mode 100644 index a017866b4ea40ccc079d37f0fea83fa59f42efb4..0000000000000000000000000000000000000000 --- a/packages/filter/byte_array_filter_test.go +++ /dev/null @@ -1,45 +0,0 @@ -package filter - -import "testing" - -func BenchmarkAdd(b *testing.B) { - filter, byteArray := setupFilter(15000, 1604) - - b.ResetTimer() - - for i := 0; i < b.N; i++ { - filter.Add(byteArray) - } -} - -func BenchmarkContains(b *testing.B) { - filter, byteArray := setupFilter(15000, 1604) - - b.ResetTimer() - - for i := 0; i < b.N; i++ { - filter.Contains(byteArray) - } -} - -func setupFilter(filterSize int, byteArraySize int) (*ByteArrayFilter, []byte) { - filter := NewByteArrayFilter(filterSize) - - for j := 0; j < filterSize; j++ { - byteArray := make([]byte, byteArraySize) - - for i := 0; i < len(byteArray); i++ { - byteArray[(i+j)%byteArraySize] = byte((i + j) % 128) - } - - filter.Add(byteArray) - } - - byteArray := make([]byte, byteArraySize) - - for i := 0; i < len(byteArray); i++ { - byteArray[i] = byte(i % 128) - } - - return filter, byteArray -} diff --git a/packages/settings/settings.go b/packages/settings/settings.go deleted file mode 100644 index df0ad335fab42ad718807dafe59a5693c9c9fea3..0000000000000000000000000000000000000000 --- a/packages/settings/settings.go +++ /dev/null @@ -1,31 +0,0 @@ -package settings - -import ( - "sync" - - "github.com/iotaledger/goshimmer/packages/database" -) - -var settingsDatabase database.Database - -var lazyInit sync.Once - -func Get(key []byte) ([]byte, error) { - lazyInit.Do(initDb) - - return settingsDatabase.Get(key) -} - -func Set(key []byte, value []byte) error { - lazyInit.Do(initDb) - - return settingsDatabase.Set(key, value) -} - -func initDb() { - if db, err := database.Get("settings"); err != nil { - panic(err) - } else { - settingsDatabase = db - } -} diff --git a/packages/ternary/bc_ternary.go b/packages/ternary/bc_ternary.go deleted file mode 100644 index cc7432ca0f0a2a3d5840d26fdc8fa546d2bb4725..0000000000000000000000000000000000000000 --- a/packages/ternary/bc_ternary.go +++ /dev/null @@ -1,13 +0,0 @@ -package ternary - -// a Binary Coded Trit encodes a Trit in 2 bits with -1 => 00, 0 => 01 and 1 => 10 -type BCTrit struct { - Lo uint - Hi uint -} - -// a Binary Coded Trytes consists out of many Binary Coded Trits -type BCTrits struct { - Lo []uint - Hi []uint -} diff --git a/packages/ternary/bc_ternary_demultiplexer.go b/packages/ternary/bc_ternary_demultiplexer.go deleted file mode 100644 index 96733a74712a878266674e63c06a612c9f70ddde..0000000000000000000000000000000000000000 --- a/packages/ternary/bc_ternary_demultiplexer.go +++ /dev/null @@ -1,41 +0,0 @@ -package ternary - -import ( - . "github.com/iotaledger/iota.go/trinary" -) - -type BCTernaryDemultiplexer struct { - bcTrits BCTrits -} - -func NewBCTernaryDemultiplexer(bcTrits BCTrits) *BCTernaryDemultiplexer { - this := &BCTernaryDemultiplexer{bcTrits: bcTrits} - - return this -} - -func (this *BCTernaryDemultiplexer) Get(index int) Trits { - length := len(this.bcTrits.Lo) - result := make(Trits, length) - - for i := 0; i < length; i++ { - low := (this.bcTrits.Lo[i] >> uint(index)) & 1 - hi := (this.bcTrits.Hi[i] >> uint(index)) & 1 - - switch true { - case low == 1 && hi == 0: - result[i] = -1 - - case low == 0 && hi == 1: - result[i] = 1 - - case low == 1 && hi == 1: - result[i] = 0 - - default: - result[i] = 0 - } - } - - return result -} diff --git a/packages/ternary/bc_ternary_multiplexer.go b/packages/ternary/bc_ternary_multiplexer.go deleted file mode 100644 index f98991b6217ca4025df39b2a7d6d028d32eb9dfa..0000000000000000000000000000000000000000 --- a/packages/ternary/bc_ternary_multiplexer.go +++ /dev/null @@ -1,64 +0,0 @@ -package ternary - -import ( - "errors" - "strconv" - - . "github.com/iotaledger/iota.go/trinary" -) - -type BCTernaryMultiplexer struct { - trinaries []Trits -} - -func NewBCTernaryMultiplexer() *BCTernaryMultiplexer { - this := &BCTernaryMultiplexer{make([]Trits, 0)} - - return this -} - -func (this *BCTernaryMultiplexer) Add(trits Trits) int { - this.trinaries = append(this.trinaries, trits) - - return len(this.trinaries) - 1 -} - -func (this *BCTernaryMultiplexer) Get(index int) Trits { - return this.trinaries[index] -} - -func (this *BCTernaryMultiplexer) Extract() (BCTrits, error) { - trinariesCount := len(this.trinaries) - tritsCount := len(this.trinaries[0]) - - result := BCTrits{ - Lo: make([]uint, tritsCount), - Hi: make([]uint, tritsCount), - } - - for i := 0; i < tritsCount; i++ { - bcTrit := &BCTrit{0, 0} - - for j := 0; j < trinariesCount; j++ { - switch this.trinaries[j][i] { - case -1: - bcTrit.Lo |= 1 << uint(j) - - case 1: - bcTrit.Hi |= 1 << uint(j) - - case 0: - bcTrit.Lo |= 1 << uint(j) - bcTrit.Hi |= 1 << uint(j) - - default: - return result, errors.New("Invalid trit #" + strconv.Itoa(i) + " in trits #" + strconv.Itoa(j)) - } - } - - result.Lo[i] = bcTrit.Lo - result.Hi[i] = bcTrit.Hi - } - - return result, nil -} diff --git a/plugins/bundleprocessor/valuebundleprocessor.go b/plugins/bundleprocessor/valuebundleprocessor.go index 271fdb0633df4e48e5e25c4a0a503190088e38f0..63c772e12d76c56a565fc6cb3adb611b64ee519c 100644 --- a/plugins/bundleprocessor/valuebundleprocessor.go +++ b/plugins/bundleprocessor/valuebundleprocessor.go @@ -1,11 +1,11 @@ package bundleprocessor import ( - "github.com/iotaledger/goshimmer/packages/curl" "github.com/iotaledger/goshimmer/packages/errors" "github.com/iotaledger/goshimmer/packages/model/bundle" "github.com/iotaledger/goshimmer/packages/model/value_transaction" "github.com/iotaledger/goshimmer/packages/workerpool" + "github.com/iotaledger/iota.go/curl" "github.com/iotaledger/iota.go/signing" "github.com/iotaledger/iota.go/trinary" ) @@ -38,12 +38,10 @@ func CalculateBundleHash(transactions []*value_transaction.ValueTransaction) tri copy(concatenatedBundleEssences[value_transaction.BUNDLE_ESSENCE_SIZE*i:value_transaction.BUNDLE_ESSENCE_SIZE*(i+1)], bundleTransaction.GetBundleEssence(lastInputAddress != bundleTransaction.GetAddress())) } - var bundleHash = make(trinary.Trits, 243) - - hasher := curl.NewCurl(243, 81) - hasher.Absorb(concatenatedBundleEssences, 0, len(concatenatedBundleEssences)) - hasher.Squeeze(bundleHash, 0, 243) - + bundleHash, err := curl.HashTrits(concatenatedBundleEssences) + if err != nil { + panic(err) + } return trinary.MustTritsToTrytes(bundleHash) } diff --git a/plugins/validator/plugin.go b/plugins/validator/plugin.go deleted file mode 100644 index b20ba75d573100fd0e10af65600a0f3a0871366d..0000000000000000000000000000000000000000 --- a/plugins/validator/plugin.go +++ /dev/null @@ -1,69 +0,0 @@ -package validator - -import ( - "github.com/iotaledger/goshimmer/packages/model/bundle" - "github.com/iotaledger/goshimmer/packages/model/value_transaction" - "github.com/iotaledger/goshimmer/plugins/bundleprocessor" - "github.com/iotaledger/hive.go/events" - "github.com/iotaledger/hive.go/logger" - "github.com/iotaledger/hive.go/node" - "github.com/iotaledger/iota.go/kerl" - "github.com/iotaledger/iota.go/signing" - . "github.com/iotaledger/iota.go/trinary" -) - -var PLUGIN = node.NewPlugin("Validator", node.Enabled, configure, run) -var log *logger.Logger - -func validateSignatures(bundleHash Hash, txs []*value_transaction.ValueTransaction) (bool, error) { - for i, tx := range txs { - // ignore all non-input transactions - if tx.GetValue() >= 0 { - continue - } - - address := tx.GetAddress() - - // it is unknown how many fragments there will be - fragments := []Trytes{tx.GetSignatureMessageFragment()} - - // each consecutive meta transaction with the same address contains another signature fragment - for j := i; j < len(txs)-1; j++ { - otherTx := txs[j+1] - if otherTx.GetValue() != 0 || otherTx.GetAddress() != address { - break - } - - fragments = append(fragments, otherTx.GetSignatureMessageFragment()) - } - - // validate all the fragments against the address using Kerl - valid, err := signing.ValidateSignatures(address, fragments, bundleHash, kerl.NewKerl()) - if err != nil { - return false, err - } - if !valid { - return false, nil - } - } - - return true, nil -} - -func configure(plugin *node.Plugin) { - log = logger.NewLogger("Validator") - bundleprocessor.Events.BundleSolid.Attach(events.NewClosure(func(b *bundle.Bundle, txs []*value_transaction.ValueTransaction) { - // signature are verified against the bundle hash - valid, err := validateSignatures(b.GetBundleEssenceHash(), txs) - if !valid { - if err != nil { - log.Errorf("Invalid signature: %s", err.Error()) - } else { - log.Error("Invalid signature") - } - } - })) -} - -func run(*node.Plugin) { -} diff --git a/plugins/validator/validator_test.go b/plugins/validator/validator_test.go deleted file mode 100644 index fd4f70b431db7fc3765c5847e235d1888571b4bb..0000000000000000000000000000000000000000 --- a/plugins/validator/validator_test.go +++ /dev/null @@ -1,54 +0,0 @@ -package validator - -import ( - "fmt" - - "github.com/iotaledger/iota.go/address" - . "github.com/iotaledger/iota.go/consts" - "github.com/iotaledger/iota.go/signing" - . "github.com/iotaledger/iota.go/trinary" -) - -const ( - exampleHash = "999999999999999999999999999999999999999999999999999999999999999999999999999999999" - exampleSeed = exampleHash - exmapleIndex = 0 - exampleSec = SecurityLevelLow -) - -// Creates bundle signature fragments for the given address index and bundle hash. -// Each signature fragment after the first must go into its own meta transaction with value = 0. -func signature(seed Trytes, index uint64, sec SecurityLevel, bundleHash Hash) []Trytes { - // compute seed based on address index - subseed, _ := signing.Subseed(seed, index) - // generate the private key - prvKey, _ := signing.Key(subseed, sec) - - normalizedBundleHash := signing.NormalizedBundleHash(bundleHash) - - signatureFragments := make([]Trytes, sec) - for i := 0; i < int(sec); i++ { - // each security level signs one third of the (normalized) bundle hash - signedFragTrits, _ := signing.SignatureFragment( - normalizedBundleHash[i*HashTrytesSize/3:(i+1)*HashTrytesSize/3], - prvKey[i*KeyFragmentLength:(i+1)*KeyFragmentLength], - ) - signatureFragments[i] = MustTritsToTrytes(signedFragTrits) - } - - return signatureFragments -} - -func ExamplePLUGIN() { - // corresponding address to validate against. - addr, _ := address.GenerateAddress(exampleSeed, exmapleIndex, exampleSec) - fmt.Println(addr) - - // compute the signature fragments which would be added to the (meta) transactions - signatureFragments := signature(exampleSeed, exmapleIndex, exampleSec, exampleHash) - fmt.Println(signatureFragments[0]) - - // Output: - // BSIXFJENGVJSOWPVHVALMPOPO9PUKHXDQI9VDELCBJXN9TCNQPTFEDMPQCVBOJSZUHEOABYYYAT9IAHHY - // GHHKPBXOOBOEHGGEEKYPH9MANWEKSQTQJFJ9KUTMJQAVITYRZMNLUESQARNHAWUJAPPZSQ9A9RUKABCE9KZPJDUEHVZEOSCQMTCC9AWBGWZLZEXMJ9YOQUVIBGMXSINCOLUATYDDUBAALHCBIONNRQIVIPUFPOIFHYRBFBGXXNVYXFZUSTTA9LYGGITTAJCVDE9GCFRGIOTXLQ9ZJDLONDLZ9OPS9TNYVKLTCGFBH9QPJWLIGADWMTJVCLAUCOZFDSRRCAMVWYFXRPGPMIOPIW9GBWANVSMPONQOTNLLYYHXAMZMMNRHMRXHEIXPVNORNGZZ9ZAU9RAWASOZNIBKDWYZWKCMLEUE9UVDHZ9XXGPXZABB9FGTNDTDFTYCKLKRRC9GZFKHKDGAWPBWEUPPWISYBBNZCIBERPXTMZPZHPKKUQUPBIJBIKZAGFHDDNAGCRQMWOMLUMAYKRBMHPMDWZK9JRBDWCJCBJQYMDUBNKOIRSJSVTCNKROZ9KLFBZLOXQOASLCFETCNZRPZULOABOFCUO9WKNQILLLTQ9GWVDBASBGSKUHFHRXOKQIBRCLUYZBZMTXTIG9BJNYHTJQQOECXOWLIDOYKMFJWKRCYW99VZILSPU9I9ZSTTBZVGISUHPCWLGKCFNLIHJNCL9OWQDNAKJAGRKTGCTDRHXVAYXOHNFVJYBMZLMXV9VINNIAWONYDYOKHHMOFFEOOVBMVMYABWRWLZTWJECKKAGPCIMUDZZIEJCFBXFIYKDRMWZIOEUZNLOXZJRDHVVKOTJWMLTIXVIRJSXUBLFGOCCLEIZVCDYD9FEMCRUOERPRDFGUJSALRSOBN9J9XDTUAJZFLHUGQI9MCXZCYWTTIHNQUPUYPDRJLRZG9HAXHYQDSSCQNPTBYKNQUWZDE9QUESZJASRXHNW9OKAVUKLLMVGOJJRZCPRXSRYUECLNQEFIHI9S9NNEN9KACVIKCZYDEKCDNUASUJWMTVLSPBOBQMQEMZJXJVQAMUGBTMNWEWVJSXNZKIAADSQCCLISYSUZICSIVXZUG9MTICGWXKXKJDW9TOUBS9BTOUFUKWEBVIIJTGD9IBLRHBCPICWSZQNJQERTBOZGLJFCXKGQTAHIWKOSGHRMMWXABQYHVHOPG9XDIXMIRBXHOSYBCHSFWORNLUD9JAB9ICBIPXYVLIXYNRHJVEDMIRSAGXKZKSFZADJ9GA9DGJZAJTXZGIKRXVBCCBGJPJWJJZXZRQNWLEUZEFTWOXUBTAGDPPKKPKRYPGXVSRWLRNEDAXHZYT9DRN9L9ZWXPTTOSKMGTPQQXHACAKESRQXVXXNOLIATRKDGGJNIDWWYKQSLTC9ERTPMNXQHZNVNSBGIRRQHMOCOGDWPQAU9WPRSGZMPXZWQADUFUAWVGESLIWZNV9WNANDMZAOLXIHAOSFBADWVVAHMJVFNX9BGMMYGMJCUOYCSKJWIUMYHQFQXCFQXQNB9VTBLAYGKUZLFH9UVWIQJVLMLOZDLLIPJZSNXBPWAKKZWKCVSWUSBSQLBIAX9SQGMNPCJWTQDQEASSWWCSTVJRFDBPBLNYU9CNFUYINVMQPJZGKKUH9QBMUVWFSLPXWKBBWKNLMHGCEMJWCTNXZYWCFXYU9XLTWDSROJDTCRARMBNYDDD99HCFMXMUCO9NJSRA9G9HGWRTWNDBDQLBTCNYIVRMWRWPDJDDYCDODGEBNFTNINPNMZYMJJHVZSNEIJOAPGHAIVCZHQIULTRIZ9ML9LCWTQVGLBKKBGJYZTOZZIYUBCBKHKYUHCFGZKDERTWYHNYWSWLGPUGRB9WNQTHOMBFPKUQZREUQCNXL9MFSZCNBN9PTAVCERMWTTFDZL9BJQMC9OUBWGDTURAEYTYRDNFUBATOWFSVNXJC9JUPARMU9MINY9RWRHIXBPNIUADFAEP9F9FWNJNRPNGLWHRYYCV9ZIWBOUZPFZTWDLOCNOYZQLWFJHZ99ZBLUDSIQBJOJXMQJBUCYYMROBCJJJNCETVUYRXKHAWGUBIWOKQXOIOYBQKNDXZCKXQZLWEMXYLJPODRMOQUYOAATZZQ9JZDR9KPIHRQKIEAQNO9OVXNHDFCUUIZRQDWYGKUAYIGHGIIJIOIERLVNDUEBZUAQGDZMWNGXQPYSNWUEGF9BQDFJEQRPEGFGJTQFWO9PWECFGNDH9LW -} diff --git a/runMasternode.bat b/runMasternode.bat deleted file mode 100644 index 9049e5cd1b184017696a45a2c66398e1f73c137d..0000000000000000000000000000000000000000 --- a/runMasternode.bat +++ /dev/null @@ -1,8 +0,0 @@ -@echo off -SETLOCAL EnableDelayedExpansion - -Set PEERING_PORT=14000 - -cd entryNode -start /b "" "go_build_github_com_iotaledger_goshimmer.exe" -autopeering-port %PEERING_PORT% -autopeering-entry-nodes e83c2e1f0ba552cbb6d08d819b7b2196332f8423@127.0.0.1:14000 -node-log-level 4 -node-disable-plugins statusscreen -cd .. \ No newline at end of file diff --git a/runSimulation.bat b/runSimulation.bat deleted file mode 100644 index 02b60bb377db3f6c418a877d9935ba0751041934..0000000000000000000000000000000000000000 --- a/runSimulation.bat +++ /dev/null @@ -1,20 +0,0 @@ -@echo off -SETLOCAL EnableDelayedExpansion - -Set PEERING_PORT=14000 - -mkdir testNodes -cd testNodes - -FOR /L %%i IN (1,1,100) DO ( - set /A PEERING_PORT=PEERING_PORT+1 - - del /Q /S node%%i - mkdir node%%i - copy ..\entryNode\go_build_github_com_iotaledger_goshimmer.exe node%%i\goshimmer.exe - cd node%%i - start /b "" "goshimmer.exe" -autopeering-port !PEERING_PORT! -autopeering-entry-nodes e83c2e1f0ba552cbb6d08d819b7b2196332f8423@127.0.0.1:14000 -node-log-level 4 -node-disable-plugins statusscreen - cd .. -) - -cd .. \ No newline at end of file