From 3928ee92e938bf71dfb0e0397a44e80ee9c5fcf8 Mon Sep 17 00:00:00 2001 From: Hans Moog <hm@mkjc.net> Date: Tue, 26 Nov 2019 10:04:03 +0100 Subject: [PATCH] Feat: finished elevating Realities + started cleaning up --- go.mod | 13 +- go.sum | 110 ++++++++ packages/graphviz/render_png.go | 25 ++ packages/ledgerstate/_tmp.dot | 29 --- .../{conflict_set.go => conflict.go} | 58 ++--- .../{conflict_set_id.go => conflict_id.go} | 22 +- packages/ledgerstate/conflict_id_list.go | 23 ++ packages/ledgerstate/conflict_id_set.go | 36 +++ packages/ledgerstate/ledgerstate.go | 53 ++-- packages/ledgerstate/ledgerstate_test.go | 8 + packages/ledgerstate/realities.png | Bin 75304 -> 69353 bytes packages/ledgerstate/reality.go | 241 +++++++++-------- packages/ledgerstate/reality.objectstorage.go | 26 +- packages/ledgerstate/reality_id_list.go | 23 ++ packages/ledgerstate/reality_id_set.go | 48 ++++ packages/ledgerstate_old/address.go | 62 ----- packages/ledgerstate_old/colored_balance.go | 31 --- packages/ledgerstate_old/constants.go | 24 -- packages/ledgerstate_old/errors.go | 8 - packages/ledgerstate_old/ledgerstate.go | 242 ------------------ packages/ledgerstate_old/ledgerstate_test.go | 103 -------- packages/ledgerstate_old/reality.go | 94 ------- packages/ledgerstate_old/reality_storage.go | 49 ---- packages/ledgerstate_old/transfer.go | 77 ------ packages/ledgerstate_old/transfer_output.go | 97 ------- .../transfer_output_booking.go | 108 -------- .../transfer_output_reference.go | 31 --- .../transfer_output_reference_old.go | 27 -- .../transfer_output_storage.go | 195 -------------- 29 files changed, 486 insertions(+), 1377 deletions(-) create mode 100644 packages/graphviz/render_png.go delete mode 100644 packages/ledgerstate/_tmp.dot rename packages/ledgerstate/{conflict_set.go => conflict.go} (50%) rename packages/ledgerstate/{conflict_set_id.go => conflict_id.go} (57%) create mode 100644 packages/ledgerstate/conflict_id_list.go create mode 100644 packages/ledgerstate/conflict_id_set.go create mode 100644 packages/ledgerstate/reality_id_list.go create mode 100644 packages/ledgerstate/reality_id_set.go delete mode 100644 packages/ledgerstate_old/address.go delete mode 100644 packages/ledgerstate_old/colored_balance.go delete mode 100644 packages/ledgerstate_old/constants.go delete mode 100644 packages/ledgerstate_old/errors.go delete mode 100644 packages/ledgerstate_old/ledgerstate.go delete mode 100644 packages/ledgerstate_old/ledgerstate_test.go delete mode 100644 packages/ledgerstate_old/reality.go delete mode 100644 packages/ledgerstate_old/reality_storage.go delete mode 100644 packages/ledgerstate_old/transfer.go delete mode 100644 packages/ledgerstate_old/transfer_output.go delete mode 100644 packages/ledgerstate_old/transfer_output_booking.go delete mode 100644 packages/ledgerstate_old/transfer_output_reference.go delete mode 100644 packages/ledgerstate_old/transfer_output_reference_old.go delete mode 100644 packages/ledgerstate_old/transfer_output_storage.go diff --git a/go.mod b/go.mod index ac900fc8..78c48e9f 100644 --- a/go.mod +++ b/go.mod @@ -4,6 +4,7 @@ go 1.13 require ( github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 // indirect + github.com/apsdehal/go-logger v0.0.0-20190506062552-f85330a4b532 // indirect github.com/dgraph-io/badger v1.6.0 github.com/dgrijalva/jwt-go v3.2.0+incompatible github.com/emicklei/dot v0.10.1 @@ -11,22 +12,24 @@ require ( github.com/gdamore/tcell v1.2.0 github.com/go-zeromq/zmq4 v0.5.0 github.com/golang/protobuf v1.3.2 // indirect - github.com/google/open-location-code/go v0.0.0-20190723034300-2c7115db77a3 + 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-20191112142249-92832505dd6d - github.com/iotaledger/iota.go v1.0.0-beta.7 - github.com/kr/pretty v0.1.0 // indirect + github.com/iotaledger/hive.go v0.0.0-20191125112048-8b1784dd1bce + 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 github.com/labstack/gommon v0.3.0 // indirect github.com/magiconair/properties v1.8.1 + github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 // indirect github.com/pkg/errors v0.8.1 github.com/rivo/tview v0.0.0-20190829161255-f8bc69b90341 github.com/rivo/uniseg v0.1.0 // indirect + github.com/sasha-s/go-deadlock v0.2.0 // indirect + github.com/spf13/pflag v1.0.5 github.com/stretchr/objx v0.2.0 // indirect golang.org/x/crypto v0.0.0-20191029031824-8986dd9e96cf golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297 golang.org/x/sys v0.0.0-20190904154756-749cb33beabd // indirect golang.org/x/text v0.3.2 // indirect - gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect + gopkg.in/zeromq/goczmq.v4 v4.1.0 // indirect ) diff --git a/go.sum b/go.sum index cb967822..d5e8a2f9 100644 --- a/go.sum +++ b/go.sum @@ -1,17 +1,27 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 h1:cTp8I5+VIoKjsnZuH8vjyaysT/ses3EvZeaV/1UkF2M= github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= +github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/DATA-DOG/go-sqlmock v1.3.3 h1:CWUqKXe0s8A2z6qCgkP4Kru7wC11YoAnoupUKFDnH08= github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/apsdehal/go-logger v0.0.0-20190506062552-f85330a4b532/go.mod h1:U3/8D6R9+bVpX0ORZjV+3mU9pQ86m7h1lESgJbXNvXA= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/beevik/ntp v0.2.0/go.mod h1:hIHWr+l3+/clUnF44zdK+CWW7fO8dR5cIylAQ76NRpg= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= @@ -24,6 +34,7 @@ github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZm github.com/dgryski/go-farm v0.0.0-20190323231341-8198c7b169ec/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 h1:tdlZCpZ/P9DhczCTSixgIKmwPv6+wP5DGjqLYw5SUiA= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= +github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/emicklei/dot v0.10.1 h1:bkzvwgIhhw/cuxxnJy5/5+ZL3GnhFxFfv0eolHtWE2w= @@ -38,28 +49,57 @@ github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo github.com/gdamore/tcell v1.1.2/go.mod h1:h3kq4HO9l2On+V9ed8w8ewqQEmGCSSHOgQ+2h8uzurE= github.com/gdamore/tcell v1.2.0 h1:ikixzsxc8K8o3V2/CEmyoEW8mJZaNYQQ3NP3VIQdUe4= github.com/gdamore/tcell v1.2.0/go.mod h1:Hjvr+Ofd+gLglo7RYKxxnzCBmev3BzsS67MebKS4zMM= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-zeromq/zmq4 v0.5.0 h1:DijriKlrr2b48mymvAsZApiPzrbxQodYKG1aDH1rz8c= github.com/go-zeromq/zmq4 v0.5.0/go.mod h1:6p7pjNlkfrQQVipmEuZDk7fakLZCqPPVK+Iq3jfbDg8= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/open-location-code/go v0.0.0-20190723034300-2c7115db77a3 h1:qI8YeX4bVZ2HrE+kEOn12L2io7Tw/2IffULguAh3M4Q= github.com/google/open-location-code/go v0.0.0-20190723034300-2c7115db77a3/go.mod h1:eJfRN6aj+kR/rnua/rw9jAgYhqoMHldQkdTi+sePRKk= +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/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= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542/go.mod h1:Ow0tF8D4Kplbc8s8sSb3V2oUCygFHVp8gC3Dn6U4MNI= +github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/iotaledger/hive.go v0.0.0-20191112142249-92832505dd6d h1:6n1M4lkXVlclr1z3+Ee9iSjIdWz2L9Kx87WBurof/JU= github.com/iotaledger/hive.go v0.0.0-20191112142249-92832505dd6d/go.mod h1:3u9aMALGTDHvpdmpODAkl6HAJ3GmDTfKIJIVSboXKLg= +github.com/iotaledger/hive.go v0.0.0-20191118130432-89eebe8fe8eb h1:nuS/LETRJ8obUyBIZeyxeei0ZPlyOMj8YPziOgSM4Og= +github.com/iotaledger/hive.go v0.0.0-20191118130432-89eebe8fe8eb/go.mod h1:1Thhlil4lHzuy53EVvmEbEvWBFY0Tasp4kCBfxBCPIk= +github.com/iotaledger/hive.go v0.0.0-20191125112048-8b1784dd1bce h1:QchbydsqgH7bXWXk8zLa1PvZ0fcWRddfIXCoXuWgzt4= +github.com/iotaledger/hive.go v0.0.0-20191125112048-8b1784dd1bce/go.mod h1:1Thhlil4lHzuy53EVvmEbEvWBFY0Tasp4kCBfxBCPIk= github.com/iotaledger/iota.go v1.0.0-beta.7 h1:OaUNahPvOdQz2nKcgeAfcUdxlEDlEV3xwLIkwzZ1B/U= github.com/iotaledger/iota.go v1.0.0-beta.7/go.mod h1:dMps6iMVU1pf5NDYNKIw4tRsPeC8W3ZWjOvYHOO1PMg= +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= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= @@ -82,39 +122,75 @@ github.com/mattn/go-isatty v0.0.9 h1:d5US/mDsogSGW37IV293h//ZFaeajb69h+EHFsv2xGg github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= github.com/mattn/go-runewidth v0.0.4 h1:2BvfKmzob6Bmd4YsL0zygOqfdFnK7GR4QL06Do4/p7Y= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/nbio/st v0.0.0-20140626010706-e9e8d9816f32/go.mod h1:9wM+0iRr9ahx58uYLpLIr5fm8diHn0JbqRycJi6w0Ms= +github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.8.0 h1:VkHVNpR4iVnU8XQR6DBm8BqYjN7CRzw+xKUbVVbbW9w= github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v1.5.0 h1:izbySO9zDPmjJ8rDjLvkA2zJHIo+HkYXHnf7eN7SSyo= github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 h1:q2e307iGHPdTGp0hoxKjt1H5pDo6utceo3dQVK3I5XQ= +github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/rivo/tview v0.0.0-20190721135419-23dc8a0944e4/go.mod h1:+rKjP5+h9HMwWRpAfhIkkQ9KE3m3Nz5rwn7YtUpwgqk= github.com/rivo/tview v0.0.0-20190829161255-f8bc69b90341 h1:d2Z5U4d3fenPRFFweaMCogbXiRywM5kgYtu20/hol3M= github.com/rivo/tview v0.0.0-20190829161255-f8bc69b90341/go.mod h1:+rKjP5+h9HMwWRpAfhIkkQ9KE3m3Nz5rwn7YtUpwgqk= github.com/rivo/uniseg v0.0.0-20190513083848-b9f5b9457d44/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= 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/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= +github.com/simia-tech/env v0.1.0/go.mod h1:eVRQ7W5NXXHifpPAcTJ3r5EmoGgMn++dXfSVbZv3Opo= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.1.2 h1:m8/z1t7/fwjysjQRYbP0RD+bUIF/8tJwPdEZsI83ACI= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= +github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= +github.com/spf13/viper v1.5.0 h1:GpsTwfsQ27oS/Aha/6d1oD7tpKIqWnOA6tgOX9HHkt4= +github.com/spf13/viper v1.5.0/go.mod h1:AkYRkVJF8TkSG/xet6PzXX+l39KhhXa2pdqVSxnTcn4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= +github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= +github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= @@ -122,8 +198,14 @@ github.com/valyala/fasttemplate v1.0.1 h1:tY9CJiPnMXf1ERmG2EyK7gNUd+c6RKGD0IfU8W github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +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/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +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= @@ -132,17 +214,31 @@ golang.org/x/crypto v0.0.0-20190829043050-9756ffdc2472 h1:Gv7RPwsi3eZ2Fgewe3CBsu golang.org/x/crypto v0.0.0-20190829043050-9756ffdc2472/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191029031824-8986dd9e96cf h1:fnPsqIDRbCSgumaMCRpoIoF2s4qxv0xSSS0BVZUE/ss= golang.org/x/crypto v0.0.0-20191029031824-8986dd9e96cf/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/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= +golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297 h1:k7pJ2yAPLPgbskkFdhRCsA77k2fySZ1zf2zCjvQCiIM= golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -158,17 +254,31 @@ golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= 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= +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= +google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 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/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= +gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I= +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= diff --git a/packages/graphviz/render_png.go b/packages/graphviz/render_png.go new file mode 100644 index 00000000..ae1c1bc3 --- /dev/null +++ b/packages/graphviz/render_png.go @@ -0,0 +1,25 @@ +package graphviz + +import ( + "io/ioutil" + "os" + "os/exec" + + "github.com/emicklei/dot" +) + +func RenderPNG(graph *dot.Graph, fileName string) (err error) { + if err = ioutil.WriteFile("_tmp.dot", []byte(graph.String()), os.ModePerm); err != nil { + return + } + + if _, err = exec.Command("dot", "-Tpng", "_tmp.dot", "-o", fileName).Output(); err != nil { + return + } + + if err = os.Remove("_tmp.dot"); err != nil { + return + } + + return +} diff --git a/packages/ledgerstate/_tmp.dot b/packages/ledgerstate/_tmp.dot deleted file mode 100644 index 9868bd43..00000000 --- a/packages/ledgerstate/_tmp.dot +++ /dev/null @@ -1,29 +0,0 @@ -digraph { - ranksep="1.0 equally"; - n9[color="#B85450",fillcolor="#F8CECC",label="",shape="Mdiamond",style="filled"]; - n10[color="#B85450",fillcolor="#F8CECC",label="",shape="Mdiamond",style="filled"]; - n11[color="#B85450",fillcolor="#F8CECC",label="",shape="Mdiamond",style="filled"]; - n6[color="#9673A6",fillcolor="#DAE8FC",label="AGGREGATED REALITY\n\n0x59a7cb38c58588aba986f855051495abc475b804c8cb246fd6757407f6293668 (1)",penwidth="2.0",shape="rect",style="filled"]; - n1[color="#6C8EBF",fillcolor="#DAE8FC",label="REALITY\n\nGSufYxGepaLWsiLwDLAURWfgkmTTydqP (1)",shape="rect",style="filled"]; - n3[color="#6C8EBF",fillcolor="#DAE8FC",label="REALITY\n\nHYVbVsWtXuokjqsezXDxIwFLsojfAqHH (1)",shape="rect",style="filled"]; - n2[color="#6C8EBF",fillcolor="#DAE8FC",label="REALITY\n\nMAIN_REALITY (2)",shape="rect",style="filled"]; - n4[color="#6C8EBF",fillcolor="#DAE8FC",label="REALITY\n\nNWscRATSxEOMUCWFMtsGiMvveCzTDggi (1)",shape="rect",style="filled"]; - n5[color="#6C8EBF",fillcolor="#DAE8FC",label="REALITY\n\nOujbHEvHbaogJoYgDMPPqapnhEFmNweo (1)",shape="rect",style="filled"]; - n7[color="#6C8EBF",fillcolor="#DAE8FC",label="REALITY\n\nuoIdkaUxrjBlNIwuAWAfNenOPudzhlUx (1)",shape="rect",style="filled"]; - n8[color="#6C8EBF",fillcolor="#DAE8FC",label="REALITY\n\nxEjDqModkSvUmyKFxgAaaghSSdbtEOJk (1)",shape="rect",style="filled"]; - n9->n5[arrowhead="none",arrowtail="none",color="#B85450"]; - n9->n3[arrowhead="none",arrowtail="none",color="#B85450"]; - n10->n7[arrowhead="none",arrowtail="none",color="#B85450"]; - n10->n8[arrowhead="none",arrowtail="none",color="#B85450"]; - n11->n1[arrowhead="none",arrowtail="none",color="#B85450"]; - n11->n4[arrowhead="none",arrowtail="none",color="#B85450"]; - n6->n7[arrowhead="none",arrowtail="none"]; - n6->n5[arrowhead="none",arrowtail="none"]; - n1->n2[arrowhead="none",arrowtail="none"]; - n3->n4[arrowhead="none",arrowtail="none"]; - n4->n2[arrowhead="none",arrowtail="none"]; - n5->n4[arrowhead="none",arrowtail="none"]; - n7->n2[arrowhead="none",arrowtail="none"]; - n8->n2[arrowhead="none",arrowtail="none"]; - -} \ No newline at end of file diff --git a/packages/ledgerstate/conflict_set.go b/packages/ledgerstate/conflict.go similarity index 50% rename from packages/ledgerstate/conflict_set.go rename to packages/ledgerstate/conflict.go index c9d429c5..a65dcf57 100644 --- a/packages/ledgerstate/conflict_set.go +++ b/packages/ledgerstate/conflict.go @@ -10,8 +10,8 @@ import ( "github.com/iotaledger/hive.go/objectstorage" ) -type ConflictSet struct { - id ConflictSetId +type Conflict struct { + id ConflictId members map[RealityId]empty storageKey []byte @@ -20,8 +20,8 @@ type ConflictSet struct { membersMutex sync.RWMutex } -func newConflictSet(id ConflictSetId) *ConflictSet { - result := &ConflictSet{ +func newConflictSet(id ConflictId) *Conflict { + result := &Conflict{ id: id, members: make(map[RealityId]empty), @@ -32,73 +32,73 @@ func newConflictSet(id ConflictSetId) *ConflictSet { return result } -func (conflictSet *ConflictSet) GetId() ConflictSetId { - return conflictSet.id +func (conflict *Conflict) GetId() ConflictId { + return conflict.id } -func (conflictSet *ConflictSet) AddReality(realityId RealityId) { - conflictSet.membersMutex.Lock() +func (conflict *Conflict) AddReality(realityId RealityId) { + conflict.membersMutex.Lock() - conflictSet.members[realityId] = void + conflict.members[realityId] = void - conflictSet.membersMutex.Unlock() + conflict.membersMutex.Unlock() } -func (conflictSet *ConflictSet) String() string { - conflictSet.membersMutex.RLock() - defer conflictSet.membersMutex.RUnlock() +func (conflict *Conflict) String() string { + conflict.membersMutex.RLock() + defer conflict.membersMutex.RUnlock() - return stringify.Struct("ConflictSet", - stringify.StructField("id", conflictSet.id.String()), - stringify.StructField("members", conflictSet.members), + return stringify.Struct("Conflict", + stringify.StructField("id", conflict.id.String()), + stringify.StructField("members", conflict.members), ) } // region support object storage /////////////////////////////////////////////////////////////////////////////////////// -func (conflictSet *ConflictSet) GetStorageKey() []byte { - return conflictSet.storageKey +func (conflict *Conflict) GetStorageKey() []byte { + return conflict.storageKey } -func (conflictSet *ConflictSet) Update(other objectstorage.StorableObject) { +func (conflict *Conflict) Update(other objectstorage.StorableObject) { fmt.Println("UPDATE") } -func (conflictSet *ConflictSet) MarshalBinary() ([]byte, error) { - conflictSet.membersMutex.RLock() +func (conflict *Conflict) MarshalBinary() ([]byte, error) { + conflict.membersMutex.RLock() offset := 0 - membersCount := len(conflictSet.members) + membersCount := len(conflict.members) result := make([]byte, 4+membersCount*realityIdLength) binary.LittleEndian.PutUint32(result[offset:], uint32(membersCount)) offset += 4 - for realityId := range conflictSet.members { + for realityId := range conflict.members { copy(result[offset:], realityId[:realityIdLength]) offset += realityIdLength } - conflictSet.membersMutex.RUnlock() + conflict.membersMutex.RUnlock() return result, nil } -func (conflictSet *ConflictSet) UnmarshalBinary(serializedObject []byte) error { - if err := conflictSet.id.UnmarshalBinary(conflictSet.storageKey); err != nil { +func (conflict *Conflict) UnmarshalBinary(serializedObject []byte) error { + if err := conflict.id.UnmarshalBinary(conflict.storageKey); err != nil { return err } - if members, err := conflictSet.unmarshalMembers(serializedObject); err != nil { + if members, err := conflict.unmarshalMembers(serializedObject); err != nil { return err } else { - conflictSet.members = members + conflict.members = members } return nil } -func (conflictSet *ConflictSet) unmarshalMembers(serializedConsumers []byte) (map[RealityId]empty, error) { +func (conflict *Conflict) unmarshalMembers(serializedConsumers []byte) (map[RealityId]empty, error) { offset := 0 membersCount := int(binary.LittleEndian.Uint32(serializedConsumers[offset:])) diff --git a/packages/ledgerstate/conflict_set_id.go b/packages/ledgerstate/conflict_id.go similarity index 57% rename from packages/ledgerstate/conflict_set_id.go rename to packages/ledgerstate/conflict_id.go index 2f686279..0d084ca0 100644 --- a/packages/ledgerstate/conflict_set_id.go +++ b/packages/ledgerstate/conflict_id.go @@ -7,17 +7,17 @@ import ( "golang.org/x/crypto/blake2b" ) -type ConflictSetId [conflictSetIdLength]byte +type ConflictId [conflictSetIdLength]byte -func NewConflictSetId(conflictSetBytes ...interface{}) (result ConflictSetId) { - switch len(conflictSetBytes) { +func NewConflictSetId(conflictBytes ...interface{}) (result ConflictId) { + switch len(conflictBytes) { case 2: - transferHash, ok := conflictSetBytes[0].(TransferHash) + transferHash, ok := conflictBytes[0].(TransferHash) if !ok { panic("expected first parameter of NewConflictSetId to be a TransferHash") } - addressHash, ok := conflictSetBytes[0].(TransferHash) + addressHash, ok := conflictBytes[0].(TransferHash) if !ok { panic("expected second parameter of NewConflictSetId to be a AddressHash") } @@ -35,17 +35,17 @@ func NewConflictSetId(conflictSetBytes ...interface{}) (result ConflictSetId) { return } -func (conflictSetId *ConflictSetId) UnmarshalBinary(data []byte) error { - copy(conflictSetId[:], data[:conflictSetIdLength]) +func (conflictId *ConflictId) UnmarshalBinary(data []byte) error { + copy(conflictId[:], data[:conflictSetIdLength]) return nil } -func (conflictSetId ConflictSetId) String() string { - if utf8.Valid(conflictSetId[:]) { - return string(conflictSetId[:]) +func (conflictId ConflictId) String() string { + if utf8.Valid(conflictId[:]) { + return string(conflictId[:]) } else { - return stringify.SliceOfBytes(conflictSetId[:]) + return stringify.SliceOfBytes(conflictId[:]) } } diff --git a/packages/ledgerstate/conflict_id_list.go b/packages/ledgerstate/conflict_id_list.go new file mode 100644 index 00000000..afd0a940 --- /dev/null +++ b/packages/ledgerstate/conflict_id_list.go @@ -0,0 +1,23 @@ +package ledgerstate + +type ConflictIdList []ConflictId + +func (conflictIdList ConflictIdList) Clone() (clone ConflictIdList) { + clone = make(ConflictIdList, len(conflictIdList)) + + for key, value := range conflictIdList { + clone[key] = value + } + + return +} + +func (conflictIdList ConflictIdList) ToSet() (set ConflictIdSet) { + set = make(ConflictIdSet) + + for _, value := range conflictIdList { + set[value] = void + } + + return +} diff --git a/packages/ledgerstate/conflict_id_set.go b/packages/ledgerstate/conflict_id_set.go new file mode 100644 index 00000000..ccc431ca --- /dev/null +++ b/packages/ledgerstate/conflict_id_set.go @@ -0,0 +1,36 @@ +package ledgerstate + +type ConflictIdSet map[ConflictId]empty + +func NewConflictIdSet(conflictIds ...ConflictId) (conflictIdSet ConflictIdSet) { + conflictIdSet = make(ConflictIdSet) + + for _, realityId := range conflictIds { + conflictIdSet[realityId] = void + } + + return +} + +func (conflictIdSet ConflictIdSet) Clone() (clone ConflictIdSet) { + clone = make(ConflictIdSet, len(conflictIdSet)) + + for key := range conflictIdSet { + clone[key] = void + } + + return +} + +func (conflictIdSet ConflictIdSet) ToList() (list ConflictIdList) { + list = make(ConflictIdList, len(conflictIdSet)) + + i := 0 + for key := range conflictIdSet { + list[i] = key + + i++ + } + + return +} diff --git a/packages/ledgerstate/ledgerstate.go b/packages/ledgerstate/ledgerstate.go index 04759124..caf22788 100644 --- a/packages/ledgerstate/ledgerstate.go +++ b/packages/ledgerstate/ledgerstate.go @@ -10,6 +10,8 @@ import ( "strings" "time" + "github.com/iotaledger/goshimmer/packages/graphviz" + "golang.org/x/crypto/blake2b" "github.com/emicklei/dot" @@ -68,7 +70,7 @@ func (ledgerState *LedgerState) GetTransferOutput(transferOutputReference *Trans func (ledgerState *LedgerState) ForEachConflictSet(callback func(object *objectstorage.CachedObject) bool) { if err := ledgerState.conflictSets.ForEach(func(key []byte, cachedObject *objectstorage.CachedObject) bool { - cachedObject.Get().(*ConflictSet).ledgerState = ledgerState + cachedObject.Get().(*Conflict).ledgerState = ledgerState return callback(cachedObject) }); err != nil { @@ -161,13 +163,13 @@ func (ledgerState *LedgerState) BookTransfer(transfer *Transfer) error { } func (ledgerState *LedgerState) GenerateRealityVisualization(pngFilename string) error { - di := dot.NewGraph(dot.Directed) - di.Attr("ranksep", "1.0 equally") + graph := dot.NewGraph(dot.Directed) + graph.Attr("ranksep", "1.0 equally") realityNodes := make(map[RealityId]dot.Node) - drawConflictSet := func(conflictSet *ConflictSet) { - conflictSetNode := di.Node(strings.Trim(conflictSet.id.String(), "\x00")) + drawConflictSet := func(conflictSet *Conflict) { + conflictSetNode := graph.Node(strings.Trim(conflictSet.id.String(), "\x00")) conflictSetNode.Attr("label", "") conflictSetNode.Attr("shape", "Mdiamond") conflictSetNode.Attr("style", "filled") @@ -181,24 +183,24 @@ func (ledgerState *LedgerState) GenerateRealityVisualization(pngFilename string) var drawReality func(reality *Reality) dot.Node drawReality = func(reality *Reality) dot.Node { - realityNode, exists := realityNodes[reality.GetId()] + realityNode, exists := realityNodes[reality.id] if !exists { - if len(reality.parentRealities) > 1 { - realityNode = di.Node("AGGREGATED REALITY\n\n" + strings.Trim(reality.GetId().String(), "\x00") + " (" + strconv.Itoa(reality.GetTransferOutputCount()) + ")") + if reality.IsAggregated() { + realityNode = graph.Node("AGGREGATED REALITY\n\n" + strings.Trim(reality.id.String(), "\x00") + " (" + strconv.Itoa(int(reality.GetTransferOutputCount())) + ")") realityNode.Attr("style", "filled") realityNode.Attr("shape", "rect") realityNode.Attr("color", "#9673A6") realityNode.Attr("fillcolor", "#DAE8FC") realityNode.Attr("penwidth", "2.0") } else { - realityNode = di.Node("REALITY\n\n" + strings.Trim(reality.GetId().String(), "\x00") + " (" + strconv.Itoa(reality.GetTransferOutputCount()) + ")") + realityNode = graph.Node("REALITY\n\n" + strings.Trim(reality.id.String(), "\x00") + " (" + strconv.Itoa(int(reality.GetTransferOutputCount())) + ")") realityNode.Attr("style", "filled") realityNode.Attr("shape", "rect") realityNode.Attr("color", "#6C8EBF") realityNode.Attr("fillcolor", "#DAE8FC") } - realityNodes[reality.GetId()] = realityNode + realityNodes[reality.id] = realityNode } if !exists { @@ -221,30 +223,15 @@ func (ledgerState *LedgerState) GenerateRealityVisualization(pngFilename string) return true }) - ledgerState.ForEachConflictSet(func(object *objectstorage.CachedObject) bool { object.Consume(func(object objectstorage.StorableObject) { - drawConflictSet(object.(*ConflictSet)) + drawConflictSet(object.(*Conflict)) }) return true }) - d1 := []byte(di.String()) - if err := ioutil.WriteFile("_tmp.dot", d1, 0755); err != nil { - return err - } - - _, err := exec.Command("dot", "-Tpng", "_tmp.dot", "-o", pngFilename).Output() - if err != nil { - return err - } - - //if err := os.Remove("_tmp.dot"); err != nil { - // return err - //} - - return nil + return graphviz.RenderPNG(graph, pngFilename) } func (ledgerState *LedgerState) GenerateVisualization() error { @@ -309,7 +296,7 @@ func (ledgerState *LedgerState) GenerateVisualization() error { return nil } -func (ledgerState *LedgerState) MergeRealities(realityIds ...RealityId) *objectstorage.CachedObject { +func (ledgerState *LedgerState) AggregateRealities(realityIds ...RealityId) *objectstorage.CachedObject { switch len(realityIds) { case 0: if loadedReality, loadedRealityErr := ledgerState.realities.Load(MAIN_REALITY_ID[:]); loadedRealityErr != nil { @@ -352,16 +339,16 @@ func (ledgerState *LedgerState) MergeRealities(realityIds ...RealityId) *objects for aggregatedRealityId, aggregatedReality := range aggregatedRealities { // if an already aggregated reality "descends" from the current reality, then we have found the more // "specialized" reality already and keep it - if aggregatedReality.Get().(*Reality).DescendsFromReality(realityId) { + if aggregatedReality.Get().(*Reality).DescendsFrom(realityId) { continue AGGREGATE_REALITIES } // if the current reality - if reality.DescendsFromReality(aggregatedRealityId) { + if reality.DescendsFrom(aggregatedRealityId) { delete(aggregatedRealities, aggregatedRealityId) aggregatedReality.Release() - aggregatedRealities[reality.GetId()] = cachedReality + aggregatedRealities[reality.id] = cachedReality continue AGGREGATE_REALITIES } @@ -540,7 +527,7 @@ func (ledgerState *LedgerState) getTargetReality(inputs []*objectstorage.CachedO realityIds[i] = input.Get().(*TransferOutput).GetRealityId() } - return ledgerState.MergeRealities(realityIds...) + return ledgerState.AggregateRealities(realityIds...) } func (ledgerState *LedgerState) getTransferInputs(transfer *Transfer) []*objectstorage.CachedObject { @@ -582,7 +569,7 @@ func realityFactory(key []byte) objectstorage.StorableObject { } func conflictSetFactory(key []byte) objectstorage.StorableObject { - result := &ConflictSet{ + result := &Conflict{ storageKey: make([]byte, len(key)), } copy(result.storageKey, key) diff --git a/packages/ledgerstate/ledgerstate_test.go b/packages/ledgerstate/ledgerstate_test.go index c41f90d7..3ede1057 100644 --- a/packages/ledgerstate/ledgerstate_test.go +++ b/packages/ledgerstate/ledgerstate_test.go @@ -6,6 +6,8 @@ import ( "testing" "time" + "github.com/iotaledger/hive.go/parameter" + "github.com/iotaledger/goshimmer/packages/utils" "github.com/iotaledger/hive.go/objectstorage" @@ -29,6 +31,12 @@ var ( pendingReality = NewRealityId("PENDING") ) +func init() { + if err := parameter.FetchConfig(false); err != nil { + panic(err) + } +} + func Benchmark(b *testing.B) { ledgerState := NewLedgerState("testLedger").Prune().AddTransferOutput( transferHash1, addressHash1, NewColoredBalance(eth, 1337), diff --git a/packages/ledgerstate/realities.png b/packages/ledgerstate/realities.png index 06e0c5c9713e6efcfeb4b2c57075af9492f3ff62..ee04a70dc73d14b3b2f6fb0e66d329a0c21c9f19 100644 GIT binary patch literal 69353 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 literal 75304 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 z%0A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 K&t;ucLK6V<$NgIX diff --git a/packages/ledgerstate/reality.go b/packages/ledgerstate/reality.go index 4ed825f5..3645f106 100644 --- a/packages/ledgerstate/reality.go +++ b/packages/ledgerstate/reality.go @@ -1,63 +1,90 @@ package ledgerstate import ( - "fmt" "sync" + "sync/atomic" "github.com/iotaledger/goshimmer/packages/errors" - "github.com/iotaledger/goshimmer/packages/stringify" "github.com/iotaledger/hive.go/objectstorage" ) type Reality struct { - id RealityId - transferOutputCount int - parentRealities map[RealityId]empty - conflictSets map[ConflictSetId]empty + id RealityId + parentRealityIds RealityIdSet + parentRealityIdsMutex sync.RWMutex + conflictIds ConflictIdSet + conflictIdsMutex sync.RWMutex + transferOutputCount uint32 storageKey []byte ledgerState *LedgerState - - bookingMutex sync.RWMutex - transferOutputCountMutex sync.RWMutex - parentRealitiesMutex sync.RWMutex - conflictSetsMutex sync.RWMutex } +// region DONE REVIEWING /////////////////////////////////////////////////////////////////////////////////////////////// + +// Creates a new Reality with the given id and parents. It is only used internally and therefore "private". func newReality(id RealityId, parentRealities ...RealityId) *Reality { result := &Reality{ - id: id, - parentRealities: make(map[RealityId]empty), - conflictSets: make(map[ConflictSetId]empty), + id: id, + parentRealityIds: NewRealityIdSet(parentRealities...), + conflictIds: NewConflictIdSet(), storageKey: make([]byte, len(id)), } copy(result.storageKey, id[:]) - for _, parentRealityId := range parentRealities { - result.parentRealities[parentRealityId] = void - } - return result } +// Returns the id of this Reality. Since the id never changes, we do not need a mutex to protect this property. func (reality *Reality) GetId() RealityId { return reality.id } -func (reality *Reality) GetTransferOutputCount() (transferOutputCount int) { - reality.transferOutputCountMutex.RLock() - transferOutputCount = reality.transferOutputCount - reality.transferOutputCountMutex.RUnlock() +// Returns the set of RealityIds that are the parents of this Reality (it creates a clone). +func (reality *Reality) GetParentRealityIds() (realityIdSet RealityIdSet) { + reality.parentRealityIdsMutex.RLock() + realityIdSet = reality.parentRealityIds.Clone() + reality.parentRealityIdsMutex.RUnlock() return } -// [DONE] Checks if the Reality "descends" from the given RealityId. It returns true, if the RealityId addresses the -// Reality itself, or one of its ancestors. -func (reality *Reality) DescendsFromReality(realityId RealityId) bool { +// Sets the set of RealityIds that are the parents of this Reality. +func (reality *Reality) SetParentRealityIds(parentRealityIds RealityIdSet) { + reality.parentRealityIdsMutex.Lock() + reality.parentRealityIds = parentRealityIds + reality.parentRealityIdsMutex.Unlock() +} + +// Returns the amount of TransferOutputs in this Reality. +func (reality *Reality) GetTransferOutputCount() uint32 { + return atomic.LoadUint32(&(reality.transferOutputCount)) +} + +// Increases (and returns) the amount of TransferOutputs in this Reality. +func (reality *Reality) IncreaseTransferOutputCount() uint32 { + return atomic.AddUint32(&(reality.transferOutputCount), 1) +} + +// Decreases (and returns) the amount of TransferOutputs in this Reality. +func (reality *Reality) DecreaseTransferOutputCount() uint32 { + return atomic.AddUint32(&(reality.transferOutputCount), ^uint32(0)) +} + +// Returns true, if this reality is an "aggregated reality" that combines multiple other realities. +func (reality *Reality) IsAggregated() (isAggregated bool) { + reality.parentRealityIdsMutex.RLock() + isAggregated = len(reality.parentRealityIds) > 1 + reality.parentRealityIdsMutex.RUnlock() + + return +} + +// Returns true if the given RealityId addresses the Reality itself or one of its ancestors. +func (reality *Reality) DescendsFrom(realityId RealityId) bool { if reality.id == realityId { return true } else { @@ -75,25 +102,27 @@ func (reality *Reality) DescendsFromReality(realityId RealityId) bool { } } +// endregion /////////////////////////////////////////////////////////////////////////////////////////////////////////// + // [DONE] Returns a map of all parent realities (one level). They have to manually be "released" when they are not // needed anymore. func (reality *Reality) GetParentRealities() map[RealityId]*objectstorage.CachedObject { parentRealities := make(map[RealityId]*objectstorage.CachedObject) - reality.parentRealitiesMutex.RLock() + reality.parentRealityIdsMutex.RLock() - for parentRealityId := range reality.parentRealities { + for parentRealityId := range reality.parentRealityIds { loadedParentReality := reality.ledgerState.GetReality(parentRealityId) if !loadedParentReality.Exists() { - reality.parentRealitiesMutex.RUnlock() + reality.parentRealityIdsMutex.RUnlock() panic("could not load parent reality with id \"" + string(parentRealityId[:]) + "\"") } - parentRealities[loadedParentReality.Get().(*Reality).GetId()] = loadedParentReality + parentRealities[loadedParentReality.Get().(*Reality).id] = loadedParentReality } - reality.parentRealitiesMutex.RUnlock() + reality.parentRealityIdsMutex.RUnlock() return parentRealities } @@ -115,10 +144,10 @@ func (reality *Reality) GetAncestorRealities() (result map[RealityId]*objectstor } // [DONE] Registers the conflict set in the Reality. -func (reality *Reality) AddConflictSet(conflictSetId ConflictSetId) { - reality.conflictSetsMutex.Lock() - reality.conflictSets[conflictSetId] = void - reality.conflictSetsMutex.Unlock() +func (reality *Reality) AddConflictSet(conflictSetId ConflictId) { + reality.conflictIdsMutex.Lock() + reality.conflictIds[conflictSetId] = void + reality.conflictIdsMutex.Unlock() } // [DONE] Creates a new sub Reality and "stores" it. It has to manually be "released" when it is not needed anymore. @@ -130,12 +159,8 @@ func (reality *Reality) CreateReality(id RealityId) *objectstorage.CachedObject } func (reality *Reality) BookTransfer(transfer *Transfer) (err error) { - reality.bookingMutex.RLock() - err = reality.bookTransfer(transfer.GetHash(), reality.ledgerState.getTransferInputs(transfer), transfer.GetOutputs()) - reality.bookingMutex.RUnlock() - return } @@ -153,15 +178,24 @@ func (reality *Reality) bookTransfer(transferHash TransferHash, inputs objectsto var targetRealityId RealityId copy(targetRealityId[:], transferHash[:]) - for _, conflictSet := range conflictSets { - conflictSet.Get().(*ConflictSet).AddReality(targetRealityId) - } - reality.CreateReality(targetRealityId).Consume(func(object objectstorage.StorableObject) { - object.(*Reality).persistTransfer(transferHash, outputs) + targetReality := object.(*Reality) + + for _, cachedConflictSet := range conflictSets { + conflictSet := cachedConflictSet.Get().(*Conflict) + + conflictSet.AddReality(targetRealityId) + targetReality.AddConflictSet(conflictSet.GetId()) + } + + for addressHash, coloredBalances := range outputs { + targetReality.bookTransferOutput(NewTransferOutput(reality.ledgerState, emptyRealityId, transferHash, addressHash, coloredBalances...)) + } }) } else { - reality.persistTransfer(transferHash, outputs) + for addressHash, coloredBalances := range outputs { + reality.bookTransferOutput(NewTransferOutput(reality.ledgerState, emptyRealityId, transferHash, addressHash, coloredBalances...)) + } } conflictSets.Release() @@ -180,7 +214,7 @@ func (reality *Reality) verifyTransfer(inputs []*objectstorage.CachedObject, out } transferOutput := cachedInput.Get().(*TransferOutput) - if !reality.DescendsFromReality(transferOutput.GetRealityId()) { + if !reality.DescendsFrom(transferOutput.GetRealityId()) { return errors.New("the referenced funds do not exist in this reality") } @@ -245,7 +279,7 @@ func (reality *Reality) retrieveConflictSetForConflictingInput(input *TransferOu conflictSet = reality.ledgerState.conflictSets.Store(newConflictSet) - err = reality.elevateTransferOutputs(consumersToElevate, conflictSet.Get().(*ConflictSet)) + err = reality.createRealityForConflictingConsumers(consumersToElevate, conflictSet.Get().(*Conflict)) if err != nil { return } @@ -254,14 +288,14 @@ func (reality *Reality) retrieveConflictSetForConflictingInput(input *TransferOu if err != nil { return } - conflictSet.Get().(*ConflictSet).ledgerState = reality.ledgerState + conflictSet.Get().(*Conflict).ledgerState = reality.ledgerState } return } -func (reality *Reality) elevateTransferOutputs(transferOutputs map[TransferHash][]AddressHash, conflictSet *ConflictSet) (err error) { - for transferHash, addressHashes := range transferOutputs { +func (reality *Reality) createRealityForConflictingConsumers(conflictingConsumers map[TransferHash][]AddressHash, conflictSet *Conflict) (err error) { + for transferHash, addressHashes := range conflictingConsumers { // determine RealityId elevatedRealityId := transferHash.ToRealityId() @@ -269,11 +303,11 @@ func (reality *Reality) elevateTransferOutputs(transferOutputs map[TransferHash] reality.CreateReality(elevatedRealityId).Consume(func(object objectstorage.StorableObject) { elevatedReality := object.(*Reality) - // register Reality <-> ConflictSet + // register Reality <-> Conflict conflictSet.AddReality(elevatedRealityId) elevatedReality.AddConflictSet(conflictSet.GetId()) - // elevate TransferOutputs + // elevate TransferOutputs to the new Reality for _, addressHash := range addressHashes { if err = reality.elevateTransferOutput(NewTransferOutputReference(transferHash, addressHash), elevatedReality); err != nil { return @@ -286,68 +320,65 @@ func (reality *Reality) elevateTransferOutputs(transferOutputs map[TransferHash] } func (reality *Reality) elevateTransferOutput(transferOutputReference *TransferOutputReference, newReality *Reality) (err error) { - if cachedTransferOutputToElevate := reality.ledgerState.GetTransferOutput(transferOutputReference); !cachedTransferOutputToElevate.Exists() { + cachedTransferOutputToElevate := reality.ledgerState.GetTransferOutput(transferOutputReference) + if !cachedTransferOutputToElevate.Exists() { return errors.New("could not find TransferOutput to elevate") - } else { - cachedTransferOutputToElevate.Consume(func(object objectstorage.StorableObject) { - transferOutputToElevate := object.(*TransferOutput) + } - if transferOutputToElevate.GetRealityId() == reality.id { - if moveErr := newReality.bookTransferOutput(transferOutputToElevate); moveErr != nil { - err = moveErr + cachedTransferOutputToElevate.Consume(func(object objectstorage.StorableObject) { + transferOutputToElevate := object.(*TransferOutput) - return - } + if transferOutputToElevate.GetRealityId() == reality.id { + err = reality.elevateTransferOutputOfCurrentReality(transferOutputToElevate, newReality) + } else { + reality.ledgerState.GetReality(transferOutputToElevate.GetRealityId()).Consume(func(nestedReality objectstorage.StorableObject) { + err = nestedReality.(*Reality).elevateTransferOutputOfNestedReality(transferOutputToElevate, reality.id, newReality.id) + }) + } + }) - for transferHash, addresses := range transferOutputToElevate.GetConsumers() { - for _, addressHash := range addresses { - if elevateErr := reality.elevateTransferOutput(NewTransferOutputReference(transferHash, addressHash), newReality); elevateErr != nil { - err = elevateErr + return +} - return - } - } - } - } else { - reality.ledgerState.GetReality(transferOutputToElevate.GetRealityId()).Consume(func(nestedReality objectstorage.StorableObject) { - nestedReality.(*Reality).elevateReality(reality.id, newReality.GetId()) - }) +func (reality *Reality) elevateTransferOutputOfCurrentReality(transferOutput *TransferOutput, newReality *Reality) (err error) { + if err = newReality.bookTransferOutput(transferOutput); err != nil { + return + } + + for transferHash, addresses := range transferOutput.GetConsumers() { + for _, addressHash := range addresses { + if elevateErr := reality.elevateTransferOutput(NewTransferOutputReference(transferHash, addressHash), newReality); elevateErr != nil { + err = elevateErr + + return } - }) + } } return } -func (reality *Reality) elevateReality(oldParentRealityId RealityId, newParentRealityId RealityId) { - reality.bookingMutex.Lock() - reality.parentRealitiesMutex.Lock() +func (reality *Reality) elevateTransferOutputOfNestedReality(transferOutput *TransferOutput, oldParentRealityId RealityId, newParentRealityId RealityId) (err error) { + if !reality.IsAggregated() { + reality.parentRealityIdsMutex.Lock() + reality.parentRealityIds.Remove(oldParentRealityId).Add(newParentRealityId) + reality.parentRealityIdsMutex.Unlock() - fmt.Println(reality.id) - - if len(reality.parentRealities) > 1 { - // aggregated reality - fmt.Println("AGGREGATED REALITY") - delete(reality.parentRealities, oldParentRealityId) - reality.parentRealities[newParentRealityId] = void - } else { - delete(reality.parentRealities, oldParentRealityId) - reality.parentRealities[newParentRealityId] = void + return } - reality.parentRealitiesMutex.Unlock() - reality.bookingMutex.Unlock() -} + newParentRealities := reality.GetParentRealityIds().Remove(oldParentRealityId).Add(newParentRealityId).ToList() -func (reality *Reality) persistTransfer(transferHash TransferHash, transferOutputs map[AddressHash][]*ColoredBalance) { - for addressHash, coloredBalances := range transferOutputs { - reality.bookTransferOutput(NewTransferOutput(reality.ledgerState, emptyRealityId, transferHash, addressHash, coloredBalances...)) - } + reality.ledgerState.AggregateRealities(newParentRealities...).Store().Consume(func(object objectstorage.StorableObject) { + err = reality.elevateTransferOutputOfCurrentReality(transferOutput, object.(*Reality)) + }) + + return } func (reality *Reality) bookTransferOutput(transferOutput *TransferOutput) (err error) { // retrieve required variables - realityId := reality.GetId() + realityId := reality.id transferOutputRealityId := transferOutput.GetRealityId() transferOutputAddressHash := transferOutput.GetAddressHash() transferOutputSpent := len(transferOutput.consumers) >= 1 @@ -368,11 +399,10 @@ func (reality *Reality) bookTransferOutput(transferOutput *TransferOutput) (err transferOutput.SetRealityId(realityId) reality.ledgerState.GetReality(transferOutputRealityId).Consume(func(object objectstorage.StorableObject) { - oldReality := object.(*Reality) - - oldReality.transferOutputCountMutex.Lock() - oldReality.transferOutputCount-- - oldReality.transferOutputCountMutex.Unlock() + // decrease transferOutputCount and remove reality if it is empty + if object.(*Reality).DecreaseTransferOutputCount() == 0 { + reality.ledgerState.realities.Delete(transferOutputRealityId[:]) + } }) oldTransferOutputBooking.Delete().Release() @@ -383,21 +413,18 @@ func (reality *Reality) bookTransferOutput(transferOutput *TransferOutput) (err if transferOutputRealityId != realityId { reality.ledgerState.storeTransferOutputBooking(newTransferOutputBooking(realityId, transferOutputAddressHash, transferOutputSpent, transferOutputTransferHash)).Release() - reality.transferOutputCountMutex.Lock() - reality.transferOutputCount++ - reality.transferOutputCountMutex.Unlock() + reality.IncreaseTransferOutputCount() } return } func (reality *Reality) String() (result string) { - reality.parentRealitiesMutex.RLock() - - parentRealities := make([]string, len(reality.parentRealities)) + reality.parentRealityIdsMutex.RLock() + parentRealities := make([]string, len(reality.parentRealityIds)) i := 0 - for parentRealityId := range reality.parentRealities { + for parentRealityId := range reality.parentRealityIds { parentRealities[i] = parentRealityId.String() i++ @@ -408,7 +435,7 @@ func (reality *Reality) String() (result string) { stringify.StructField("parentRealities", parentRealities), ) - reality.parentRealitiesMutex.RUnlock() + reality.parentRealityIdsMutex.RUnlock() return } diff --git a/packages/ledgerstate/reality.objectstorage.go b/packages/ledgerstate/reality.objectstorage.go index 8dabf056..7ccdc5ed 100644 --- a/packages/ledgerstate/reality.objectstorage.go +++ b/packages/ledgerstate/reality.objectstorage.go @@ -11,37 +11,33 @@ func (reality *Reality) GetStorageKey() []byte { } func (reality *Reality) Update(other objectstorage.StorableObject) { - reality.bookingMutex.Lock() - if otherReality, ok := other.(*Reality); !ok { - reality.bookingMutex.Unlock() - panic("Update method expects a *TransferOutputBooking") } else { - reality.parentRealities = otherReality.parentRealities + reality.parentRealityIdsMutex.Lock() + reality.parentRealityIds = otherReality.parentRealityIds + reality.parentRealityIdsMutex.Unlock() } - - reality.bookingMutex.Unlock() } func (reality *Reality) MarshalBinary() ([]byte, error) { - reality.parentRealitiesMutex.RLock() + reality.parentRealityIdsMutex.RLock() - parentRealityCount := len(reality.parentRealities) + parentRealityCount := len(reality.parentRealityIds) marshaledReality := make([]byte, 4+4+parentRealityCount*realityIdLength) - binary.LittleEndian.PutUint32(marshaledReality, uint32(reality.transferOutputCount)) + binary.LittleEndian.PutUint32(marshaledReality, uint32(reality.GetTransferOutputCount())) binary.LittleEndian.PutUint32(marshaledReality[4:], uint32(parentRealityCount)) i := 0 - for parentRealityId := range reality.parentRealities { + for parentRealityId := range reality.parentRealityIds { copy(marshaledReality[4+4+i*realityIdLength:], parentRealityId[:]) i++ } - reality.parentRealitiesMutex.RUnlock() + reality.parentRealityIdsMutex.RUnlock() return marshaledReality, nil } @@ -51,9 +47,9 @@ func (reality *Reality) UnmarshalBinary(serializedObject []byte) error { return err } - reality.parentRealities = make(map[RealityId]empty) + reality.parentRealityIds = NewRealityIdSet() - reality.transferOutputCount = int(binary.LittleEndian.Uint32(serializedObject)) + reality.transferOutputCount = binary.LittleEndian.Uint32(serializedObject) parentRealityCount := int(binary.LittleEndian.Uint32(serializedObject[4:])) for i := 0; i < parentRealityCount; i++ { @@ -62,7 +58,7 @@ func (reality *Reality) UnmarshalBinary(serializedObject []byte) error { return err } - reality.parentRealities[restoredRealityId] = void + reality.parentRealityIds[restoredRealityId] = void } return nil diff --git a/packages/ledgerstate/reality_id_list.go b/packages/ledgerstate/reality_id_list.go new file mode 100644 index 00000000..1d6189cd --- /dev/null +++ b/packages/ledgerstate/reality_id_list.go @@ -0,0 +1,23 @@ +package ledgerstate + +type RealityIdList []RealityId + +func (realityIdList RealityIdList) Clone() (clone RealityIdList) { + clone = make(RealityIdList, len(realityIdList)) + + for key, value := range realityIdList { + clone[key] = value + } + + return +} + +func (realityIdList RealityIdList) ToSet() (set RealityIdSet) { + set = make(RealityIdSet) + + for _, value := range realityIdList { + set[value] = void + } + + return +} diff --git a/packages/ledgerstate/reality_id_set.go b/packages/ledgerstate/reality_id_set.go new file mode 100644 index 00000000..e202a306 --- /dev/null +++ b/packages/ledgerstate/reality_id_set.go @@ -0,0 +1,48 @@ +package ledgerstate + +type RealityIdSet map[RealityId]empty + +func NewRealityIdSet(realityIds ...RealityId) (realityIdSet RealityIdSet) { + realityIdSet = make(RealityIdSet) + + for _, realityId := range realityIds { + realityIdSet[realityId] = void + } + + return +} + +func (realityIdSet RealityIdSet) Add(realityId RealityId) RealityIdSet { + realityIdSet[realityId] = void + + return realityIdSet +} + +func (realityIdSet RealityIdSet) Remove(realityId RealityId) RealityIdSet { + delete(realityIdSet, realityId) + + return realityIdSet +} + +func (realityIdSet RealityIdSet) Clone() (clone RealityIdSet) { + clone = make(RealityIdSet, len(realityIdSet)) + + for key := range realityIdSet { + clone[key] = void + } + + return +} + +func (realityIdSet RealityIdSet) ToList() (list RealityIdList) { + list = make(RealityIdList, len(realityIdSet)) + + i := 0 + for key := range realityIdSet { + list[i] = key + + i++ + } + + return +} diff --git a/packages/ledgerstate_old/address.go b/packages/ledgerstate_old/address.go deleted file mode 100644 index 95d2750a..00000000 --- a/packages/ledgerstate_old/address.go +++ /dev/null @@ -1,62 +0,0 @@ -package ledgerstate - -type AddressHash [addressHashLength]byte - -type Address struct { - ledgerState *LedgerState - realityId RealityId - hash AddressHash -} - -func NewAddress(ledgerState *LedgerState, realityId RealityId, hash AddressHash) *Address { - return &Address{ - ledgerState: ledgerState, - realityId: realityId, - hash: hash, - } -} - -func (address *Address) GetHash() AddressHash { - return address.hash -} - -func (address *Address) GetRealityId() RealityId { - return address.realityId -} - -func (address *Address) GetReality() *Reality { - return address.ledgerState.GetReality(address.realityId) -} - -func (address *Address) GetUnspentTransferOutputs() (unspentTransferOutputs []*TransferOutput) { - unspentTransferOutputs = make([]*TransferOutput, 0) - - address.collectUnspentTransferOutputs(address.realityId, &unspentTransferOutputs) - for ancestorRealityId := range address.GetReality().GetAncestorRealities() { - address.collectUnspentTransferOutputs(ancestorRealityId, &unspentTransferOutputs) - } - - return unspentTransferOutputs -} - -func (address *Address) collectUnspentTransferOutputs(realityId RealityId, unspentTransferOutputs *[]*TransferOutput) { - address.ledgerState.ForEachTransferOutput(func(transferOutput *TransferOutput) { - *unspentTransferOutputs = append(*unspentTransferOutputs, transferOutput) - }, FilterRealities(realityId), FilterAddresses(address.hash), FilterUnspent()) -} - -func (address *Address) GetTransferOutputs() map[TransferHash]*TransferOutput { - return nil -} - -func (address *Address) GetBalances() map[Color]uint64 { - balances := make(map[Color]uint64) - - for _, unspentTransferOutput := range address.GetUnspentTransferOutputs() { - for colorHash, balance := range unspentTransferOutput.GetColoredBalances() { - balances[colorHash] += balance.GetValue() - } - } - - return balances -} diff --git a/packages/ledgerstate_old/colored_balance.go b/packages/ledgerstate_old/colored_balance.go deleted file mode 100644 index 71b690fa..00000000 --- a/packages/ledgerstate_old/colored_balance.go +++ /dev/null @@ -1,31 +0,0 @@ -package ledgerstate - -import ( - "strconv" -) - -type Color string - -type ColoredBalance struct { - color Color - balance uint64 -} - -func NewColoredBalance(color Color, balance uint64) *ColoredBalance { - return &ColoredBalance{ - color: color, - balance: balance, - } -} - -func (balance *ColoredBalance) GetColor() Color { - return balance.color -} - -func (balance *ColoredBalance) GetValue() uint64 { - return balance.balance -} - -func (coloredBalance *ColoredBalance) String() string { - return "ColoredBalance(\"" + string(coloredBalance.color) + "\", " + strconv.FormatUint(coloredBalance.balance, 10) + ")" -} diff --git a/packages/ledgerstate_old/constants.go b/packages/ledgerstate_old/constants.go deleted file mode 100644 index e2449f56..00000000 --- a/packages/ledgerstate_old/constants.go +++ /dev/null @@ -1,24 +0,0 @@ -package ledgerstate - -var ( - MAIN_REALITY_ID = [realityIdLength]byte{} -) - -const ( - UNSPENT_SEPARATOR_BYTE = byte(0) - SPENT_SEPARATOR_BYTE = byte(1) - - transferHashLength = 32 - addressHashLength = 32 - realityIdLength = 32 - - marshalTransferOutputBookingRealityIdStart = 0 - marshalTransferOutputBookingRealityIdEnd = marshalTransferOutputBookingRealityIdStart + realityIdLength - marshalTransferOutputBookingAddressHashStart = marshalTransferOutputBookingRealityIdEnd - marshalTransferOutputBookingAddressHashEnd = marshalTransferOutputBookingAddressHashStart + addressHashLength - marshalTransferOutputBookingSpentStart = marshalTransferOutputBookingAddressHashEnd - marshalTransferOutputBookingSpentEnd = marshalTransferOutputBookingSpentStart + 1 - marshalTransferOutputBookingTransferHashStart = marshalTransferOutputBookingSpentEnd - marshalTransferOutputBookingTransferHashEnd = marshalTransferOutputBookingTransferHashStart + transferHashLength - marshalTransferOutputBookingTotalLength = marshalTransferOutputBookingTransferHashEnd -) diff --git a/packages/ledgerstate_old/errors.go b/packages/ledgerstate_old/errors.go deleted file mode 100644 index c531dcb8..00000000 --- a/packages/ledgerstate_old/errors.go +++ /dev/null @@ -1,8 +0,0 @@ -package ledgerstate - -import "github.com/iotaledger/goshimmer/packages/errors" - -var ( - ErrInvalidTransfer = errors.New("invalid transfer") - ErrUnmarshalFailed = errors.New("unmarshal failed") -) diff --git a/packages/ledgerstate_old/ledgerstate.go b/packages/ledgerstate_old/ledgerstate.go deleted file mode 100644 index 3c45d734..00000000 --- a/packages/ledgerstate_old/ledgerstate.go +++ /dev/null @@ -1,242 +0,0 @@ -package ledgerstate - -import ( - "github.com/iotaledger/goshimmer/packages/errors" - "github.com/iotaledger/goshimmer/packages/objectstorage" -) - -// region LedgerState ////////////////////////////////////////////////////////////////////////////////////////////////// - -type LedgerState struct { - storageId []byte - transferOutputs TransferOutputStorage - realities RealityStorage - options *LedgerStateOptions -} - -func NewLedgerState(storageId []byte, options ...LedgerStateOption) (result *LedgerState) { - ledgerStateOptions := DEFAULT_LEDGER_STATE_OPTIONS.Override(options...) - - realityStorage := ledgerStateOptions.RealityStorageFactory(storageId) - - result = &LedgerState{ - storageId: storageId, - options: ledgerStateOptions, - transferOutputs: ledgerStateOptions.TransferOutputStorageFactory(storageId), - realities: realityStorage, - } - - newReality := newReality(result, MAIN_REALITY_ID) - if storeErr := realityStorage.StoreReality(newReality); storeErr != nil { - panic(storeErr) - } - - return -} - -func (ledgerState *LedgerState) AddTransferOutput(transferHash TransferHash, addressHash AddressHash, balances ...*ColoredBalance) *LedgerState { - if err := ledgerState.transferOutputs.StoreTransferOutput(NewTransferOutput(ledgerState, MAIN_REALITY_ID, addressHash, transferHash, balances...)); err != nil { - panic(err) - } - - return ledgerState -} - -func (ledgerState *LedgerState) AddTransferOutputOld(transferOutput *TransferOutput) *LedgerState { - if err := ledgerState.transferOutputs.StoreTransferOutput(transferOutput); err != nil { - panic(err) - } - - return ledgerState -} - -func (ledgerState *LedgerState) GetTransferOutput(transferOutputReference *TransferOutputReference) *objectstorage.CachedObject { - if transferOutput, err := ledgerState.transferOutputs.LoadTransferOutput(transferOutputReference.GetId()); err != nil { - panic(err) - } else { - return transferOutput - } -} - -func (ledgerState *LedgerState) ForEachTransferOutput(callback func(transferOutput *TransferOutput), filter ...TransferOutputStorageFilter) { - ledgerState.transferOutputs.ForEach(callback, filter...) -} - -func (ledgerState *LedgerState) BookTransfer(transfer *Transfer) errors.IdentifiableError { - if !transfer.IsValid(ledgerState) { - return ErrInvalidTransfer.Derive("balance of transfer is invalid") - } - - realities := make([]RealityId, 0) - for _, input := range transfer.GetInputs() { - transferOutput := ledgerState.GetTransferOutput(input) - if transferOutput == nil { - return ErrInvalidTransfer.Derive("referenced transfer output doesn't exist") - } - - realities = append(realities, transferOutput.GetRealityId()) - } - - aggregatedReality := ledgerState.MergeRealities(realities...) - if err := ledgerState.realities.StoreReality(aggregatedReality); err != nil { - return err - } - - aggregatedReality.BookTransfer(transfer) - // determine the transferoutputs - // aggregate their realities - // persist reality - // book funds in this reality - - return nil -} - -func (ledgerState *LedgerState) CreateReality(realityId RealityId) *Reality { - if loadedReality, err := ledgerState.realities.LoadReality(realityId); err != nil { - panic(err) - } else if loadedReality != nil { - return loadedReality - } else { - newReality := newReality(ledgerState, realityId, MAIN_REALITY_ID) - - if storeErr := ledgerState.realities.StoreReality(newReality); storeErr != nil { - panic(storeErr) - } - - return newReality - } -} - -func (ledgerState *LedgerState) GetReality(realityId RealityId) *Reality { - if loadedReality, loadedRealityErr := ledgerState.realities.LoadReality(realityId); loadedRealityErr != nil { - panic(loadedRealityErr) - } else { - return loadedReality - } -} - -func (ledgerState *LedgerState) MergeRealities(realityIds ...RealityId) *Reality { - switch len(realityIds) { - case 0: - if loadedReality, loadedRealityErr := ledgerState.realities.LoadReality(MAIN_REALITY_ID); loadedRealityErr != nil { - panic(loadedRealityErr) - } else { - return loadedReality - } - case 1: - if loadedReality, loadedRealityErr := ledgerState.realities.LoadReality(realityIds[0]); loadedRealityErr != nil { - panic(loadedRealityErr) - } else { - return loadedReality - } - default: - aggregatedRealities := make(map[RealityId]*Reality) - - for _, realityId := range realityIds { - if _, exists := aggregatedRealities[realityId]; exists { - continue - } - - switchedRealities := make(map[RealityId]*Reality) - realityIncluded := false - for independentRealityId, independentReality := range aggregatedRealities { - if independentReality.DescendsFromReality(realityId) { - realityIncluded = true - - break - } else { - if loadedReality, loadedRealityErr := ledgerState.realities.LoadReality(realityId); loadedRealityErr != nil { - panic(loadedRealityErr) - } else if loadedReality == nil { - return nil - } else if loadedReality.DescendsFromReality(independentRealityId) { - switchedRealities[independentRealityId] = loadedReality - - realityIncluded = true - - break - } - } - } - for oldId, newReality := range switchedRealities { - delete(aggregatedRealities, oldId) - aggregatedRealities[newReality.GetId()] = newReality - } - if realityIncluded { - continue - } - - if loadedReality, loadedRealityErr := ledgerState.realities.LoadReality(realityId); loadedRealityErr != nil { - panic(loadedRealityErr) - } else { - aggregatedRealities[realityId] = loadedReality - } - } - - if len(aggregatedRealities) == 1 { - for _, independentReality := range aggregatedRealities { - return independentReality - } - } else { - sortedRealityIds := make([]RealityId, len(aggregatedRealities)) - counter := 0 - for realityId := range aggregatedRealities { - sortedRealityIds[counter] = realityId - - counter++ - } - // TODO: CALCULATE REALITY ID INSTEAD OF MAIN_REALITY_ID - newReality := newReality(ledgerState, MAIN_REALITY_ID, sortedRealityIds...) - - if storeErr := ledgerState.realities.StoreReality(newReality); storeErr != nil { - panic(storeErr) - } - - return newReality - } - - return nil - } -} - -func (ledgerState *LedgerState) ForEachReality(callback func(reality *Reality), filter ...*TransferOutputStorageFilter) { -} - -// endregion /////////////////////////////////////////////////////////////////////////////////////////////////////////// - -// region LedgerStateOptions /////////////////////////////////////////////////////////////////////////////////////////// - -var DEFAULT_LEDGER_STATE_OPTIONS = &LedgerStateOptions{ - TransferOutputStorageFactory: newTransferOutputStorageMemory, - RealityStorageFactory: newRealityStorageMemory, -} - -func OptionTransferOutputStorageFactory(factory TransferOutputStorageFactory) LedgerStateOption { - return func(args *LedgerStateOptions) { - args.TransferOutputStorageFactory = factory - } -} - -func OptionStorageFactory(factory RealityStorageFactory) LedgerStateOption { - return func(args *LedgerStateOptions) { - args.RealityStorageFactory = factory - } -} - -type LedgerStateOptions struct { - TransferOutputStorageFactory TransferOutputStorageFactory - RealityStorageFactory RealityStorageFactory -} - -func (options LedgerStateOptions) Override(optionalOptions ...LedgerStateOption) *LedgerStateOptions { - result := &options - for _, option := range optionalOptions { - option(result) - } - - return result -} - -type LedgerStateOption func(*LedgerStateOptions) - -// endregion /////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/packages/ledgerstate_old/ledgerstate_test.go b/packages/ledgerstate_old/ledgerstate_test.go deleted file mode 100644 index 94f2da1e..00000000 --- a/packages/ledgerstate_old/ledgerstate_test.go +++ /dev/null @@ -1,103 +0,0 @@ -package ledgerstate - -import ( - "testing" -) - -func Benchmark(b *testing.B) { - address1 := NewAddressHash("ADDRESS1") - address2 := NewAddressHash("ADDRESS2") - address3 := NewAddressHash("ADDRESS3") - transfer1 := NewTransferHash("TRANSFER1") - transfer2 := NewTransferHash("TRANSFER2") - - ledgerState := NewLedgerState([]byte("TESTLEDGER")) - - ledgerState.AddTransferOutputOld( - NewTransferOutput(ledgerState, MAIN_REALITY_ID, address1, transfer1, NewColoredBalance("RED", 1337), NewColoredBalance("IOTA", 1338)), - ) - - b.ResetTimer() - - for i := 0; i < b.N; i++ { - transfer := NewTransfer(transfer2).AddInput( - NewTransferOutputReferenceOld(MAIN_REALITY_ID, address1, transfer1), - ).AddOutput( - address2, NewColoredBalance("IOTA", 338), - ).AddOutput( - address2, NewColoredBalance("RED", 337), - ).AddOutput( - address3, NewColoredBalance("IOTA", 1000), - ).AddOutput( - address3, NewColoredBalance("RED", 1000), - ) - - if err := ledgerState.BookTransfer(transfer); err != nil { - panic(err) - } - } -} - -func NewAddressHash(input string) (result AddressHash) { - copy(result[:], input) - return -} - -func NewRealityId(input string) (result RealityId) { - copy(result[:], input) - return -} - -func NewTransferHash(input string) (result TransferHash) { - copy(result[:], input) - return -} - -func Test(t *testing.T) { - //pendingReality := NewRealityId("PENDING") - address1 := NewAddressHash("ADDRESS1") - //address2 := NewAddressHash("ADDRESS2") - //address3 := NewAddressHash("ADDRESS3") - //address4 := NewAddressHash("ADDRESS4") - transfer1 := NewTransferHash("TRANSFER1") - //transfer2 := NewTransferHash("TRANSFER2") - //transfer3 := NewTransferHash("TRANSFER3") - - ledgerState := NewLedgerState([]byte("TESTLEDGER")) - - ledgerState.AddTransferOutput(transfer1, address1, NewColoredBalance("RED", 1337), NewColoredBalance("IOTA", 1338)) - ledgerState.GetTransferOutput(NewTransferOutputReference(transfer1, address1)) - - /* - ledgerState.CreateReality(pendingReality) - - ledgerState.AddTransferOutputOld( - NewTransferOutput(ledgerState, MAIN_REALITY_ID, address1, transfer1, NewColoredBalance("RED", 1337), NewColoredBalance("IOTA", 1338)), - ).AddTransferOutputOld( - NewTransferOutput(ledgerState, pendingReality, address1, transfer1, NewColoredBalance("RED", 7331), NewColoredBalance("IOTA", 8331)), - ).AddTransferOutputOld( - NewTransferOutput(ledgerState, pendingReality, address2, transfer2, NewColoredBalance("RED", 7331), NewColoredBalance("IOTA", 8331)), - ) - - fmt.Println(ledgerState.GetReality(pendingReality).GetAddress(address1).GetUnspentTransferOutputs()) - - transfer := NewTransfer(transfer3).AddInput( - NewTransferOutputReferenceOld(MAIN_REALITY_ID, address1, transfer1), - ).AddOutput( - address3, NewColoredBalance("IOTA", 338), - ).AddOutput( - address3, NewColoredBalance("RED", 337), - ).AddOutput( - address4, NewColoredBalance("IOTA", 1000), - ).AddOutput( - address4, NewColoredBalance("RED", 1000), - ) - - if err := ledgerState.BookTransfer(transfer); err != nil { - t.Error(err) - } - - fmt.Println(ledgerState.GetReality(MAIN_REALITY_ID).GetAddress(address3).GetBalances()) - fmt.Println(ledgerState.GetReality(MAIN_REALITY_ID).GetAddress(address4).GetBalances()) - */ -} diff --git a/packages/ledgerstate_old/reality.go b/packages/ledgerstate_old/reality.go deleted file mode 100644 index 12b756cb..00000000 --- a/packages/ledgerstate_old/reality.go +++ /dev/null @@ -1,94 +0,0 @@ -package ledgerstate - -import ( - "github.com/iotaledger/goshimmer/packages/errors" -) - -type RealityId [realityIdLength]byte - -type Reality struct { - ledgerState *LedgerState - id RealityId - parentRealityIds []RealityId - parentRealities map[RealityId]*Reality -} - -func newReality(ledgerState *LedgerState, id RealityId, parentRealityIds ...RealityId) *Reality { - return &Reality{ - ledgerState: ledgerState, - id: id, - parentRealityIds: parentRealityIds, - } -} - -func (reality *Reality) SetLedgerState(ledgerState *LedgerState) { - reality.ledgerState = ledgerState -} - -func (reality *Reality) GetId() RealityId { - return reality.id -} - -func (reality *Reality) GetParentRealityIds() []RealityId { - return reality.parentRealityIds -} - -func (reality *Reality) GetAddress(addressHash AddressHash) *Address { - return NewAddress(reality.ledgerState, reality.id, addressHash) -} - -func (reality *Reality) GetParentRealities() map[RealityId]*Reality { - if reality.parentRealities == nil { - parentRealities := make(map[RealityId]*Reality) - for _, parentRealityId := range reality.parentRealityIds { - if loadedParentReality := reality.ledgerState.GetReality(parentRealityId); loadedParentReality == nil { - panic("could not load parent reality " + string(parentRealityId[:])) - } else { - parentRealities[loadedParentReality.GetId()] = loadedParentReality - } - } - reality.parentRealities = parentRealities - } - - return reality.parentRealities -} - -func (reality *Reality) GetAncestorRealities() (result map[RealityId]*Reality) { - result = make(map[RealityId]*Reality, 1) - - for _, parentReality := range reality.GetParentRealities() { - result[parentReality.GetId()] = reality - - for _, ancestor := range parentReality.GetAncestorRealities() { - result[ancestor.GetId()] = ancestor - } - } - - return -} - -func (reality *Reality) DescendsFromReality(realityId RealityId) bool { - if reality.id == realityId { - return true - } else { - _, exists := reality.GetAncestorRealities()[realityId] - - return exists - } -} - -func (reality *Reality) BookTransfer(transfer *Transfer) errors.IdentifiableError { - // process outputs - for addressHash, transferOutput := range transfer.GetOutputs() { - for _, coloredBalance := range transferOutput { - createdTransferOutput := NewTransferOutput(reality.ledgerState, reality.id, addressHash, transfer.GetHash(), coloredBalance) - reality.ledgerState.AddTransferOutputOld(createdTransferOutput) - } - } - - return nil -} - -func (reality *Reality) Exists() bool { - return reality != nil -} diff --git a/packages/ledgerstate_old/reality_storage.go b/packages/ledgerstate_old/reality_storage.go deleted file mode 100644 index b32429e1..00000000 --- a/packages/ledgerstate_old/reality_storage.go +++ /dev/null @@ -1,49 +0,0 @@ -package ledgerstate - -import ( - "sync" - - "github.com/iotaledger/goshimmer/packages/errors" -) - -type RealityStorage interface { - LoadReality(realityId RealityId) (result *Reality, err errors.IdentifiableError) - StoreReality(reality *Reality) (err errors.IdentifiableError) -} - -type RealityStorageFactory func(id []byte) RealityStorage - -type RealityStorageMemory struct { - id []byte - realities map[RealityId]*Reality - mutex sync.RWMutex -} - -var _ RealityStorage = &RealityStorageMemory{} - -func newRealityStorageMemory(id []byte) RealityStorage { - return &RealityStorageMemory{ - id: id, - realities: make(map[RealityId]*Reality), - } -} - -func (storage *RealityStorageMemory) StoreReality(reality *Reality) (err errors.IdentifiableError) { - storage.mutex.Lock() - - storage.realities[reality.GetId()] = reality - - storage.mutex.Unlock() - - return -} - -func (storage *RealityStorageMemory) LoadReality(realityId RealityId) (result *Reality, err errors.IdentifiableError) { - storage.mutex.RLock() - - result = storage.realities[realityId] - - storage.mutex.RUnlock() - - return -} diff --git a/packages/ledgerstate_old/transfer.go b/packages/ledgerstate_old/transfer.go deleted file mode 100644 index f38d3a6e..00000000 --- a/packages/ledgerstate_old/transfer.go +++ /dev/null @@ -1,77 +0,0 @@ -package ledgerstate - -type TransferHash [transferHashLength]byte - -type Transfer struct { - hash TransferHash - inputs []*TransferOutputReferenceOld - outputs map[AddressHash]map[Color]*ColoredBalance -} - -func NewTransfer(transferHash TransferHash) *Transfer { - return &Transfer{ - hash: transferHash, - inputs: make([]*TransferOutputReferenceOld, 0), - outputs: make(map[AddressHash]map[Color]*ColoredBalance), - } -} - -func (transfer *Transfer) GetHash() TransferHash { - return transfer.hash -} - -func (transfer *Transfer) IsValid(ledgerState *LedgerState) bool { - totalColoredBalances := make(map[Color]uint64) - - // process inputs - for _, transferOutputReference := range transfer.inputs { - if transferOutput := ledgerState.GetTransferOutput(transferOutputReference); transferOutput == nil { - return false - } else { - for colorHash, coloredBalance := range transferOutput.GetColoredBalances() { - totalColoredBalances[colorHash] += coloredBalance.GetValue() - } - } - } - - // process outputs - for _, transferOutput := range transfer.outputs { - for colorHash, coloredBalance := range transferOutput { - totalColoredBalances[colorHash] -= coloredBalance.GetValue() - - if totalColoredBalances[colorHash] == 0 { - delete(totalColoredBalances, colorHash) - } - } - } - - // transfer is valid if sum of funds is 0 - return len(totalColoredBalances) == 0 -} - -func (transfer *Transfer) AddInput(input *TransferOutputReferenceOld) *Transfer { - transfer.inputs = append(transfer.inputs, input) - - return transfer -} - -func (transfer *Transfer) GetInputs() []*TransferOutputReferenceOld { - return transfer.inputs -} - -func (transfer *Transfer) AddOutput(address AddressHash, balance *ColoredBalance) *Transfer { - addressEntry, addressExists := transfer.outputs[address] - if !addressExists { - addressEntry = make(map[Color]*ColoredBalance) - - transfer.outputs[address] = addressEntry - } - - addressEntry[balance.GetColor()] = balance - - return transfer -} - -func (transfer *Transfer) GetOutputs() map[AddressHash]map[Color]*ColoredBalance { - return transfer.outputs -} diff --git a/packages/ledgerstate_old/transfer_output.go b/packages/ledgerstate_old/transfer_output.go deleted file mode 100644 index b59af031..00000000 --- a/packages/ledgerstate_old/transfer_output.go +++ /dev/null @@ -1,97 +0,0 @@ -package ledgerstate - -import ( - "github.com/iotaledger/goshimmer/packages/objectstorage" -) - -// region TransferOutput /////////////////////////////////////////////////////////////////////////////////////////////// - -type TransferOutput struct { - ledgerState *LedgerState - realityId RealityId - addressHash AddressHash - transferHash TransferHash - coloredBalances map[Color]*ColoredBalance - consumers []TransferHash -} - -func NewTransferOutput(ledgerState *LedgerState, realityId RealityId, addressHash AddressHash, transferHash TransferHash, coloredBalances ...*ColoredBalance) (result *TransferOutput) { - result = &TransferOutput{ - ledgerState: ledgerState, - addressHash: addressHash, - transferHash: transferHash, - coloredBalances: make(map[Color]*ColoredBalance), - realityId: realityId, - consumers: make([]TransferHash, 0), - } - - for _, balance := range coloredBalances { - result.coloredBalances[balance.GetColor()] = balance - } - - return -} - -func (transferOutput *TransferOutput) GetId() []byte { - return nil -} - -func (transferOutput *TransferOutput) Update(otherObject objectstorage.StorableObject) { - if otherTransferOutput, ok := otherObject.(*TransferOutput); !ok { - panic("Update expects the passed in object to be a valid *TransferOutput") - } else { - transferOutput.realityId = otherTransferOutput.realityId - } -} - -func (transferOutput *TransferOutput) Marshal() ([]byte, error) { - return nil, nil -} -func (transferOutput *TransferOutput) Unmarshal(key []byte, serializedObject []byte) (objectstorage.StorableObject, error) { - return &TransferOutput{}, nil -} - -func (transferOutput *TransferOutput) GetRealityId() RealityId { - return transferOutput.realityId -} - -func (transferOutput *TransferOutput) GetReality(realityId RealityId) *Reality { - return transferOutput.ledgerState.GetReality(realityId) -} - -func (transferOutput *TransferOutput) GetAddressHash() AddressHash { - return transferOutput.addressHash -} - -func (transferOutput *TransferOutput) GetTransferHash() TransferHash { - return transferOutput.transferHash -} - -func (transferOutput *TransferOutput) GetColoredBalances() map[Color]*ColoredBalance { - return transferOutput.coloredBalances -} - -func (transferOutput *TransferOutput) GetConsumers() []TransferHash { - return transferOutput.consumers -} - -func (transferOutput *TransferOutput) Exists() bool { - return transferOutput != nil -} - -func (transferOutput *TransferOutput) String() (result string) { - result = "TransferOutput {\n" - result += " RealityHash: \"" + string(transferOutput.realityId[:]) + "\",\n" - result += " AddressHash: \"" + string(transferOutput.addressHash[:]) + "\",\n" - result += " TransferHash: \"" + string(transferOutput.transferHash[:]) + "\",\n" - - for _, coloredBalance := range transferOutput.coloredBalances { - result += " " + coloredBalance.String() + ",\n" - } - - result += "}" - - return -} - -// endregion /////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/packages/ledgerstate_old/transfer_output_booking.go b/packages/ledgerstate_old/transfer_output_booking.go deleted file mode 100644 index 22a77fda..00000000 --- a/packages/ledgerstate_old/transfer_output_booking.go +++ /dev/null @@ -1,108 +0,0 @@ -package ledgerstate - -import ( - "github.com/iotaledger/goshimmer/packages/objectstorage" -) - -// region struct + constructor + public api //////////////////////////////////////////////////////////////////////////// - -type TransferOutputBooking struct { - id [marshalTransferOutputBookingTotalLength]byte - realityId RealityId - addressHash AddressHash - spent bool - transferHash TransferHash -} - -func newTransferOutputBooking(realityId RealityId, addressHash AddressHash, spent bool, transferHash TransferHash) (result *TransferOutputBooking) { - result = &TransferOutputBooking{ - realityId: realityId, - addressHash: addressHash, - spent: spent, - transferHash: transferHash, - } - - result.buildId() - - return -} - -func (booking *TransferOutputBooking) GetRealityId() RealityId { - return booking.realityId -} - -func (booking *TransferOutputBooking) GetAddressHash() AddressHash { - return booking.addressHash -} - -func (booking *TransferOutputBooking) IsSpent() bool { - return booking.spent -} - -func (booking *TransferOutputBooking) GetTransferHash() TransferHash { - return booking.transferHash -} - -// endregion /////////////////////////////////////////////////////////////////////////////////////////////////////////// - -// region support object storage /////////////////////////////////////////////////////////////////////////////////////// - -func (booking *TransferOutputBooking) GetId() []byte { - return booking.id[:] -} - -func (booking *TransferOutputBooking) Update(other objectstorage.StorableObject) { - if otherBooking, ok := other.(*TransferOutputBooking); !ok { - panic("Update method expects a *TransferOutputBooking") - } else { - booking.realityId = otherBooking.realityId - booking.addressHash = otherBooking.addressHash - booking.spent = otherBooking.spent - booking.transferHash = otherBooking.transferHash - } -} - -func (booking *TransferOutputBooking) Marshal() ([]byte, error) { - return []byte{}, nil -} - -func (booking *TransferOutputBooking) Unmarshal(key []byte, serializedObject []byte) (objectstorage.StorableObject, error) { - if len(key) < marshalTransferOutputBookingTotalLength { - return nil, ErrUnmarshalFailed.Derive("unmarshal failed: the length of the key is to short") - } - - result := &TransferOutputBooking{} - - copy(result.realityId[:], key[marshalTransferOutputBookingRealityIdStart:marshalTransferOutputBookingRealityIdEnd]) - copy(result.addressHash[:], key[marshalTransferOutputBookingAddressHashStart:marshalTransferOutputBookingAddressHashEnd]) - switch key[marshalTransferOutputBookingSpentStart] { - case UNSPENT_SEPARATOR_BYTE: - result.spent = false - case SPENT_SEPARATOR_BYTE: - result.spent = true - default: - return nil, ErrUnmarshalFailed.Derive("unmarshal failed: invalid spent separator in key") - } - copy(result.transferHash[:], key[marshalTransferOutputBookingTransferHashStart:marshalTransferOutputBookingTransferHashEnd]) - - result.buildId() - - return result, nil -} - -// endregion /////////////////////////////////////////////////////////////////////////////////////////////////////////// - -// region private utility methods ////////////////////////////////////////////////////////////////////////////////////// - -func (booking *TransferOutputBooking) buildId() { - copy(booking.id[marshalTransferOutputBookingRealityIdStart:marshalTransferOutputBookingRealityIdEnd], booking.realityId[:realityIdLength]) - copy(booking.id[marshalTransferOutputBookingAddressHashStart:marshalTransferOutputBookingAddressHashEnd], booking.addressHash[:addressHashLength]) - if booking.spent { - booking.id[marshalTransferOutputBookingSpentStart] = SPENT_SEPARATOR_BYTE - } else { - booking.id[marshalTransferOutputBookingSpentStart] = UNSPENT_SEPARATOR_BYTE - } - copy(booking.id[marshalTransferOutputBookingTransferHashStart:marshalTransferOutputBookingTransferHashEnd], booking.addressHash[:transferHashLength]) -} - -// endregion /////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/packages/ledgerstate_old/transfer_output_reference.go b/packages/ledgerstate_old/transfer_output_reference.go deleted file mode 100644 index 7b048d6b..00000000 --- a/packages/ledgerstate_old/transfer_output_reference.go +++ /dev/null @@ -1,31 +0,0 @@ -package ledgerstate - -type TransferOutputReference struct { - id [transferHashLength + addressHashLength]byte - transferHash TransferHash - addressHash AddressHash -} - -func NewTransferOutputReference(transferHash TransferHash, addressHash AddressHash) (result *TransferOutputReference) { - result = &TransferOutputReference{ - transferHash: transferHash, - addressHash: addressHash, - } - - copy(result.id[0:], transferHash[:transferHashLength]) - copy(result.id[transferHashLength:], addressHash[:addressHashLength]) - - return -} - -func (reference *TransferOutputReference) GetId() []byte { - return reference.id[:] -} - -func (reference *TransferOutputReference) GetTransferHash() TransferHash { - return reference.transferHash -} - -func (reference *TransferOutputReference) GetAddressHash() AddressHash { - return reference.addressHash -} diff --git a/packages/ledgerstate_old/transfer_output_reference_old.go b/packages/ledgerstate_old/transfer_output_reference_old.go deleted file mode 100644 index 508f26e0..00000000 --- a/packages/ledgerstate_old/transfer_output_reference_old.go +++ /dev/null @@ -1,27 +0,0 @@ -package ledgerstate - -type TransferOutputReferenceOld struct { - realityId RealityId - addressHash AddressHash - transferHash TransferHash -} - -func NewTransferOutputReferenceOld(realityId RealityId, addressHash AddressHash, transferHash TransferHash) *TransferOutputReferenceOld { - return &TransferOutputReferenceOld{ - realityId: realityId, - addressHash: addressHash, - transferHash: transferHash, - } -} - -func (reference *TransferOutputReferenceOld) GetRealityId() RealityId { - return reference.realityId -} - -func (reference *TransferOutputReferenceOld) GetAddressHash() AddressHash { - return reference.addressHash -} - -func (reference *TransferOutputReferenceOld) GetTransferHash() TransferHash { - return reference.transferHash -} diff --git a/packages/ledgerstate_old/transfer_output_storage.go b/packages/ledgerstate_old/transfer_output_storage.go deleted file mode 100644 index 0187dc67..00000000 --- a/packages/ledgerstate_old/transfer_output_storage.go +++ /dev/null @@ -1,195 +0,0 @@ -package ledgerstate - -import ( - "sync" - - "github.com/iotaledger/goshimmer/packages/objectstorage" - - "github.com/iotaledger/goshimmer/packages/errors" -) - -// region TransferOutputStorage //////////////////////////////////////////////////////////////////////////////////////// - -type TransferOutputStorage interface { - LoadTransferOutput(transferOutputReference *TransferOutputReferenceOld) (result *TransferOutput, err errors.IdentifiableError) - StoreTransferOutput(transferOutput *TransferOutput) (err errors.IdentifiableError) - ForEach(callback func(transferOutput *TransferOutput), filters ...TransferOutputStorageFilter) -} - -type TransferOutputStorageFactory func(id []byte) TransferOutputStorage - -// endregion /////////////////////////////////////////////////////////////////////////////////////////////////////////// - -// region TransferOutputStorageFilters ///////////////////////////////////////////////////////////////////////////////// - -type TransferOutputStorageFilters struct { - FilterUnspent bool - FilterSpent bool - Realities map[RealityId]bool - Addresses map[AddressHash]bool -} - -func newTransportOutputStorageFilters(optionalFilters ...TransferOutputStorageFilter) *TransferOutputStorageFilters { - result := &TransferOutputStorageFilters{ - FilterUnspent: false, - FilterSpent: false, - Realities: make(map[RealityId]bool), - Addresses: make(map[AddressHash]bool), - } - - for _, optionalFilter := range optionalFilters { - optionalFilter(result) - } - - return result -} - -type TransferOutputStorageFilter func(*TransferOutputStorageFilters) - -func FilterSpent() TransferOutputStorageFilter { - return func(args *TransferOutputStorageFilters) { - args.FilterSpent = true - } -} - -func FilterUnspent() TransferOutputStorageFilter { - return func(args *TransferOutputStorageFilters) { - args.FilterUnspent = true - } -} - -func FilterRealities(realities ...RealityId) TransferOutputStorageFilter { - return func(args *TransferOutputStorageFilters) { - for _, reality := range realities { - args.Realities[reality] = true - } - } -} - -func FilterAddresses(addresses ...AddressHash) TransferOutputStorageFilter { - return func(args *TransferOutputStorageFilters) { - for _, reality := range addresses { - args.Addresses[reality] = true - } - } -} - -// endregion /////////////////////////////////////////////////////////////////////////////////////////////////////////// - -// region TransportOutputStorageMemory ///////////////////////////////////////////////////////////////////////////////// - -type TransferOutputStorageMemory struct { - id []byte - // the actual transfer outputs (prefixed by reality, address, spent/unspent, transfer hash) - transferOutputs *objectstorage.ObjectStorage - transferOutputBookings *objectstorage.ObjectStorage - - unspentTransferOutputsOld map[RealityId]map[AddressHash]map[TransferHash]bool - spentTransferOutputsOld map[RealityId]map[AddressHash]map[TransferHash]bool - transferOutputsOld map[AddressHash]map[TransferHash]*TransferOutput - mutex sync.RWMutex -} - -func newTransferOutputStorageMemory(id []byte) TransferOutputStorage { - return &TransferOutputStorageMemory{ - id: id, - transferOutputs: objectstorage.New(string(id)+"TRANSFER_OUTPUTS", &TransferOutput{}), - transferOutputBookings: objectstorage.New(string(id)+"TRANSFER_OUTPUT_REFERENCES", &TransferOutputBooking{}), - - unspentTransferOutputsOld: make(map[RealityId]map[AddressHash]map[TransferHash]bool), - spentTransferOutputsOld: make(map[RealityId]map[AddressHash]map[TransferHash]bool), - transferOutputsOld: make(map[AddressHash]map[TransferHash]*TransferOutput), - } -} - -func (transferOutputStorage *TransferOutputStorageMemory) StoreTransferOutput(transferOutput *TransferOutput) (err errors.IdentifiableError) { - transferOutputStorage.transferOutputs.Store(transferOutput).Release() - transferOutputStorage.mutex.Lock() - - var targetList map[RealityId]map[AddressHash]map[TransferHash]bool - if len(transferOutput.GetConsumers()) >= 1 { - targetList = transferOutputStorage.spentTransferOutputsOld - } else { - targetList = transferOutputStorage.unspentTransferOutputsOld - } - - reality, realityExists := targetList[transferOutput.GetRealityId()] - if !realityExists { - reality = make(map[AddressHash]map[TransferHash]bool) - - targetList[transferOutput.GetRealityId()] = reality - } - - address, addressExists := reality[transferOutput.GetAddressHash()] - if !addressExists { - address = make(map[TransferHash]bool) - - reality[transferOutput.GetAddressHash()] = address - } - - address[transferOutput.GetTransferHash()] = true - - transferOutputStorage.mutex.Unlock() - - return -} - -func (transferOutputStorage *TransferOutputStorageMemory) LoadTransferOutput(transferOutputReference *TransferOutputReferenceOld) (result *TransferOutput, err errors.IdentifiableError) { - if cachedTransferOutput, loadErr := transferOutputStorage.transferOutputs.Load([]byte{1, 2}[:]); loadErr != nil { - err = ErrInvalidTransfer.Derive(loadErr.Error()) - } else if cachedTransferOutput.Exists() { - result = cachedTransferOutput.Get().(*TransferOutput) - - cachedTransferOutput.Release() - } - - return -} - -func (transferOutputStorage *TransferOutputStorageMemory) IterateRealities(realities map[RealityId]map[AddressHash]map[TransferHash]*TransferOutput, filter *TransferOutputStorageFilters, callback func(transferOutput *TransferOutput)) { - if len(filter.Realities) >= 1 { - for realityId := range filter.Realities { - if reality, realityExists := realities[realityId]; realityExists { - transferOutputStorage.IterateAddresses(reality, filter, callback) - } - } - } else { - for _, reality := range realities { - transferOutputStorage.IterateAddresses(reality, filter, callback) - } - } -} - -func (transferOutputStorage *TransferOutputStorageMemory) IterateAddresses(addresses map[AddressHash]map[TransferHash]*TransferOutput, filter *TransferOutputStorageFilters, callback func(transferOutput *TransferOutput)) { - if len(filter.Addresses) >= 1 { - for addressHash := range filter.Addresses { - if address, addressExists := addresses[addressHash]; addressExists { - transferOutputStorage.IterateTransferOutputs(address, filter, callback) - } - } - } else { - for _, address := range addresses { - transferOutputStorage.IterateTransferOutputs(address, filter, callback) - } - } -} - -func (transferOutputStorage *TransferOutputStorageMemory) IterateTransferOutputs(transferOutputs map[TransferHash]*TransferOutput, filter *TransferOutputStorageFilters, callback func(transferOutput *TransferOutput)) { - for _, transferOutput := range transferOutputs { - callback(transferOutput) - } -} - -func (transferOutputStorage *TransferOutputStorageMemory) ForEach(callback func(transferOutput *TransferOutput), filters ...TransferOutputStorageFilter) { - //filter := newTransportOutputStorageFilters(filters...) - - /* - if filter.FilterUnspent || !filter.FilterUnspent && !filter.FilterSpent { - transferOutputStorage.IterateRealities(transferOutputStorage.unspentTransferOutputsOld, filter, callback) - } - if filter.FilterUnspent || !filter.FilterUnspent && !filter.FilterSpent { - transferOutputStorage.IterateRealities(transferOutputStorage.spentTransferOutputsOld, filter, callback) - }*/ -} - -// endregion /////////////////////////////////////////////////////////////////////////////////////////////////////////// -- GitLab