diff --git a/go.mod b/go.mod index 8b68a9a7cf9eb1382ed9c028e6ab22776996ffcf..afa2906d340690bd313143758cb9eebea0bae2a2 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.13 require ( github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 // indirect github.com/dgraph-io/badger v1.6.0 - github.com/dgraph-io/badger/v2 v2.0.0 + github.com/dgraph-io/badger/v2 v2.0.1 github.com/dgrijalva/jwt-go v3.2.0+incompatible github.com/emicklei/dot v0.10.1 github.com/ethereum/go-ethereum v1.9.3 @@ -15,7 +15,7 @@ require ( github.com/golang/protobuf v1.3.2 // indirect github.com/google/open-location-code/go v0.0.0-20190903173953-119bc96a3a51 github.com/gorilla/websocket v1.4.1 - github.com/iotaledger/hive.go v0.0.0-20200107105553-d35f44074aa2 + github.com/iotaledger/hive.go v0.0.0-20200131164002-e50853dd9172 github.com/iotaledger/iota.go v1.0.0-beta.9 github.com/kr/text v0.1.0 github.com/labstack/echo v3.3.10+incompatible diff --git a/go.sum b/go.sum index 867562cddd4cdf3925b5dc7a1ee90f9c242231fe..ab78d117665377fc563d08c1760d5f0fe70d16f8 100644 --- a/go.sum +++ b/go.sum @@ -33,6 +33,8 @@ github.com/dgraph-io/badger v1.6.0 h1:DshxFxZWXUcO0xX476VJC07Xsr6ZCBVRHKZ93Oh7Ev github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= github.com/dgraph-io/badger/v2 v2.0.0 h1:Cr05o2TUd2IcLbEY0aGd8mbjm1YyQpy+dswo3BcDXrE= github.com/dgraph-io/badger/v2 v2.0.0/go.mod h1:YoRSIp1LmAJ7zH7tZwRvjNMUYLxB4wl3ebYkaIruZ04= +github.com/dgraph-io/badger/v2 v2.0.1 h1:+D6dhIqC6jIeCclnxMHqk4HPuXgrRN5UfBsLR4dNQ3A= +github.com/dgraph-io/badger/v2 v2.0.1/go.mod h1:YoRSIp1LmAJ7zH7tZwRvjNMUYLxB4wl3ebYkaIruZ04= github.com/dgraph-io/ristretto v0.0.0-20191025175511-c1f00be0418e h1:aeUNgwup7PnDOBAD1BOKAqzb/W/NksOj6r3dwKKuqfg= github.com/dgraph-io/ristretto v0.0.0-20191025175511-c1f00be0418e/go.mod h1:edzKIzGvqUCMzhTVWbiTSe75zD9Xxq0GtSBtFmaUTZs= github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= @@ -77,6 +79,7 @@ github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/open-location-code/go v0.0.0-20190903173953-119bc96a3a51 h1:OdVal38kmXn0U3M3CYmPF4cpMLLvD4ioshwrooNfmxs= github.com/google/open-location-code/go v0.0.0-20190903173953-119bc96a3a51/go.mod h1:eJfRN6aj+kR/rnua/rw9jAgYhqoMHldQkdTi+sePRKk= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1 h1:q7AeDBpnBk8AogcD4DSag/Ukw/KV+YhzLj2bP5HvKCM= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= @@ -107,6 +110,10 @@ github.com/iotaledger/hive.go v0.0.0-20200106003337-d78637b86bf2 h1:HBQKEP6PnaEh github.com/iotaledger/hive.go v0.0.0-20200106003337-d78637b86bf2/go.mod h1:vrZrvGaWT1o5kz3Jj2B/PcUtqsFzZnLWrO3zEsGSuwk= github.com/iotaledger/hive.go v0.0.0-20200107105553-d35f44074aa2 h1:o4jOpCuNXSRhbiSJHPR2SuN/qGkKt/LpX+DIQ0rUMSY= github.com/iotaledger/hive.go v0.0.0-20200107105553-d35f44074aa2/go.mod h1:vrZrvGaWT1o5kz3Jj2B/PcUtqsFzZnLWrO3zEsGSuwk= +github.com/iotaledger/hive.go v0.0.0-20200131142821-bdca7883742d h1:3uYitVVvpt/vW1XRLxodkvsiNMjxHHz5HbSkvuqaOoU= +github.com/iotaledger/hive.go v0.0.0-20200131142821-bdca7883742d/go.mod h1:wj3bFHlcX0NiEOWu5+WOg/MI/5N7PKCFnyaziaylB64= +github.com/iotaledger/hive.go v0.0.0-20200131164002-e50853dd9172 h1:QuckesiAtCzfxkxndNaerpeW0AKmxciZtApyjNwe7s4= +github.com/iotaledger/hive.go v0.0.0-20200131164002-e50853dd9172/go.mod h1:wj3bFHlcX0NiEOWu5+WOg/MI/5N7PKCFnyaziaylB64= github.com/iotaledger/iota.go v1.0.0-beta.9 h1:c654s9pkdhMBkABUvWg+6k91MEBbdtmZXP1xDfQpajg= github.com/iotaledger/iota.go v1.0.0-beta.9/go.mod h1:F6WBmYd98mVjAmmPVYhnxg8NNIWCjjH8VWT9qvv3Rc8= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= @@ -178,6 +185,7 @@ github.com/rivo/uniseg v0.0.0-20190513083848-b9f5b9457d44/go.mod h1:J6wj4VEh+S6Z github.com/rivo/uniseg v0.1.0 h1:+2KBaVoUmb9XzDsrx/Ct0W/EYOSFf/nWTauy++DprtY= github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/sasha-s/go-deadlock v0.2.0 h1:lMqc+fUb7RrFS3gQLtoQsJ7/6TV/pAIFvBsqX73DK8Y= github.com/sasha-s/go-deadlock v0.2.0/go.mod h1:StQn567HiB1fF2yJ44N9au7wOhrPS3iZqiDbRupzT10= @@ -223,16 +231,28 @@ github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1: go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.mongodb.org/mongo-driver v1.0.0/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/atomic v1.5.1/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= +go.uber.org/multierr v1.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= +go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190404164418-38d8ce5564a5/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191119213627-4f8c1d86b1ba h1:9bFeDpN3gTqNanMVqNcoR/pJQuP5uroC3t1D7eXozTE= golang.org/x/crypto v0.0.0-20191119213627-4f8c1d86b1ba/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -272,6 +292,13 @@ golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= @@ -281,6 +308,7 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/h2non/gock.v1 v1.0.14/go.mod h1:sX4zAkdYX1TRGJ2JY156cFspQn4yRWn6p9EMdODlynE= @@ -296,3 +324,4 @@ gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/zeromq/goczmq.v4 v4.1.0 h1:CE+FE81mGVs2aSlnbfLuS1oAwdcVywyMM2AC1g33imI= gopkg.in/zeromq/goczmq.v4 v4.1.0/go.mod h1:h4IlfePEYMpFdywGr5gAwKhBBj+hiBl/nF4VoSE4k+0= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= diff --git a/packages/binary/tangle/events.go b/packages/binary/tangle/events.go index 23df13656ff31bbaf9d7561bd6d10c912558c4cd..00f33b4842729a3031ad08bc8e477522e5b5665c 100644 --- a/packages/binary/tangle/events.go +++ b/packages/binary/tangle/events.go @@ -1,9 +1,10 @@ package tangle import ( - "github.com/iotaledger/goshimmer/packages/binary/transaction" - "github.com/iotaledger/goshimmer/packages/binary/transactionmetadata" "github.com/iotaledger/hive.go/events" + + "github.com/iotaledger/goshimmer/packages/binary/tangle/model/transaction" + "github.com/iotaledger/goshimmer/packages/binary/tangle/model/transactionmetadata" ) type Events struct { @@ -34,8 +35,5 @@ func cachedTransactionEvent(handler interface{}, params ...interface{}) { cachedTransaction := params[0].(*transaction.CachedTransaction) cachedTransactionMetadata := params[1].(*transactionmetadata.CachedTransactionMetadata) - cachedTransaction.RegisterConsumer() - cachedTransactionMetadata.RegisterConsumer() - - handler.(func(*transaction.CachedTransaction, *transactionmetadata.CachedTransactionMetadata))(cachedTransaction, cachedTransactionMetadata) + handler.(func(*transaction.CachedTransaction, *transactionmetadata.CachedTransactionMetadata))(cachedTransaction.Retain().(*transaction.CachedTransaction), cachedTransactionMetadata.Retain().(*transactionmetadata.CachedTransactionMetadata)) } diff --git a/packages/binary/tangle/approvers/approvers.go b/packages/binary/tangle/model/approvers/approvers.go similarity index 98% rename from packages/binary/tangle/approvers/approvers.go rename to packages/binary/tangle/model/approvers/approvers.go index 90014e143ddb071753f2cf9aadb42ffe33166b56..178faf9157078196515ba231bcea3d8c05ebe24f 100644 --- a/packages/binary/tangle/approvers/approvers.go +++ b/packages/binary/tangle/model/approvers/approvers.go @@ -4,9 +4,9 @@ import ( "encoding/binary" "sync" + "github.com/iotaledger/goshimmer/packages/binary/tangle/model/transaction" "github.com/iotaledger/goshimmer/packages/binary/types" - "github.com/iotaledger/goshimmer/packages/binary/transaction" "github.com/iotaledger/hive.go/objectstorage" ) diff --git a/packages/binary/tangle/approvers/cached_approvers.go b/packages/binary/tangle/model/approvers/cached_approvers.go similarity index 93% rename from packages/binary/tangle/approvers/cached_approvers.go rename to packages/binary/tangle/model/approvers/cached_approvers.go index 99ed8ad0de9fba2efc49978ecf28dd7c5f55cff0..55e225ba24aa427f2b0252e41519492532e1dd6f 100644 --- a/packages/binary/tangle/approvers/cached_approvers.go +++ b/packages/binary/tangle/model/approvers/cached_approvers.go @@ -5,7 +5,7 @@ import ( ) type CachedApprovers struct { - *objectstorage.CachedObject + objectstorage.CachedObject } func (cachedObject *CachedApprovers) Unwrap() *Approvers { diff --git a/packages/binary/tangle/missingtransaction/cached_missingtransaction.go b/packages/binary/tangle/model/missingtransaction/cached_missingtransaction.go similarity index 93% rename from packages/binary/tangle/missingtransaction/cached_missingtransaction.go rename to packages/binary/tangle/model/missingtransaction/cached_missingtransaction.go index c64e3df3bbf501dde269dfabf20e2204ccee8272..f50f532127ba98e5f9baaaa5bd1095ba0c9d4216 100644 --- a/packages/binary/tangle/missingtransaction/cached_missingtransaction.go +++ b/packages/binary/tangle/model/missingtransaction/cached_missingtransaction.go @@ -5,7 +5,7 @@ import ( ) type CachedMissingTransaction struct { - *objectstorage.CachedObject + objectstorage.CachedObject } func (cachedObject *CachedMissingTransaction) Unwrap() *MissingTransaction { diff --git a/packages/binary/tangle/missingtransaction/missingtransaction.go b/packages/binary/tangle/model/missingtransaction/missingtransaction.go similarity index 94% rename from packages/binary/tangle/missingtransaction/missingtransaction.go rename to packages/binary/tangle/model/missingtransaction/missingtransaction.go index 8ab086318dd288612957930da8ac8e2adbca55c4..ea1715c8d0a127324dd5f6a82ac9b2e2719bd0c0 100644 --- a/packages/binary/tangle/missingtransaction/missingtransaction.go +++ b/packages/binary/tangle/model/missingtransaction/missingtransaction.go @@ -3,8 +3,7 @@ package missingtransaction import ( "time" - "github.com/iotaledger/goshimmer/packages/binary/transaction" - + "github.com/iotaledger/goshimmer/packages/binary/tangle/model/transaction" "github.com/iotaledger/hive.go/objectstorage" ) diff --git a/packages/binary/transaction/cached_transaction.go b/packages/binary/tangle/model/transaction/cached_transaction.go similarity index 72% rename from packages/binary/transaction/cached_transaction.go rename to packages/binary/tangle/model/transaction/cached_transaction.go index 63a61f7edcfa59d61aee1cb2e24f22fdd2cefbc1..5b9bc6a2bc9e0bc3daaf042dc56ef35472421d57 100644 --- a/packages/binary/transaction/cached_transaction.go +++ b/packages/binary/tangle/model/transaction/cached_transaction.go @@ -5,7 +5,11 @@ import ( ) type CachedTransaction struct { - *objectstorage.CachedObject + objectstorage.CachedObject +} + +func (cachedTransaction *CachedTransaction) Retain() objectstorage.CachedObject { + return &CachedTransaction{cachedTransaction.CachedObject.Retain()} } func (cachedTransaction *CachedTransaction) Unwrap() *Transaction { diff --git a/packages/binary/transaction/id.go b/packages/binary/tangle/model/transaction/id.go similarity index 93% rename from packages/binary/transaction/id.go rename to packages/binary/tangle/model/transaction/id.go index 1c0c5165f19ffa69249cdb8d99c1cd9022eaffba..dd5ca1544b311f85740893dd416a04358cb74267 100644 --- a/packages/binary/transaction/id.go +++ b/packages/binary/tangle/model/transaction/id.go @@ -25,7 +25,7 @@ func (id *Id) UnmarshalBinary(data []byte) (err error) { return } -func (id *Id) String() string { +func (id Id) String() string { return base58.Encode(id[:]) } diff --git a/packages/binary/tangle/model/transaction/init.go b/packages/binary/tangle/model/transaction/init.go new file mode 100644 index 0000000000000000000000000000000000000000..5805588c0b6309d978159aa094c6c4966f73a8c9 --- /dev/null +++ b/packages/binary/tangle/model/transaction/init.go @@ -0,0 +1,10 @@ +package transaction + +import ( + "github.com/iotaledger/goshimmer/packages/binary/tangle/model/transaction/payload" + "github.com/iotaledger/goshimmer/packages/binary/tangle/model/transaction/payload/data" +) + +func init() { + payload.SetGenericUnmarshalerFactory(data.GenericPayloadUnmarshalerFactory) +} diff --git a/packages/binary/transaction/payload/data/data.go b/packages/binary/tangle/model/transaction/payload/data/data.go similarity index 91% rename from packages/binary/transaction/payload/data/data.go rename to packages/binary/tangle/model/transaction/payload/data/data.go index a701c64122db7d40db2dcf12d2cca9e6057a2708..8b41b99ce062ee65fee8cbd25b5561bc50b7a538 100644 --- a/packages/binary/transaction/payload/data/data.go +++ b/packages/binary/tangle/model/transaction/payload/data/data.go @@ -1,7 +1,7 @@ package data import ( - "github.com/iotaledger/goshimmer/packages/binary/transaction/payload" + "github.com/iotaledger/goshimmer/packages/binary/tangle/model/transaction/payload" ) type Data struct { diff --git a/packages/binary/transaction/payload/data/init.go b/packages/binary/tangle/model/transaction/payload/data/init.go similarity index 56% rename from packages/binary/transaction/payload/data/init.go rename to packages/binary/tangle/model/transaction/payload/data/init.go index 4f403d296bbb000478b6605b57cda20124e23807..547bca2c68e3ad3ac12adc1b97ab82ae3878a764 100644 --- a/packages/binary/transaction/payload/data/init.go +++ b/packages/binary/tangle/model/transaction/payload/data/init.go @@ -1,7 +1,7 @@ package data import ( - "github.com/iotaledger/goshimmer/packages/binary/transaction/payload" + "github.com/iotaledger/goshimmer/packages/binary/tangle/model/transaction/payload" ) func init() { diff --git a/packages/binary/transaction/payload/id.go b/packages/binary/tangle/model/transaction/payload/id.go similarity index 100% rename from packages/binary/transaction/payload/id.go rename to packages/binary/tangle/model/transaction/payload/id.go diff --git a/packages/binary/transaction/payload/payload.go b/packages/binary/tangle/model/transaction/payload/payload.go similarity index 100% rename from packages/binary/transaction/payload/payload.go rename to packages/binary/tangle/model/transaction/payload/payload.go diff --git a/packages/binary/transaction/payload/type.go b/packages/binary/tangle/model/transaction/payload/type.go similarity index 100% rename from packages/binary/transaction/payload/type.go rename to packages/binary/tangle/model/transaction/payload/type.go diff --git a/packages/binary/transaction/payload/type_register.go b/packages/binary/tangle/model/transaction/payload/type_register.go similarity index 100% rename from packages/binary/transaction/payload/type_register.go rename to packages/binary/tangle/model/transaction/payload/type_register.go diff --git a/packages/binary/transaction/payload/valuetransfer/valuetransfer.go b/packages/binary/tangle/model/transaction/payload/valuetransfer/valuetransfer.go similarity index 98% rename from packages/binary/transaction/payload/valuetransfer/valuetransfer.go rename to packages/binary/tangle/model/transaction/payload/valuetransfer/valuetransfer.go index d9fa48ceca6a0e761e25dfdef8a77ac84d04e0bc..b50fc60249b9273ead4f816f767b2c174a0920d5 100644 --- a/packages/binary/transaction/payload/valuetransfer/valuetransfer.go +++ b/packages/binary/tangle/model/transaction/payload/valuetransfer/valuetransfer.go @@ -4,14 +4,11 @@ import ( "encoding/binary" "sync" - "github.com/iotaledger/goshimmer/packages/binary/types" - "github.com/iotaledger/goshimmer/packages/binary/signature/ed25119" - + "github.com/iotaledger/goshimmer/packages/binary/tangle/model/transaction/payload" + "github.com/iotaledger/goshimmer/packages/binary/types" + "github.com/iotaledger/goshimmer/packages/binary/valuetangle/model/address" "github.com/iotaledger/goshimmer/packages/ledgerstate/coloredcoins" - - "github.com/iotaledger/goshimmer/packages/binary/address" - "github.com/iotaledger/goshimmer/packages/binary/transaction/payload" "github.com/iotaledger/goshimmer/packages/ledgerstate/transfer" ) diff --git a/packages/binary/transaction/test/transaction_test.go b/packages/binary/tangle/model/transaction/test/transaction_test.go similarity index 94% rename from packages/binary/transaction/test/transaction_test.go rename to packages/binary/tangle/model/transaction/test/transaction_test.go index d94c14b09388d51d11345a435c1a3ad85c82826d..3cfd978d308889fe359a4366894783b18e71954e 100644 --- a/packages/binary/transaction/test/transaction_test.go +++ b/packages/binary/tangle/model/transaction/test/transaction_test.go @@ -6,21 +6,19 @@ import ( "sync" "testing" - "github.com/iotaledger/goshimmer/packages/binary/signature/ed25119" "github.com/iotaledger/hive.go/async" - "github.com/iotaledger/goshimmer/packages/ledgerstate/coloredcoins" - "github.com/panjf2000/ants/v2" - "github.com/iotaledger/goshimmer/packages/ledgerstate/transfer" - - "github.com/iotaledger/goshimmer/packages/binary/transaction" - "github.com/iotaledger/goshimmer/packages/binary/address" "github.com/iotaledger/goshimmer/packages/binary/identity" - "github.com/iotaledger/goshimmer/packages/binary/transaction/payload/data" - "github.com/iotaledger/goshimmer/packages/binary/transaction/payload/valuetransfer" + "github.com/iotaledger/goshimmer/packages/binary/signature/ed25119" + "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/ledgerstate/coloredcoins" + "github.com/iotaledger/goshimmer/packages/ledgerstate/transfer" + "github.com/stretchr/testify/assert" ) diff --git a/packages/binary/transaction/transaction.go b/packages/binary/tangle/model/transaction/transaction.go similarity index 98% rename from packages/binary/transaction/transaction.go rename to packages/binary/tangle/model/transaction/transaction.go index 5b36af5881a2aa9e3109d498fe15b49175c61829..98893ffcec345d93a5727405e4ee23e88adcc0cd 100644 --- a/packages/binary/transaction/transaction.go +++ b/packages/binary/tangle/model/transaction/transaction.go @@ -5,7 +5,7 @@ import ( "sync" "github.com/iotaledger/goshimmer/packages/binary/identity" - "github.com/iotaledger/goshimmer/packages/binary/transaction/payload" + "github.com/iotaledger/goshimmer/packages/binary/tangle/model/transaction/payload" "github.com/iotaledger/goshimmer/packages/stringify" "github.com/iotaledger/hive.go/objectstorage" diff --git a/packages/binary/transactionmetadata/cached_transactionmetadata.go b/packages/binary/tangle/model/transactionmetadata/cached_transactionmetadata.go similarity index 73% rename from packages/binary/transactionmetadata/cached_transactionmetadata.go rename to packages/binary/tangle/model/transactionmetadata/cached_transactionmetadata.go index 83912b7c295118b528d9f686f6187ce8e7cdad5c..8b327806525d359f39dcbf0dd54e699cdc195f61 100644 --- a/packages/binary/transactionmetadata/cached_transactionmetadata.go +++ b/packages/binary/tangle/model/transactionmetadata/cached_transactionmetadata.go @@ -5,7 +5,11 @@ import ( ) type CachedTransactionMetadata struct { - *objectstorage.CachedObject + objectstorage.CachedObject +} + +func (cachedObject *CachedTransactionMetadata) Retain() objectstorage.CachedObject { + return &CachedTransactionMetadata{cachedObject} } func (cachedObject *CachedTransactionMetadata) Unwrap() *TransactionMetadata { diff --git a/packages/binary/transactionmetadata/transactionmetadata.go b/packages/binary/tangle/model/transactionmetadata/transactionmetadata.go similarity index 95% rename from packages/binary/transactionmetadata/transactionmetadata.go rename to packages/binary/tangle/model/transactionmetadata/transactionmetadata.go index 5ef63dbea00e4e73e88abe144faf891faa6f3489..7c1728da9cd194589b9ed2ca1e326971f822e6a9 100644 --- a/packages/binary/transactionmetadata/transactionmetadata.go +++ b/packages/binary/tangle/model/transactionmetadata/transactionmetadata.go @@ -4,8 +4,9 @@ import ( "sync" "time" - "github.com/iotaledger/goshimmer/packages/binary/transaction" "github.com/iotaledger/hive.go/objectstorage" + + "github.com/iotaledger/goshimmer/packages/binary/tangle/model/transaction" ) type TransactionMetadata struct { diff --git a/packages/binary/tangle/snapshot.go b/packages/binary/tangle/snapshot.go index 1c1d560921bfa6ebf3a55f4d0f74242afa305ec4..8f1babe400d39898a68f7f69e17d3fe423fa3fdf 100644 --- a/packages/binary/tangle/snapshot.go +++ b/packages/binary/tangle/snapshot.go @@ -1,8 +1,8 @@ package tangle import ( - "github.com/iotaledger/goshimmer/packages/binary/address" - "github.com/iotaledger/goshimmer/packages/binary/transaction" + "github.com/iotaledger/goshimmer/packages/binary/tangle/model/transaction" + "github.com/iotaledger/goshimmer/packages/binary/valuetangle/model/address" "github.com/iotaledger/goshimmer/packages/ledgerstate/coloredcoins" ) diff --git a/packages/binary/tangle/tangle.go b/packages/binary/tangle/tangle.go index 0e8d062bf4e39827ae00cae600ee10657ef68176..b1941ce24969aed8489c41376145c2a54383ad07 100644 --- a/packages/binary/tangle/tangle.go +++ b/packages/binary/tangle/tangle.go @@ -4,14 +4,14 @@ import ( "container/list" "time" - "github.com/iotaledger/goshimmer/packages/binary/transaction/payload/valuetransfer" - - "github.com/iotaledger/goshimmer/packages/binary/tangle/approvers" - "github.com/iotaledger/goshimmer/packages/binary/tangle/missingtransaction" - "github.com/iotaledger/goshimmer/packages/binary/transaction" - "github.com/iotaledger/goshimmer/packages/binary/transaction/payload/data" - "github.com/iotaledger/goshimmer/packages/binary/transactionmetadata" + "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" ) diff --git a/packages/binary/tangle/tangle_test.go b/packages/binary/tangle/tangle_test.go index bdeeaa40fc87c436574605cc71e573edab6b9078..5b629ceb409ab3ae2105af7163f1f337b2d2a248 100644 --- a/packages/binary/tangle/tangle_test.go +++ b/packages/binary/tangle/tangle_test.go @@ -8,8 +8,8 @@ import ( "github.com/iotaledger/hive.go/events" "github.com/iotaledger/goshimmer/packages/binary/identity" - "github.com/iotaledger/goshimmer/packages/binary/transaction" - "github.com/iotaledger/goshimmer/packages/binary/transaction/payload/data" + "github.com/iotaledger/goshimmer/packages/binary/tangle/model/transaction" + "github.com/iotaledger/goshimmer/packages/binary/tangle/model/transaction/payload/data" ) func BenchmarkTangle_AttachTransaction(b *testing.B) { diff --git a/packages/binary/transaction/init.go b/packages/binary/transaction/init.go deleted file mode 100644 index 36b74b8e37d45f8ecf3e1c3bdb0aedbabc84ed7e..0000000000000000000000000000000000000000 --- a/packages/binary/transaction/init.go +++ /dev/null @@ -1,10 +0,0 @@ -package transaction - -import ( - "github.com/iotaledger/goshimmer/packages/binary/transaction/payload" - "github.com/iotaledger/goshimmer/packages/binary/transaction/payload/data" -) - -func init() { - payload.SetGenericUnmarshalerFactory(data.GenericPayloadUnmarshalerFactory) -} diff --git a/packages/binary/transactionparser/builtinfilters/transaction_signature_filter.go b/packages/binary/transactionparser/builtinfilters/transaction_signature_filter.go index 6862426cc273a059867fb4a25e6b651d328ff114..b3ae899952afe986ec0579fc69c5673b2b1edd5d 100644 --- a/packages/binary/transactionparser/builtinfilters/transaction_signature_filter.go +++ b/packages/binary/transactionparser/builtinfilters/transaction_signature_filter.go @@ -3,8 +3,7 @@ package builtinfilters import ( "sync" - "github.com/iotaledger/goshimmer/packages/binary/transaction" - + "github.com/iotaledger/goshimmer/packages/binary/tangle/model/transaction" "github.com/iotaledger/hive.go/async" ) diff --git a/packages/binary/transactionparser/builtinfilters/value_transaction_signature_filter.go b/packages/binary/transactionparser/builtinfilters/value_transaction_signature_filter.go index 5c8cc14c39814b77af4cb2dd0e86c11ee25855a9..10e4dbeb471bd801a14f4532858fe783ccdf476b 100644 --- a/packages/binary/transactionparser/builtinfilters/value_transaction_signature_filter.go +++ b/packages/binary/transactionparser/builtinfilters/value_transaction_signature_filter.go @@ -3,10 +3,10 @@ package builtinfilters import ( "sync" - "github.com/iotaledger/goshimmer/packages/binary/transaction/payload/valuetransfer" - - "github.com/iotaledger/goshimmer/packages/binary/transaction" "github.com/iotaledger/hive.go/async" + + "github.com/iotaledger/goshimmer/packages/binary/tangle/model/transaction" + "github.com/iotaledger/goshimmer/packages/binary/tangle/model/transaction/payload/valuetransfer" ) type ValueTransferSignatureFilter struct { diff --git a/packages/binary/transactionparser/transaction_filter.go b/packages/binary/transactionparser/transaction_filter.go index 39f15788ee33ca4905360013b9ad0fd2e5e9cc5d..39dfc277c5932c6f6ce1ee8cca2d525605c04235 100644 --- a/packages/binary/transactionparser/transaction_filter.go +++ b/packages/binary/transactionparser/transaction_filter.go @@ -1,7 +1,7 @@ package transactionparser import ( - "github.com/iotaledger/goshimmer/packages/binary/transaction" + "github.com/iotaledger/goshimmer/packages/binary/tangle/model/transaction" ) type TransactionFilter interface { diff --git a/packages/binary/transactionparser/transactionparser.go b/packages/binary/transactionparser/transactionparser.go index 66e3bb3ae91f9e8560af14a589606574615586fc..7632506dc0b295e448d57b89c4fab859948e8e54 100644 --- a/packages/binary/transactionparser/transactionparser.go +++ b/packages/binary/transactionparser/transactionparser.go @@ -3,12 +3,11 @@ package transactionparser import ( "sync" + "github.com/iotaledger/goshimmer/packages/binary/tangle/model/transaction" "github.com/iotaledger/goshimmer/packages/binary/transactionparser/builtinfilters" "github.com/iotaledger/hive.go/events" "github.com/iotaledger/hive.go/typeutils" - - "github.com/iotaledger/goshimmer/packages/binary/transaction" ) type TransactionParser struct { diff --git a/packages/binary/transactionparser/transactionparser_test.go b/packages/binary/transactionparser/transactionparser_test.go index 8043fc59d4b31fce00aa3e221d26d6cc6d536f9b..c7dc3b18a91c82260b4196d7794e499cabec13c1 100644 --- a/packages/binary/transactionparser/transactionparser_test.go +++ b/packages/binary/transactionparser/transactionparser_test.go @@ -8,8 +8,8 @@ import ( "github.com/iotaledger/hive.go/events" "github.com/iotaledger/goshimmer/packages/binary/identity" - "github.com/iotaledger/goshimmer/packages/binary/transaction" - "github.com/iotaledger/goshimmer/packages/binary/transaction/payload/data" + "github.com/iotaledger/goshimmer/packages/binary/tangle/model/transaction" + "github.com/iotaledger/goshimmer/packages/binary/tangle/model/transaction/payload/data" ) func BenchmarkTransactionParser_ParseBytesSame(b *testing.B) { diff --git a/packages/binary/address/address.go b/packages/binary/valuetangle/model/address/address.go similarity index 100% rename from packages/binary/address/address.go rename to packages/binary/valuetangle/model/address/address.go diff --git a/packages/binary/valuetangle/model/cached_consumers.go b/packages/binary/valuetangle/model/cached_consumers.go index c570571a73ccde07771dbd9235330b3def6b9a02..7bff29ee87def9028ce778d6a14e1785e5d9679e 100644 --- a/packages/binary/valuetangle/model/cached_consumers.go +++ b/packages/binary/valuetangle/model/cached_consumers.go @@ -5,7 +5,7 @@ import ( ) type CachedConsumers struct { - *objectstorage.CachedObject + objectstorage.CachedObject } func (cachedObject *CachedConsumers) Unwrap() *Consumers { diff --git a/packages/binary/valuetangle/model/cached_missing_transfer.go b/packages/binary/valuetangle/model/cached_missing_transfer.go index 6e885c2bf0fccfcf7432644c1b8b796ca4599318..a91c80e5adff7655f7243380ae399523085a628b 100644 --- a/packages/binary/valuetangle/model/cached_missing_transfer.go +++ b/packages/binary/valuetangle/model/cached_missing_transfer.go @@ -5,7 +5,7 @@ import ( ) type CachedMissingTransfer struct { - *objectstorage.CachedObject + objectstorage.CachedObject } func (cachedObject *CachedMissingTransfer) Unwrap() *MissingTransfer { diff --git a/packages/binary/valuetangle/model/cached_transfermetadata.go b/packages/binary/valuetangle/model/cached_transfermetadata.go index bce48511c388337e3cb14d8580a1e7bc2c023d42..968523323508ffb03d44797881ecc36ddc4688a3 100644 --- a/packages/binary/valuetangle/model/cached_transfermetadata.go +++ b/packages/binary/valuetangle/model/cached_transfermetadata.go @@ -5,7 +5,7 @@ import ( ) type CachedTransferMetadata struct { - *objectstorage.CachedObject + objectstorage.CachedObject } func (cachedObject *CachedTransferMetadata) Unwrap() *TransferMetadata { diff --git a/packages/binary/valuetangle/model/cached_valuetransfer.go b/packages/binary/valuetangle/model/cached_valuetransfer.go index 7a6ade84636baf9e234857aedf7a5acf62ee3228..9cc50c0a292605e9847ba52cf015fadfa7284df5 100644 --- a/packages/binary/valuetangle/model/cached_valuetransfer.go +++ b/packages/binary/valuetangle/model/cached_valuetransfer.go @@ -1,8 +1,8 @@ package model import ( - "github.com/iotaledger/goshimmer/packages/binary/transaction" - "github.com/iotaledger/goshimmer/packages/binary/transaction/payload/valuetransfer" + "github.com/iotaledger/goshimmer/packages/binary/tangle/model/transaction" + "github.com/iotaledger/goshimmer/packages/binary/tangle/model/transaction/payload/valuetransfer" ) type CachedValueTransfer struct { diff --git a/packages/binary/valuetangle/model/consumer/consumer.go b/packages/binary/valuetangle/model/consumer/consumer.go new file mode 100644 index 0000000000000000000000000000000000000000..58f850aeb20cf854040000d99b04da387ebbcc8a --- /dev/null +++ b/packages/binary/valuetangle/model/consumer/consumer.go @@ -0,0 +1,31 @@ +package consumer + +import ( + "github.com/iotaledger/goshimmer/packages/binary/valuetangle/model/transferoutput" + "github.com/iotaledger/goshimmer/packages/ledgerstate/transfer" + "github.com/iotaledger/hive.go/objectstorage" +) + +type Consumer struct { + objectstorage.StorableObjectFlags + + transferOutputId transferoutput.Id + consumerTransferId transfer.Id +} + +func New(transferOutput transferoutput.Id, consumerTransfer transfer.Id) *Consumer { + return &Consumer{ + transferOutputId: transferOutput, + consumerTransferId: consumerTransfer, + } +} + +func (consumer *Consumer) GetTransferOutputId() transferoutput.Id { + return consumer.transferOutputId +} + +func (consumer *Consumer) GetConsumerTransferId() transfer.Id { + return consumer.consumerTransferId +} + +var _ objectstorage.StorableObject = &Consumer{} diff --git a/packages/binary/valuetangle/model/transferoutput/id.go b/packages/binary/valuetangle/model/transferoutput/id.go new file mode 100644 index 0000000000000000000000000000000000000000..01e4de3fb80d3deb8d679abfcbe91fe2f9f5d2c3 --- /dev/null +++ b/packages/binary/valuetangle/model/transferoutput/id.go @@ -0,0 +1,46 @@ +package transferoutput + +import ( + "github.com/iotaledger/goshimmer/packages/binary/address" + "github.com/iotaledger/goshimmer/packages/ledgerstate/transfer" +) + +type Id [transfer.IdLength + address.Length]byte + +func NewId(addr address.Address, transferId transfer.Id) (result Id) { + copy(result[:address.Length], addr[:]) + copy(result[address.Length:], transferId[:]) + + return +} + +func (id Id) GetAddress() (result address.Address) { + copy(result[:], id[:address.Length]) + + return +} + +func (id Id) GetTransferId() (result transfer.Id) { + copy(result[:], id[address.Length:]) + + return +} + +func (id *Id) UnmarshalBinary(data []byte) error { + copy(id[:], data[:IdLength]) + + return nil +} + +func (id *Id) MarshalBinary() (data []byte, err error) { + data = make([]byte, IdLength) + copy(data[:], id[:]) + + return +} + +func (id Id) String() string { + return id.GetAddress().String() + " :: " + id.GetTransferId().String() +} + +const IdLength = address.Length + transfer.IdLength diff --git a/packages/binary/valuetangle/model/transferoutput/transferoutput.go b/packages/binary/valuetangle/model/transferoutput/transferoutput.go index ae825b77c3578698565211693a1adf6d7dff55f6..1bf34bc5cd7d54b763ba546195144d45b46d09b9 100644 --- a/packages/binary/valuetangle/model/transferoutput/transferoutput.go +++ b/packages/binary/valuetangle/model/transferoutput/transferoutput.go @@ -4,11 +4,7 @@ import ( "encoding/binary" "sync" - "github.com/iotaledger/goshimmer/packages/binary/address" - "github.com/iotaledger/goshimmer/packages/binary/transaction" - "github.com/iotaledger/goshimmer/packages/binary/types" "github.com/iotaledger/goshimmer/packages/ledgerstate/coloredcoins" - "github.com/iotaledger/goshimmer/packages/ledgerstate/reality" "github.com/iotaledger/goshimmer/packages/stringify" "github.com/iotaledger/hive.go/objectstorage" ) @@ -16,23 +12,17 @@ import ( type TransferOutput struct { objectstorage.StorableObjectFlags - transactionId transaction.Id - address address.Address - realityId reality.Id - balances []*coloredcoins.ColoredBalance - consumers map[transaction.Id]types.Empty + id Id + spent bool + balances []*coloredcoins.ColoredBalance realityIdMutex sync.RWMutex - consumersMutex sync.RWMutex } -func NewTransferOutput(transactionId transaction.Id, address address.Address, balances ...*coloredcoins.ColoredBalance) *TransferOutput { +func New(id Id, balances ...*coloredcoins.ColoredBalance) *TransferOutput { return &TransferOutput{ - transactionId: transactionId, - address: address, - balances: balances, - realityId: reality.EmptyId, - consumers: make(map[transaction.Id]types.Empty), + id: id, + balances: balances, } } @@ -40,117 +30,37 @@ func FromStorage(key []byte) objectstorage.StorableObject { result := &TransferOutput{} offset := 0 - if err := result.transactionId.UnmarshalBinary(key[offset:]); err != nil { - panic(err) - } - offset += transaction.IdLength - - if err := result.address.UnmarshalBinary(key[offset:]); err != nil { + if err := result.id.UnmarshalBinary(key[offset:]); err != nil { panic(err) } return result } -func (transferOutput *TransferOutput) GetTransactionId() (transactionId transaction.Id) { - transactionId = transferOutput.transactionId - - return -} - -func (transferOutput *TransferOutput) GetAddress() (address address.Address) { - return transferOutput.address -} - -func (transferOutput *TransferOutput) GetRealityId() (realityId reality.Id) { - transferOutput.realityIdMutex.RLock() - realityId = transferOutput.realityId - transferOutput.realityIdMutex.RUnlock() - - return -} - -func (transferOutput *TransferOutput) SetRealityId(realityId reality.Id) (modified bool) { - transferOutput.realityIdMutex.RLock() - if transferOutput.realityId != realityId { - transferOutput.realityIdMutex.RUnlock() - - transferOutput.realityIdMutex.Lock() - if transferOutput.realityId != realityId { - transferOutput.realityId = realityId - - transferOutput.SetModified() - - modified = true - } - transferOutput.realityIdMutex.Unlock() - } else { - transferOutput.realityIdMutex.RUnlock() - } - - return +func (transferOutput *TransferOutput) GetId() Id { + return transferOutput.id } func (transferOutput *TransferOutput) GetBalances() []*coloredcoins.ColoredBalance { return transferOutput.balances } -func (transferOutput *TransferOutput) GetConsumers() (consumers map[transaction.Id]types.Empty) { - consumers = make(map[transaction.Id]types.Empty) - - transferOutput.consumersMutex.RLock() - for transferHash := range transferOutput.consumers { - consumers[transferHash] = types.Void - } - transferOutput.consumersMutex.RUnlock() - - return -} - func (transferOutput *TransferOutput) IsSpent() (result bool) { - transferOutput.consumersMutex.RLock() - result = len(transferOutput.consumers) >= 1 - transferOutput.consumersMutex.RUnlock() - - return -} - -func (transferOutput *TransferOutput) AddConsumer(consumer transaction.Id) (previousConsumers map[transaction.Id]types.Empty) { - transferOutput.consumersMutex.RLock() - if _, exist := transferOutput.consumers[consumer]; !exist { - transferOutput.consumersMutex.RUnlock() - - transferOutput.consumersMutex.Lock() - if _, exist := transferOutput.consumers[consumer]; !exist { - previousConsumers = make(map[transaction.Id]types.Empty) - for transactionId := range transferOutput.consumers { - previousConsumers[transactionId] = types.Void - } - - transferOutput.consumers[consumer] = types.Void - - transferOutput.SetModified() - } - transferOutput.consumersMutex.Unlock() - } else { - transferOutput.consumersMutex.RUnlock() - } + // TODO: IMPLEMENT return } func (transferOutput *TransferOutput) String() string { return stringify.Struct("TransferOutput", - stringify.StructField("transactionId", transferOutput.GetTransactionId().String()), - stringify.StructField("address", transferOutput.GetAddress().String()), - stringify.StructField("realityId", transferOutput.GetRealityId().String()), + stringify.StructField("id", transferOutput.GetId().String()), stringify.StructField("balances", transferOutput.GetBalances()), - stringify.StructField("spent", len(transferOutput.GetConsumers()) >= 1), + // TODO: IS SPENT ) } func (transferOutput *TransferOutput) GetStorageKey() []byte { - return append(transferOutput.transactionId[:], transferOutput.address[:]...) + return transferOutput.id[:] } func (transferOutput *TransferOutput) Update(other objectstorage.StorableObject) { @@ -159,17 +69,12 @@ func (transferOutput *TransferOutput) Update(other objectstorage.StorableObject) func (transferOutput *TransferOutput) MarshalBinary() ([]byte, error) { transferOutput.realityIdMutex.RLock() - transferOutput.consumersMutex.RLock() balanceCount := len(transferOutput.balances) - consumerCount := len(transferOutput.consumers) - result := make([]byte, reality.IdLength+4+balanceCount*coloredcoins.BalanceLength+4+consumerCount*transaction.IdLength) + result := make([]byte, 4+balanceCount*coloredcoins.BalanceLength) offset := 0 - copy(result[0:], transferOutput.realityId[:]) - offset += reality.IdLength - binary.LittleEndian.PutUint32(result[offset:], uint32(balanceCount)) offset += 4 @@ -182,15 +87,6 @@ func (transferOutput *TransferOutput) MarshalBinary() ([]byte, error) { } } - binary.LittleEndian.PutUint32(result[offset:], uint32(consumerCount)) - offset += 4 - - for transactionId := range transferOutput.consumers { - copy(result[offset:], transactionId[:]) - offset += transaction.IdLength - } - - transferOutput.consumersMutex.RUnlock() transferOutput.realityIdMutex.RUnlock() return result, nil @@ -199,23 +95,12 @@ func (transferOutput *TransferOutput) MarshalBinary() ([]byte, error) { func (transferOutput *TransferOutput) UnmarshalBinary(serializedObject []byte) error { offset := 0 - if err := transferOutput.realityId.UnmarshalBinary(serializedObject[offset:]); err != nil { - return err - } - offset += reality.IdLength - if balances, err := transferOutput.unmarshalBalances(serializedObject, &offset); err != nil { return err } else { transferOutput.balances = balances } - if consumers, err := transferOutput.unmarshalConsumers(serializedObject, &offset); err != nil { - return err - } else { - transferOutput.consumers = consumers - } - return nil } @@ -237,24 +122,8 @@ func (transferOutput *TransferOutput) unmarshalBalances(serializedBalances []byt return balances, nil } -func (transferOutput *TransferOutput) unmarshalConsumers(serializedConsumers []byte, offset *int) (map[transaction.Id]types.Empty, error) { - consumerCount := int(binary.LittleEndian.Uint32(serializedConsumers[*offset:])) - *offset += 4 - - consumers := make(map[transaction.Id]types.Empty, consumerCount) - for i := 0; i < consumerCount; i++ { - var transactionId transaction.Id - if err := transactionId.UnmarshalBinary(serializedConsumers[*offset:]); err != nil { - return nil, err - } - *offset += transaction.IdLength - } - - return consumers, nil -} - type CachedTransferOutput struct { - *objectstorage.CachedObject + objectstorage.CachedObject } func (cachedObject *CachedTransferOutput) Unwrap() *TransferOutput { diff --git a/packages/binary/valuetangle/model/valuetransfer.go b/packages/binary/valuetangle/model/valuetransfer.go index fa614d48361b3a6b4d5299bd41d86bc0aad34d97..ef2fa7220820a3403e643520879539ad00ca270e 100644 --- a/packages/binary/valuetangle/model/valuetransfer.go +++ b/packages/binary/valuetangle/model/valuetransfer.go @@ -4,8 +4,8 @@ import ( "sync" "github.com/iotaledger/goshimmer/packages/binary/address" - "github.com/iotaledger/goshimmer/packages/binary/transaction" - "github.com/iotaledger/goshimmer/packages/binary/transaction/payload/valuetransfer" + "github.com/iotaledger/goshimmer/packages/binary/tangle/model/transaction" + "github.com/iotaledger/goshimmer/packages/binary/tangle/model/transaction/payload/valuetransfer" "github.com/iotaledger/goshimmer/packages/binary/types" "github.com/iotaledger/goshimmer/packages/ledgerstate/transfer" ) diff --git a/packages/binary/valuetangle/valuetangle.go b/packages/binary/valuetangle/valuetangle.go index e8e16a9a9d3b8da0a52e32c5f448fca81999e14f..faf76f223a48226b5d46309eca807198387a3d5f 100644 --- a/packages/binary/valuetangle/valuetangle.go +++ b/packages/binary/valuetangle/valuetangle.go @@ -5,18 +5,21 @@ import ( "fmt" "time" - "github.com/iotaledger/goshimmer/packages/binary/address" - - "github.com/iotaledger/goshimmer/packages/binary/types" + "github.com/iotaledger/goshimmer/packages/binary/valuetangle/model/transferoutput" - "github.com/iotaledger/goshimmer/packages/storageprefix" + "github.com/iotaledger/hive.go/syncutils" + "github.com/iotaledger/goshimmer/packages/binary/address" "github.com/iotaledger/goshimmer/packages/binary/tangle" - "github.com/iotaledger/goshimmer/packages/binary/transaction" - "github.com/iotaledger/goshimmer/packages/binary/transaction/payload/valuetransfer" - "github.com/iotaledger/goshimmer/packages/binary/transactionmetadata" + "github.com/iotaledger/goshimmer/packages/binary/tangle/model/transaction" + "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/binary/types" "github.com/iotaledger/goshimmer/packages/binary/valuetangle/model" + "github.com/iotaledger/goshimmer/packages/binary/valuetangle/model/consumer" "github.com/iotaledger/goshimmer/packages/ledgerstate/transfer" + "github.com/iotaledger/goshimmer/packages/storageprefix" + "github.com/iotaledger/hive.go/async" "github.com/iotaledger/hive.go/events" "github.com/iotaledger/hive.go/objectstorage" @@ -40,6 +43,8 @@ type ValueTangle struct { solidifierWorkerPool async.WorkerPool cleanupWorkerPool async.WorkerPool + tangleMutex syncutils.MultiMutex + Events Events } @@ -157,11 +162,24 @@ func (valueTangle *ValueTangle) storeTransactionWorker(cachedTx *transaction.Cac transferId := valueTransfer.GetId() - cachedTransferMetadata := &model.CachedTransferMetadata{CachedObject: valueTangle.transferMetadataStorage.Store(model.NewTransferMetadata(transferId))} - for referencedTransferId := range valueTransfer.GetInputs() { - addTransferToConsumers(transferId, referencedTransferId) + lockBuilder := syncutils.MultiMutexLockBuilder{}.AddLock(transferId) + consumers := make(map[transferoutput.Id]*consumer.Consumer) + for referencedTransferId, referencedAddresses := range valueTransfer.GetInputs() { + for referencedAddress := range referencedAddresses { + transferOutputId := transferoutput.NewId(referencedAddress, referencedTransferId) + + lockBuilder.AddLock(transferOutputId) + consumers[transferOutputId] = consumer.New(transferOutputId, transferId) + } } + // lock: own transfer outputs, consumers of inputs, + valueTangle.tangleMutex.Lock(lockBuilder.Build()...) + + valueTangle.tangleMutex.Unlock(lockBuilder.Build()...) + + cachedTransferMetadata := &model.CachedTransferMetadata{CachedObject: valueTangle.transferMetadataStorage.Store(model.NewTransferMetadata(transferId))} + if valueTangle.missingTransferStorage.DeleteIfPresent(transferId[:]) { valueTangle.Events.MissingTransferReceived.Trigger(transferId) } diff --git a/packages/binary/valuetangle/valuetangle_test.go b/packages/binary/valuetangle/valuetangle_test.go index d4e954bbc2e457fe9e44d37aaa9b056bbb0eef73..0ce267004671e2130c566a6ce7cda218467e1bcd 100644 --- a/packages/binary/valuetangle/valuetangle_test.go +++ b/packages/binary/valuetangle/valuetangle_test.go @@ -8,19 +8,16 @@ import ( "github.com/mr-tron/base58" "github.com/iotaledger/goshimmer/packages/binary/address" - "github.com/iotaledger/goshimmer/packages/binary/transactionmetadata" - "github.com/iotaledger/goshimmer/packages/ledgerstate/coloredcoins" - "github.com/iotaledger/goshimmer/packages/ledgerstate/transfer" - - "github.com/iotaledger/goshimmer/packages/binary/signature/ed25119" - - "github.com/iotaledger/goshimmer/packages/binary/transaction/payload/valuetransfer" - "github.com/iotaledger/goshimmer/packages/binary/identity" - "github.com/iotaledger/goshimmer/packages/binary/transaction" - + "github.com/iotaledger/goshimmer/packages/binary/signature/ed25119" "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/payload/valuetransfer" + "github.com/iotaledger/goshimmer/packages/binary/tangle/model/transactionmetadata" "github.com/iotaledger/goshimmer/packages/binary/valuetangle/model" + "github.com/iotaledger/goshimmer/packages/ledgerstate/coloredcoins" + "github.com/iotaledger/goshimmer/packages/ledgerstate/transfer" + "github.com/iotaledger/hive.go/events" ) diff --git a/packages/ledgerstate/transfer/constants.go b/packages/ledgerstate/transfer/constants.go index c3a690bd4eaf5c859933112a0d5893acf5224f2f..d98cdb15c1df1cf4366dc99ce415d8050539e833 100644 --- a/packages/ledgerstate/transfer/constants.go +++ b/packages/ledgerstate/transfer/constants.go @@ -1,7 +1,7 @@ package transfer import ( - "github.com/iotaledger/goshimmer/packages/binary/address" + "github.com/iotaledger/goshimmer/packages/binary/valuetangle/model/address" "github.com/iotaledger/goshimmer/packages/ledgerstate/reality" ) diff --git a/packages/ledgerstate/transfer/output.go b/packages/ledgerstate/transfer/output.go index 8c7f5b06b981bfa13a94d7e9429dddd4b80ffab4..fd59934f5763c7a308de02acc4c8cb7edf3aed7c 100644 --- a/packages/ledgerstate/transfer/output.go +++ b/packages/ledgerstate/transfer/output.go @@ -4,7 +4,7 @@ import ( "encoding/binary" "sync" - "github.com/iotaledger/goshimmer/packages/binary/address" + "github.com/iotaledger/goshimmer/packages/binary/valuetangle/model/address" "github.com/iotaledger/goshimmer/packages/ledgerstate/coloredcoins" "github.com/iotaledger/goshimmer/packages/ledgerstate/reality" "github.com/iotaledger/goshimmer/packages/stringify" diff --git a/packages/ledgerstate/transfer/output_booking.go b/packages/ledgerstate/transfer/output_booking.go index e268015151c3eb1437bd584fb729aa86262981d8..7a387c2337aa72d703e1df165f428b6d4e44af9d 100644 --- a/packages/ledgerstate/transfer/output_booking.go +++ b/packages/ledgerstate/transfer/output_booking.go @@ -1,8 +1,9 @@ package transfer import ( - "github.com/iotaledger/goshimmer/packages/binary/address" + "github.com/iotaledger/goshimmer/packages/binary/valuetangle/model/address" "github.com/iotaledger/goshimmer/packages/ledgerstate/reality" + "github.com/iotaledger/hive.go/objectstorage" ) diff --git a/packages/ledgerstate/transfer/output_reference.go b/packages/ledgerstate/transfer/output_reference.go index d990f7bedcbbd5e6ef3da11eb8e412a519c2a404..70b3b11a24d60fe594a7ccfbf09bf8fdbec0e3a0 100644 --- a/packages/ledgerstate/transfer/output_reference.go +++ b/packages/ledgerstate/transfer/output_reference.go @@ -1,7 +1,7 @@ package transfer import ( - "github.com/iotaledger/goshimmer/packages/binary/address" + "github.com/iotaledger/goshimmer/packages/binary/valuetangle/model/address" "github.com/iotaledger/goshimmer/packages/stringify" ) diff --git a/packages/ledgerstate/transfer/transfer.go b/packages/ledgerstate/transfer/transfer.go index 70c27381af06daed26523fc53f4e25e120f24e0f..6d6392b401b5465a2c57c33fdfdbf6db5b1fb2fb 100644 --- a/packages/ledgerstate/transfer/transfer.go +++ b/packages/ledgerstate/transfer/transfer.go @@ -1,7 +1,7 @@ package transfer import ( - "github.com/iotaledger/goshimmer/packages/binary/address" + "github.com/iotaledger/goshimmer/packages/binary/valuetangle/model/address" "github.com/iotaledger/goshimmer/packages/ledgerstate/coloredcoins" ) diff --git a/packages/ledgerstate/transfer/transfer_output_booking.go b/packages/ledgerstate/transfer/transfer_output_booking.go index 01238c133c0f6843d097bb362d61305417f17b9c..7e872b43b2080b190bef9a17f5dd6814b558da57 100644 --- a/packages/ledgerstate/transfer/transfer_output_booking.go +++ b/packages/ledgerstate/transfer/transfer_output_booking.go @@ -1,10 +1,11 @@ package transfer import ( - "github.com/iotaledger/goshimmer/packages/binary/address" + "github.com/iotaledger/goshimmer/packages/binary/valuetangle/model/address" "github.com/iotaledger/goshimmer/packages/errors" "github.com/iotaledger/goshimmer/packages/ledgerstate/reality" "github.com/iotaledger/goshimmer/packages/stringify" + "github.com/iotaledger/hive.go/objectstorage" ) diff --git a/plugins/tangle/solidifier.go b/plugins/tangle/solidifier.go index e0408a957a40a2b346f4796a56ed7a07a1c55924..13b6fc7b1609ef362f9060f3bd7e285d7fa1d3af 100644 --- a/plugins/tangle/solidifier.go +++ b/plugins/tangle/solidifier.go @@ -3,6 +3,8 @@ package tangle import ( "runtime" + "github.com/iotaledger/iota.go/trinary" + "github.com/iotaledger/goshimmer/packages/daemon" "github.com/iotaledger/goshimmer/packages/errors" "github.com/iotaledger/goshimmer/packages/events" @@ -13,7 +15,6 @@ import ( "github.com/iotaledger/goshimmer/packages/node" "github.com/iotaledger/goshimmer/packages/workerpool" "github.com/iotaledger/goshimmer/plugins/gossip" - "github.com/iotaledger/iota.go/trinary" ) // region plugin module setup //////////////////////////////////////////////////////////////////////////////////////////