Repository: iotaledger/iota-core
Pull request #628 (2023-12-12 15:33:39)

Split Context Inputs and Inputs
Companion to iotaledger/iota.go#644.

I would like a review of two things in particular:
1. Where to best put `StateType`? The utxoledger is a very practical choice right now. If defined in `mempool` we cannot import in in `utxoledger` without causing an import cycle, in order to implement the `State` interface on `utxoledger.Output`.
2. Is it fine to not put Reward and BIC Inputs through the resolution process like they were before? Since we "resolve" them directly in `ValidateSignatures` we can skip the whole StateRef and State implementation on those which avoids unnecessary complexity, but I'm not 100% sure if that's fine.


Patch:
diff --git a/go.mod b/go.mod
index 09b6deb1..9204425e 100644
--- a/go.mod
+++ b/go.mod
@@ -11,21 +11,21 @@ require (
 	github.com/gorilla/websocket v1.5.1
 	github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0
 	github.com/iotaledger/hive.go/ads v0.0.0-20231214025533-67add6c5091b
-	github.com/iotaledger/hive.go/app v0.0.0-20231214121634-8b23c68d408d
-	github.com/iotaledger/hive.go/constraints v0.0.0-20231214121634-8b23c68d408d
-	github.com/iotaledger/hive.go/core v1.0.0-rc.3.0.20231214121634-8b23c68d408d
-	github.com/iotaledger/hive.go/crypto v0.0.0-20231214121634-8b23c68d408d
-	github.com/iotaledger/hive.go/ds v0.0.0-20231214121634-8b23c68d408d
-	github.com/iotaledger/hive.go/ierrors v0.0.0-20231214121634-8b23c68d408d
+	github.com/iotaledger/hive.go/app v0.0.0-20231219105941-542b1b724494
+	github.com/iotaledger/hive.go/constraints v0.0.0-20231219105941-542b1b724494
+	github.com/iotaledger/hive.go/core v1.0.0-rc.3.0.20231219095137-dd4674b3226e
+	github.com/iotaledger/hive.go/crypto v0.0.0-20231219105941-542b1b724494
+	github.com/iotaledger/hive.go/ds v0.0.0-20231219105941-542b1b724494
+	github.com/iotaledger/hive.go/ierrors v0.0.0-20231219105941-542b1b724494
 	github.com/iotaledger/hive.go/kvstore v0.0.0-20231214025533-67add6c5091b
-	github.com/iotaledger/hive.go/lo v0.0.0-20231214121634-8b23c68d408d
-	github.com/iotaledger/hive.go/log v0.0.0-20231214121634-8b23c68d408d
-	github.com/iotaledger/hive.go/runtime v0.0.0-20231214121634-8b23c68d408d
-	github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20231214121634-8b23c68d408d
-	github.com/iotaledger/hive.go/stringify v0.0.0-20231214121634-8b23c68d408d
-	github.com/iotaledger/inx-app v1.0.0-rc.3.0.20231214122225-f510ea9b00b5
-	github.com/iotaledger/inx/go v1.0.0-rc.2.0.20231206124145-f773dfe3927e
-	github.com/iotaledger/iota.go/v4 v4.0.0-20231211160706-492c65d5e3f5
+	github.com/iotaledger/hive.go/lo v0.0.0-20231219105941-542b1b724494
+	github.com/iotaledger/hive.go/log v0.0.0-20231219105941-542b1b724494
+	github.com/iotaledger/hive.go/runtime v0.0.0-20231219105941-542b1b724494
+	github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20231219095137-dd4674b3226e
+	github.com/iotaledger/hive.go/stringify v0.0.0-20231219105941-542b1b724494
+	github.com/iotaledger/inx-app v1.0.0-rc.3.0.20231219130724-cb37c927be6d
+	github.com/iotaledger/inx/go v1.0.0-rc.2.0.20231219130433-ad0971fe6306
+	github.com/iotaledger/iota.go/v4 v4.0.0-20231219130133-667f32aa821d
 	github.com/labstack/echo/v4 v4.11.3
 	github.com/labstack/gommon v0.4.1
 	github.com/libp2p/go-libp2p v0.32.0
@@ -40,13 +40,13 @@ require (
 	github.com/zyedidia/generic v1.2.1
 	go.uber.org/atomic v1.11.0
 	go.uber.org/dig v1.17.1
-	golang.org/x/crypto v0.16.0
-	google.golang.org/grpc v1.59.0
+	golang.org/x/crypto v0.17.0
+	google.golang.org/grpc v1.60.1
 	google.golang.org/protobuf v1.31.0
 )
 
 require (
-	filippo.io/edwards25519 v1.0.0 // indirect
+	filippo.io/edwards25519 v1.1.0 // indirect
 	github.com/benbjohnson/clock v1.3.5 // indirect
 	github.com/beorn7/perks v1.0.1 // indirect
 	github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect
@@ -60,7 +60,7 @@ require (
 	github.com/dustin/go-humanize v1.0.1 // indirect
 	github.com/eclipse/paho.mqtt.golang v1.4.3 // indirect
 	github.com/elastic/gosigar v0.14.2 // indirect
-	github.com/ethereum/go-ethereum v1.13.5 // indirect
+	github.com/ethereum/go-ethereum v1.13.6 // indirect
 	github.com/fatih/structs v1.1.0 // indirect
 	github.com/felixge/fgprof v0.9.3 // indirect
 	github.com/fjl/memsize v0.0.2 // indirect
@@ -167,17 +167,17 @@ require (
 	go.uber.org/mock v0.3.0 // indirect
 	go.uber.org/multierr v1.11.0 // indirect
 	go.uber.org/zap v1.26.0 // indirect
-	golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect
+	golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa // indirect
 	golang.org/x/image v0.13.0 // indirect
-	golang.org/x/mod v0.13.0 // indirect
+	golang.org/x/mod v0.14.0 // indirect
 	golang.org/x/net v0.19.0 // indirect
 	golang.org/x/sync v0.5.0 // indirect
 	golang.org/x/sys v0.15.0 // indirect
 	golang.org/x/text v0.14.0 // indirect
 	golang.org/x/time v0.5.0 // indirect
-	golang.org/x/tools v0.14.0 // indirect
+	golang.org/x/tools v0.15.0 // indirect
 	gonum.org/v1/gonum v0.14.0 // indirect
-	google.golang.org/genproto/googleapis/rpc v0.0.0-20231127180814-3a041ad873d4 // indirect
+	google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0 // indirect
 	gopkg.in/yaml.v2 v2.4.0 // indirect
 	gopkg.in/yaml.v3 v3.0.1 // indirect
 	lukechampine.com/blake3 v1.2.1 // indirect
diff --git a/go.sum b/go.sum
index 4be915ab..7ffa6cdf 100644
--- a/go.sum
+++ b/go.sum
@@ -6,8 +6,8 @@ dmitri.shuralyov.com/app/changes v0.0.0-20180602232624-0a106ad413e3/go.mod h1:Yl
 dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0/go.mod h1:JLBrvjyP0v+ecvNYvCpyZgu5/xkfAUhi6wJj28eUfSU=
 dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412/go.mod h1:a1inKt/atXimZ4Mv927x+r7UpyzRUf4emIoiiSC2TN4=
 dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c/go.mod h1:0PRwlb0D6DFvNNtx+9ybjezNCa8XF0xaYcETyp6rHWU=
-filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek=
-filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns=
+filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
+filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
 git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
 github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
@@ -98,8 +98,8 @@ github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.m
 github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
 github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
 github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/ethereum/go-ethereum v1.13.5 h1:U6TCRciCqZRe4FPXmy1sMGxTfuk8P7u2UoinF3VbaFk=
-github.com/ethereum/go-ethereum v1.13.5/go.mod h1:yMTu38GSuyxaYzQMViqNmQ1s3cE84abZexQmTgenWk0=
+github.com/ethereum/go-ethereum v1.13.6 h1:TMlJ4t3TLVcnAMo2S8q+WocDLB6z496cYtkRyJJNNKQ=
+github.com/ethereum/go-ethereum v1.13.6/go.mod h1:kcRZmuzRn1lVejiFNTz4l4W7imnpq1bDAnuKS/RyhbQ=
 github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
 github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
 github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo=
@@ -197,6 +197,8 @@ github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO
 github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8=
 github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU=
 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
+github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
 github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8=
 github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo=
 github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
@@ -277,38 +279,38 @@ github.com/iotaledger/grocksdb v1.7.5-0.20230220105546-5162e18885c7 h1:dTrD7X2PT
 github.com/iotaledger/grocksdb v1.7.5-0.20230220105546-5162e18885c7/go.mod h1:ZRdPu684P0fQ1z8sXz4dj9H5LWHhz4a9oCtvjunkSrw=
 github.com/iotaledger/hive.go/ads v0.0.0-20231214025533-67add6c5091b h1:sG5H0JmbjXPQ45eHTB27fQHViSu5sDRdSDQT54whalQ=
 github.com/iotaledger/hive.go/ads v0.0.0-20231214025533-67add6c5091b/go.mod h1:XH4lnT4RPCTVt4b4DNL4FMoi20Ip3f4eFBkIx8WimXg=
-github.com/iotaledger/hive.go/app v0.0.0-20231214121634-8b23c68d408d h1:zNxzb+qLM7J4O/4/OSa2z5saWC2gTL8IoozpcleM1Ds=
-github.com/iotaledger/hive.go/app v0.0.0-20231214121634-8b23c68d408d/go.mod h1:sQ+iVwZB/j8OxM1c81dsIcdzuFQMsXvrFK8dCfpQLCE=
-github.com/iotaledger/hive.go/constraints v0.0.0-20231214121634-8b23c68d408d h1:zRaPXIjAFO3pHftl9jgYN6Uy249haf2HqswTktfWS1Q=
-github.com/iotaledger/hive.go/constraints v0.0.0-20231214121634-8b23c68d408d/go.mod h1:dOBOM2s4se3HcWefPe8sQLUalGXJ8yVXw58oK8jke3s=
-github.com/iotaledger/hive.go/core v1.0.0-rc.3.0.20231214121634-8b23c68d408d h1:3i3bxbdqH8t4kFYo5pFfQnBTMsEPU6hnNNfSMyzSXq8=
-github.com/iotaledger/hive.go/core v1.0.0-rc.3.0.20231214121634-8b23c68d408d/go.mod h1:f+10zIZdQcEXGx9An2Y8YGfKwtdL3i0VlY9Ct+KbZEw=
-github.com/iotaledger/hive.go/crypto v0.0.0-20231214121634-8b23c68d408d h1:FXo3qvJeO0jEmCn7cPfiO4MAGkDGqzw8E8E1nWWCl8A=
-github.com/iotaledger/hive.go/crypto v0.0.0-20231214121634-8b23c68d408d/go.mod h1:YUdghEQkJkAO5GxEvpcKpSWtV5PxAIuW4hXIszROA2E=
-github.com/iotaledger/hive.go/ds v0.0.0-20231214121634-8b23c68d408d h1:/rmBzhxamjARxLNjcGPujS/3vI7hEC4sL6OJ00W0UlE=
-github.com/iotaledger/hive.go/ds v0.0.0-20231214121634-8b23c68d408d/go.mod h1:lDpFB4hkoUke5YxJ8ssmNNuY/qaxWaTQtVu/9y9BhKI=
-github.com/iotaledger/hive.go/ierrors v0.0.0-20231214121634-8b23c68d408d h1:PaA8E4u6FyjYC1iYrzIAXMBgCzl7CXNciAwm1Vy4/Hc=
-github.com/iotaledger/hive.go/ierrors v0.0.0-20231214121634-8b23c68d408d/go.mod h1:HcE8B5lP96enc/OALTb2/rIIi+yOLouRoHOKRclKmC8=
+github.com/iotaledger/hive.go/app v0.0.0-20231219105941-542b1b724494 h1:rO840L4zY8u6KaaDfj90gxfhgp1KxuSYeVd4yzTtTOQ=
+github.com/iotaledger/hive.go/app v0.0.0-20231219105941-542b1b724494/go.mod h1:sQ+iVwZB/j8OxM1c81dsIcdzuFQMsXvrFK8dCfpQLCE=
+github.com/iotaledger/hive.go/constraints v0.0.0-20231219105941-542b1b724494 h1:gt3LT6/ObMoS6X5KVugIwUTCSTWg7kyL2rAqmFdsIfM=
+github.com/iotaledger/hive.go/constraints v0.0.0-20231219105941-542b1b724494/go.mod h1:dOBOM2s4se3HcWefPe8sQLUalGXJ8yVXw58oK8jke3s=
+github.com/iotaledger/hive.go/core v1.0.0-rc.3.0.20231219095137-dd4674b3226e h1:GQkpZq4zo24jzCUpE6N9ixB5/NxE6XjeQCdRktkRfOw=
+github.com/iotaledger/hive.go/core v1.0.0-rc.3.0.20231219095137-dd4674b3226e/go.mod h1:f+10zIZdQcEXGx9An2Y8YGfKwtdL3i0VlY9Ct+KbZEw=
+github.com/iotaledger/hive.go/crypto v0.0.0-20231219105941-542b1b724494 h1:lsMO3ojhiSGb7jPUsrNPR/xtk2yL4tA2YHa3d4wZJ+I=
+github.com/iotaledger/hive.go/crypto v0.0.0-20231219105941-542b1b724494/go.mod h1:YUdghEQkJkAO5GxEvpcKpSWtV5PxAIuW4hXIszROA2E=
+github.com/iotaledger/hive.go/ds v0.0.0-20231219105941-542b1b724494 h1:3BnnbvvX6lrOp5fWpD3iXuk+s3nNXTTYPiadXYw+3fQ=
+github.com/iotaledger/hive.go/ds v0.0.0-20231219105941-542b1b724494/go.mod h1:lDpFB4hkoUke5YxJ8ssmNNuY/qaxWaTQtVu/9y9BhKI=
+github.com/iotaledger/hive.go/ierrors v0.0.0-20231219105941-542b1b724494 h1:LzsiaAUkXrlcyGPq+qsBdhbMMIZkM16hJoQgqkBr2r4=
+github.com/iotaledger/hive.go/ierrors v0.0.0-20231219105941-542b1b724494/go.mod h1:HcE8B5lP96enc/OALTb2/rIIi+yOLouRoHOKRclKmC8=
 github.com/iotaledger/hive.go/kvstore v0.0.0-20231214025533-67add6c5091b h1:tpZm/5y+zdOCkdTm4pcEC2cjd943EFKi+BSgNLBIA7A=
 github.com/iotaledger/hive.go/kvstore v0.0.0-20231214025533-67add6c5091b/go.mod h1:UjkGs5jxiEwIFyzX4wfNk01dHuqDtTOtbzsSqoJR9Pw=
-github.com/iotaledger/hive.go/lo v0.0.0-20231214121634-8b23c68d408d h1:4ElSjmSo4n6DZKtnD57CrK6oZl4uf9DSFTADIZjhtbU=
-github.com/iotaledger/hive.go/lo v0.0.0-20231214121634-8b23c68d408d/go.mod h1:kJ3T3R4oteGiO4KVlsHYoGWjl0StK2svlzqLjDPh7EQ=
-github.com/iotaledger/hive.go/log v0.0.0-20231214121634-8b23c68d408d h1:CZa2fR0/N65GiRQ7SCWSu9ljiCL8KpoOq0zyJ2uwlR0=
-github.com/iotaledger/hive.go/log v0.0.0-20231214121634-8b23c68d408d/go.mod h1:JQ7L06XNadFPtxCTKWOtzTtWQEgDHIt5NXAnQoPdu30=
-github.com/iotaledger/hive.go/runtime v0.0.0-20231214121634-8b23c68d408d h1:tq7SBxBAU2Hpyj76EaeZTk1Zkb0huW5+FlNI80MZhN8=
-github.com/iotaledger/hive.go/runtime v0.0.0-20231214121634-8b23c68d408d/go.mod h1:kpzzMz84eIcjRPjJiDv04HBp+vGjW7udXyQ2t/ixjNM=
-github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20231214121634-8b23c68d408d h1:NYOEB9jAl5XZ3+nZ1YAlicOw9Ox+Ikyb48KQc2D2pTY=
-github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20231214121634-8b23c68d408d/go.mod h1:2Gl3qEk1CV9uFPF79JM0Fn4Da39P6SZO+uIF4YMy2kk=
-github.com/iotaledger/hive.go/stringify v0.0.0-20231214121634-8b23c68d408d h1:p/9JAK3ngwESuy4TKs7Sio49z/begA38cwvpaxl4BMs=
-github.com/iotaledger/hive.go/stringify v0.0.0-20231214121634-8b23c68d408d/go.mod h1:FTo/UWzNYgnQ082GI9QVM9HFDERqf9rw9RivNpqrnTs=
-github.com/iotaledger/inx-app v1.0.0-rc.3.0.20231214122225-f510ea9b00b5 h1:AkSPs+Q32E+qO5dM8hkKbxXYtS1Bhu/1Cr9dpODyYw4=
-github.com/iotaledger/inx-app v1.0.0-rc.3.0.20231214122225-f510ea9b00b5/go.mod h1:sDallmfuE1wS4PNYA4LVFftkeUescTFvoBuuvd9KRyo=
-github.com/iotaledger/inx/go v1.0.0-rc.2.0.20231206124145-f773dfe3927e h1:jbtiUlmTpTdGiRBW1pniPSqRcDMJaIW8fGS+uORryas=
-github.com/iotaledger/inx/go v1.0.0-rc.2.0.20231206124145-f773dfe3927e/go.mod h1:zEb9onVHnDUStl5SsFBj7H0HBKfIN0c/pUND8Llfqp8=
+github.com/iotaledger/hive.go/lo v0.0.0-20231219105941-542b1b724494 h1:WzcyMcTExU4Xe4MGSu3WLjc1WVswUMmDiBY6m2Q+i3c=
+github.com/iotaledger/hive.go/lo v0.0.0-20231219105941-542b1b724494/go.mod h1:kJ3T3R4oteGiO4KVlsHYoGWjl0StK2svlzqLjDPh7EQ=
+github.com/iotaledger/hive.go/log v0.0.0-20231219105941-542b1b724494 h1:Is4KDfQ9qt8Ilq6RW1vOpbDTeGMHMPiSsyyBGkg7Ot4=
+github.com/iotaledger/hive.go/log v0.0.0-20231219105941-542b1b724494/go.mod h1:JQ7L06XNadFPtxCTKWOtzTtWQEgDHIt5NXAnQoPdu30=
+github.com/iotaledger/hive.go/runtime v0.0.0-20231219105941-542b1b724494 h1:f8Cp1XnbIcqWyyABd2nq4kkciui+CKaGSIJXLQSXi5s=
+github.com/iotaledger/hive.go/runtime v0.0.0-20231219105941-542b1b724494/go.mod h1:kpzzMz84eIcjRPjJiDv04HBp+vGjW7udXyQ2t/ixjNM=
+github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20231219095137-dd4674b3226e h1:FOz9/O6yuNYFICP33gjHJ+0SBdzIm1oWfFhaEEiOq8Q=
+github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20231219095137-dd4674b3226e/go.mod h1:2Gl3qEk1CV9uFPF79JM0Fn4Da39P6SZO+uIF4YMy2kk=
+github.com/iotaledger/hive.go/stringify v0.0.0-20231219105941-542b1b724494 h1:aa2z4tUca8aZNd2MLcLmGS19sP6BAAO9ULSOYJTFcxo=
+github.com/iotaledger/hive.go/stringify v0.0.0-20231219105941-542b1b724494/go.mod h1:FTo/UWzNYgnQ082GI9QVM9HFDERqf9rw9RivNpqrnTs=
+github.com/iotaledger/inx-app v1.0.0-rc.3.0.20231219130724-cb37c927be6d h1:R7cleqpThJm2N/nYlXiMs2n0fdhMoto0DDR+oPMmPRY=
+github.com/iotaledger/inx-app v1.0.0-rc.3.0.20231219130724-cb37c927be6d/go.mod h1:oSGCn7uIoz2nULqgbji3EJkMO26FzpOmCu5t2hbvjME=
+github.com/iotaledger/inx/go v1.0.0-rc.2.0.20231219130433-ad0971fe6306 h1:8JAa8DrYuKMNAqPkunib1HAvfNoK4X/xO02hqhwyYzI=
+github.com/iotaledger/inx/go v1.0.0-rc.2.0.20231219130433-ad0971fe6306/go.mod h1:KcwBYlfpd7w1SmAY75GBO5Ce7k/RyeCXA4TRQcOwTdQ=
 github.com/iotaledger/iota-crypto-demo v0.0.0-20231208171603-786bb32fdb00 h1:j5udgLtSN6wQgFI9vnhkdJsqsVdJmwtoc0yOmT/Ila4=
 github.com/iotaledger/iota-crypto-demo v0.0.0-20231208171603-786bb32fdb00/go.mod h1:gt+URx7DZu414nZME7jtGgxR4DVTSnNa1jF2trTUTZ0=
-github.com/iotaledger/iota.go/v4 v4.0.0-20231211160706-492c65d5e3f5 h1:2iQUEuYvuyeYtZBr6bRoM4xFLxRiQ66aBPgKuJTirh0=
-github.com/iotaledger/iota.go/v4 v4.0.0-20231211160706-492c65d5e3f5/go.mod h1:jU3Jlnhwv4KWlpft84lu9/M0QkCykESl29bL4oCenKs=
+github.com/iotaledger/iota.go/v4 v4.0.0-20231219130133-667f32aa821d h1:47rt2taNoMPgMF0BixlEd5q9RHEtvsGtIIuOkKsa2k4=
+github.com/iotaledger/iota.go/v4 v4.0.0-20231219130133-667f32aa821d/go.mod h1:66w9NjF5IDk4amUu+i54yPfSi3hLqpAOefotC0kZahs=
 github.com/ipfs/boxo v0.13.1 h1:nQ5oQzcMZR3oL41REJDcTbrvDvuZh3J9ckc9+ILeRQI=
 github.com/ipfs/boxo v0.13.1/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk=
 github.com/ipfs/go-cid v0.4.1 h1:A/T3qGvxi4kpKWWcPC/PgbvDA2bjVLO7n4UeVwnbs/s=
@@ -710,11 +712,11 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U
 golang.org/x/crypto v0.0.0-20200602180216-279210d13fed/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
-golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY=
-golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
+golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k=
+golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
 golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI=
-golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo=
+golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ=
+golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE=
 golang.org/x/image v0.13.0 h1:3cge/F/QTkNLauhf2QoE9zp+7sr+ZcL4HnoZmdwg9sg=
 golang.org/x/image v0.13.0/go.mod h1:6mmbMOeV28HuMTgA6OSRkdXKYw/t5W9Uwn2Yv1r3Yxk=
 golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
@@ -729,8 +731,8 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB
 golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.13.0 h1:I/DsJXRlw/8l/0c24sM9yb0T4z9liZTduXvdAWYiysY=
-golang.org/x/mod v0.13.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
+golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0=
+golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
 golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 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=
@@ -849,8 +851,8 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY
 golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
 golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
 golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
-golang.org/x/tools v0.14.0 h1:jvNa2pY0M4r62jkRQ6RwEZZyPcymeL9XZMLBbV7U2nc=
-golang.org/x/tools v0.14.0/go.mod h1:uYBEerGOWcJyEORxN+Ek8+TT266gXkNlHdJBwexUsBg=
+golang.org/x/tools v0.15.0 h1:zdAyfUGbYmuVokhzVmghFl2ZJh5QhcfebBgmVPFYA+8=
+golang.org/x/tools v0.15.0/go.mod h1:hpksKq4dtpQWS1uQ61JkdqWM3LscIS6Slf+VVkm+wQk=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -874,8 +876,8 @@ google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98
 google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
 google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
 google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231127180814-3a041ad873d4 h1:DC7wcm+i+P1rN3Ff07vL+OndGg5OhNddHyTA+ocPqYE=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231127180814-3a041ad873d4/go.mod h1:eJVxU6o+4G1PSczBr85xmyvSNYAKvAYgkub40YGomFM=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0 h1:/jFB8jK5R3Sq3i/lmeZO0cATSzFfZaJq1J2Euan3XKU=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0/go.mod h1:FUoWkonphQm3RhTS+kOEhF8h0iDpm4tdXolVCeZ9KKA=
 google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
 google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio=
 google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
@@ -887,8 +889,8 @@ google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8
 google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0=
 google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
 google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
+google.golang.org/grpc v1.60.1 h1:26+wFr+cNqSGFcOXcabYC0lUVJVRa2Sb2ortSK7VrEU=
+google.golang.org/grpc v1.60.1/go.mod h1:OlCHIeLYqSSsLi6i49B5QGdzaMZK9+M7LXN2FKz4eGM=
 google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
 google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
 google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
diff --git a/pkg/protocol/engine/ledger/ledger/ledger.go b/pkg/protocol/engine/ledger/ledger/ledger.go
index 2b8d903d..f28b5e16 100644
--- a/pkg/protocol/engine/ledger/ledger/ledger.go
+++ b/pkg/protocol/engine/ledger/ledger/ledger.go
@@ -7,6 +7,7 @@ import (
 	"github.com/iotaledger/hive.go/ds"
 	"github.com/iotaledger/hive.go/ierrors"
 	"github.com/iotaledger/hive.go/kvstore"
+	"github.com/iotaledger/hive.go/lo"
 	"github.com/iotaledger/hive.go/runtime/event"
 	"github.com/iotaledger/hive.go/runtime/module"
 	"github.com/iotaledger/iota-core/pkg/core/promise"
@@ -266,7 +267,8 @@ func (l *Ledger) Output(outputID iotago.OutputID) (*utxoledger.Output, error) {
 }
 
 func (l *Ledger) OutputOrSpent(outputID iotago.OutputID) (*utxoledger.Output, *utxoledger.Spent, error) {
-	stateWithMetadata, err := l.memPool.StateMetadata(outputID.UTXOInput())
+	stateRef := mempool.UTXOInputStateRefFromInput(outputID.UTXOInput())
+	stateWithMetadata, err := l.memPool.StateMetadata(stateRef)
 	if err != nil {
 		if ierrors.Is(iotago.ErrInputAlreadySpent, err) {
 			l.utxoLedger.ReadLockLedger()
@@ -613,7 +615,7 @@ func (l *Ledger) processStateDiffTransactions(stateDiff mempool.StateDiff) (spen
 		// process outputs
 		{
 			// input side
-			for _, inputRef := range inputRefs {
+			for _, inputRef := range lo.Map(inputRefs, mempool.UTXOInputStateRefFromInput) {
 				stateWithMetadata, stateError := l.memPool.StateMetadata(inputRef)
 				if stateError != nil {
 					err = ierrors.Errorf("failed to retrieve outputs of %s: %w", txID, errInput)
@@ -711,39 +713,36 @@ func (l *Ledger) resolveState(stateRef mempool.StateReference) *promise.Promise[
 	defer l.utxoLedger.ReadUnlockLedger()
 
 	switch stateRef.Type() {
-	case iotago.InputUTXO:
-		//nolint:forcetypeassert // we can safely assume that this is an UTXOInput
-		concreteStateRef := stateRef.(*iotago.UTXOInput)
-		isUnspent, err := l.utxoLedger.IsOutputIDUnspentWithoutLocking(concreteStateRef.OutputID())
+	case mempool.StateTypeUTXOInput:
+		//nolint:forcetypeassert // we can safely assume that this is a UTXOInputStateRef
+		utxoInput := stateRef.(mempool.UTXOInputStateRef).Input
+		isUnspent, err := l.utxoLedger.IsOutputIDUnspentWithoutLocking(utxoInput.OutputID())
 		if err != nil {
-			return p.Reject(ierrors.Wrapf(iotago.ErrUTXOInputInvalid, "error while retrieving output %s: %w", concreteStateRef.OutputID(), err))
+			return p.Reject(ierrors.Wrapf(iotago.ErrUTXOInputInvalid, "error while retrieving output %s: %w", utxoInput.OutputID(), err))
 		}
 
 		if !isUnspent {
-			return p.Reject(ierrors.Join(iotago.ErrInputAlreadySpent, ierrors.Wrapf(mempool.ErrStateNotFound, "unspent output %s not found", concreteStateRef.OutputID())))
+			return p.Reject(ierrors.Join(iotago.ErrInputAlreadySpent, ierrors.Wrapf(mempool.ErrStateNotFound, "unspent output %s not found", utxoInput.OutputID())))
 		}
 
 		// possible to cast `stateRef` to more specialized interfaces here, e.g. for DustOutput
-		output, err := l.utxoLedger.ReadOutputByOutputIDWithoutLocking(concreteStateRef.OutputID())
+		output, err := l.utxoLedger.ReadOutputByOutputIDWithoutLocking(utxoInput.OutputID())
 		if err != nil {
-			return p.Reject(ierrors.Wrapf(iotago.ErrUTXOInputInvalid, "output %s not found: %w", concreteStateRef.OutputID(), mempool.ErrStateNotFound))
+			return p.Reject(ierrors.Wrapf(iotago.ErrUTXOInputInvalid, "output %s not found: %w", utxoInput.OutputID(), mempool.ErrStateNotFound))
 		}
 
 		return p.Resolve(output)
-	case iotago.InputCommitment:
-		//nolint:forcetypeassert // we can safely assume that this is an CommitmentInput
-		concreteStateRef := stateRef.(*iotago.CommitmentInput)
-		loadedCommitment, err := l.loadCommitment(concreteStateRef.CommitmentID)
+	case mempool.StateTypeCommitment:
+		//nolint:forcetypeassert // we can safely assume that this is a CommitmentInputStateRef
+		commitment := stateRef.(mempool.CommitmentInputStateRef).Input
+		loadedCommitment, err := l.loadCommitment(commitment.CommitmentID)
 		if err != nil {
-			return p.Reject(ierrors.Join(iotago.ErrCommitmentInputInvalid, ierrors.Wrapf(err, "failed to load commitment %s", concreteStateRef.CommitmentID)))
+			return p.Reject(ierrors.Join(iotago.ErrCommitmentInputInvalid, ierrors.Wrapf(err, "failed to load commitment %s", commitment.CommitmentID)))
 		}
 
-		return p.Resolve(loadedCommitment)
-	case iotago.InputBlockIssuanceCredit, iotago.InputReward:
-		//nolint:forcetypeassert
-		return p.Resolve(stateRef.(mempool.State))
+		return p.Resolve(mempool.CommitmentInputStateFromCommitment(loadedCommitment))
 	default:
-		return p.Reject(ierrors.Errorf("unsupported input type %s", stateRef.Type()))
+		return p.Reject(ierrors.Errorf("unsupported input type %d", stateRef.Type()))
 	}
 }
 
diff --git a/pkg/protocol/engine/ledger/ledger/vm.go b/pkg/protocol/engine/ledger/ledger/vm.go
index 78fb952f..970d7886 100644
--- a/pkg/protocol/engine/ledger/ledger/vm.go
+++ b/pkg/protocol/engine/ledger/ledger/vm.go
@@ -28,10 +28,32 @@ func (v *VM) Inputs(transaction mempool.Transaction) (inputReferences []mempool.
 	}
 
 	for _, input := range stardustTransaction.TransactionEssence.Inputs {
-		inputReferences = append(inputReferences, input)
+		switch input.Type() {
+		case iotago.InputUTXO:
+			//nolint:forcetypeassert // we can safely assume that this is a UTXOInput
+			inputReferences = append(inputReferences, mempool.UTXOInputStateRefFromInput(
+				input.(*iotago.UTXOInput),
+			))
+		default:
+			return nil, ierrors.Errorf("unrecognized input type %d", input.Type())
+		}
 	}
-	for _, input := range stardustTransaction.TransactionEssence.ContextInputs {
-		inputReferences = append(inputReferences, input)
+
+	for _, contextInput := range stardustTransaction.TransactionEssence.ContextInputs {
+		switch contextInput.Type() {
+		case iotago.ContextInputCommitment:
+			//nolint:forcetypeassert // we can safely assume that this is a CommitmentInput
+			inputReferences = append(inputReferences, mempool.CommitmentInputStateRefFromInput(
+				contextInput.(*iotago.CommitmentInput),
+			))
+		// These context inputs do not need to be resolved.
+		case iotago.ContextInputBlockIssuanceCredit:
+			continue
+		case iotago.ContextInputReward:
+			continue
+		default:
+			return nil, ierrors.Errorf("unrecognized context input type %d", contextInput.Type())
+		}
 	}
 
 	return inputReferences, nil
@@ -43,21 +65,31 @@ func (v *VM) ValidateSignatures(signedTransaction mempool.SignedTransaction, res
 		return nil, iotago.ErrTxTypeInvalid
 	}
 
+	contextInputs, err := signedStardustTransaction.Transaction.ContextInputs()
+	if err != nil {
+		return nil, ierrors.Wrapf(err, "unable to retrieve context inputs from transaction")
+	}
+
 	utxoInputSet := iotagovm.InputSet{}
 	commitmentInput := (*iotago.Commitment)(nil)
 	bicInputs := make([]*iotago.BlockIssuanceCreditInput, 0)
 	rewardInputs := make([]*iotago.RewardInput, 0)
+
 	for _, resolvedInput := range resolvedInputStates {
-		resolvedInput.Type()
 		switch typedInput := resolvedInput.(type) {
-		case *iotago.Commitment:
-			commitmentInput = typedInput
+		case mempool.CommitmentInputState:
+			commitmentInput = typedInput.Commitment
+		case *utxoledger.Output:
+			utxoInputSet[typedInput.OutputID()] = typedInput.Output()
+		}
+	}
+
+	for _, contextInput := range contextInputs {
+		switch typedInput := contextInput.(type) {
 		case *iotago.BlockIssuanceCreditInput:
 			bicInputs = append(bicInputs, typedInput)
 		case *iotago.RewardInput:
 			rewardInputs = append(rewardInputs, typedInput)
-		case *utxoledger.Output:
-			utxoInputSet[typedInput.OutputID()] = typedInput.Output()
 		}
 	}
 
@@ -186,14 +218,16 @@ func (v *VM) Execute(executionContext context.Context, transaction mempool.Trans
 			return nil, err
 		}
 
-		outputs = append(outputs, utxoledger.CreateOutput(
+		output := utxoledger.CreateOutput(
 			v.ledger.apiProvider,
 			iotago.OutputIDFromTransactionIDAndIndex(transactionID, uint16(index)),
 			iotago.EmptyBlockID,
 			0,
 			output,
 			proof,
-		))
+		)
+
+		outputs = append(outputs, output)
 	}
 
 	return outputs, nil
diff --git a/pkg/protocol/engine/mempool/mempool.go b/pkg/protocol/engine/mempool/mempool.go
index 8c777db8..85bc96f9 100644
--- a/pkg/protocol/engine/mempool/mempool.go
+++ b/pkg/protocol/engine/mempool/mempool.go
@@ -32,3 +32,11 @@ type MemPool[VoteRank spenddag.VoteRankType[VoteRank]] interface {
 	// Reset resets the component to a clean state as if it was created at the last commitment.
 	Reset()
 }
+
+// Denotes the type of state.
+type StateType byte
+
+const (
+	StateTypeUTXOInput StateType = iota
+	StateTypeCommitment
+)
diff --git a/pkg/protocol/engine/mempool/state.go b/pkg/protocol/engine/mempool/state.go
index 13c72348..bfdc6311 100644
--- a/pkg/protocol/engine/mempool/state.go
+++ b/pkg/protocol/engine/mempool/state.go
@@ -1,11 +1,41 @@
 package mempool
 
-import iotago "github.com/iotaledger/iota.go/v4"
+import (
+	"github.com/iotaledger/hive.go/lo"
+	iotago "github.com/iotaledger/iota.go/v4"
+)
 
+// A generic interface over a state (like an output or a commitment).
 type State interface {
+	// The identifier of the state.
 	StateID() StateID
 
-	Type() iotago.StateType
+	// The type of state.
+	Type() StateType
 
+	// Whether the state is read only.
 	IsReadOnly() bool
 }
+
+// A thin wrapper around a resolved commitment.
+type CommitmentInputState struct {
+	Commitment *iotago.Commitment
+}
+
+func (s CommitmentInputState) StateID() StateID {
+	return iotago.IdentifierFromData(lo.PanicOnErr(s.Commitment.MustID().Bytes()))
+}
+
+func (s CommitmentInputState) Type() StateType {
+	return StateTypeCommitment
+}
+
+func (s CommitmentInputState) IsReadOnly() bool {
+	return true
+}
+
+func CommitmentInputStateFromCommitment(commitment *iotago.Commitment) CommitmentInputState {
+	return CommitmentInputState{
+		Commitment: commitment,
+	}
+}
diff --git a/pkg/protocol/engine/mempool/state_reference.go b/pkg/protocol/engine/mempool/state_reference.go
index 8cba0f96..fb1cb3b2 100644
--- a/pkg/protocol/engine/mempool/state_reference.go
+++ b/pkg/protocol/engine/mempool/state_reference.go
@@ -1,10 +1,53 @@
 package mempool
 
-import iotago "github.com/iotaledger/iota.go/v4"
+import (
+	"github.com/iotaledger/hive.go/lo"
+	iotago "github.com/iotaledger/iota.go/v4"
+)
 
+// A reference to a state (like an output or a commitment).
 type StateReference interface {
+	// The identifier of the state to which it resolves.
 	ReferencedStateID() iotago.Identifier
 
-	// Type returns the type of Input.
-	Type() iotago.StateType
+	// The type of state.
+	Type() StateType
+}
+
+// A thin wrapper around a UTXO input.
+type UTXOInputStateRef struct {
+	Input *iotago.UTXOInput
+}
+
+func (r UTXOInputStateRef) ReferencedStateID() iotago.Identifier {
+	return iotago.IdentifierFromData(lo.PanicOnErr(r.Input.OutputID().Bytes()))
+}
+
+func (r UTXOInputStateRef) Type() StateType {
+	return StateTypeUTXOInput
+}
+
+func UTXOInputStateRefFromInput(input *iotago.UTXOInput) UTXOInputStateRef {
+	return UTXOInputStateRef{
+		Input: input,
+	}
+}
+
+// A thin wrapper around a Commitment input.
+type CommitmentInputStateRef struct {
+	Input *iotago.CommitmentInput
+}
+
+func (r CommitmentInputStateRef) ReferencedStateID() iotago.Identifier {
+	return iotago.IdentifierFromData(lo.PanicOnErr(r.Input.CommitmentID.Bytes()))
+}
+
+func (r CommitmentInputStateRef) Type() StateType {
+	return StateTypeCommitment
+}
+
+func CommitmentInputStateRefFromInput(input *iotago.CommitmentInput) CommitmentInputStateRef {
+	return CommitmentInputStateRef{
+		Input: input,
+	}
 }
diff --git a/pkg/protocol/engine/utxoledger/output.go b/pkg/protocol/engine/utxoledger/output.go
index 9e2b0263..1a4c3209 100644
--- a/pkg/protocol/engine/utxoledger/output.go
+++ b/pkg/protocol/engine/utxoledger/output.go
@@ -9,6 +9,7 @@ import (
 	"github.com/iotaledger/hive.go/lo"
 	"github.com/iotaledger/hive.go/serializer/v2"
 	"github.com/iotaledger/hive.go/serializer/v2/stream"
+	"github.com/iotaledger/iota-core/pkg/protocol/engine/mempool"
 	iotago "github.com/iotaledger/iota.go/v4"
 )
 
@@ -47,8 +48,8 @@ func (o *Output) StateID() iotago.Identifier {
 	return iotago.IdentifierFromData(lo.PanicOnErr(o.outputID.Bytes()))
 }
 
-func (o *Output) Type() iotago.StateType {
-	return iotago.InputUTXO
+func (o *Output) Type() mempool.StateType {
+	return mempool.StateTypeUTXOInput
 }
 
 func (o *Output) IsReadOnly() bool {
diff --git a/tools/gendoc/go.mod b/tools/gendoc/go.mod
index a824a146..9ee6e4ff 100644
--- a/tools/gendoc/go.mod
+++ b/tools/gendoc/go.mod
@@ -5,13 +5,13 @@ go 1.21
 replace github.com/iotaledger/iota-core => ../../
 
 require (
-	github.com/iotaledger/hive.go/app v0.0.0-20231214121634-8b23c68d408d
+	github.com/iotaledger/hive.go/app v0.0.0-20231219105941-542b1b724494
 	github.com/iotaledger/hive.go/apputils v0.0.0-20230829152614-7afc7a4d89b3
 	github.com/iotaledger/iota-core v0.0.0-00010101000000-000000000000
 )
 
 require (
-	filippo.io/edwards25519 v1.0.0 // indirect
+	filippo.io/edwards25519 v1.1.0 // indirect
 	github.com/benbjohnson/clock v1.3.5 // indirect
 	github.com/beorn7/perks v1.0.1 // indirect
 	github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect
@@ -24,7 +24,7 @@ require (
 	github.com/dustin/go-humanize v1.0.1 // indirect
 	github.com/eclipse/paho.mqtt.golang v1.4.3 // indirect
 	github.com/elastic/gosigar v0.14.2 // indirect
-	github.com/ethereum/go-ethereum v1.13.5 // indirect
+	github.com/ethereum/go-ethereum v1.13.6 // indirect
 	github.com/fatih/structs v1.1.0 // indirect
 	github.com/fbiville/markdown-table-formatter v0.3.0 // indirect
 	github.com/felixge/fgprof v0.9.3 // indirect
@@ -57,21 +57,21 @@ require (
 	github.com/iancoleman/orderedmap v0.3.0 // indirect
 	github.com/iotaledger/grocksdb v1.7.5-0.20230220105546-5162e18885c7 // indirect
 	github.com/iotaledger/hive.go/ads v0.0.0-20231214025533-67add6c5091b // indirect
-	github.com/iotaledger/hive.go/constraints v0.0.0-20231214121634-8b23c68d408d // indirect
-	github.com/iotaledger/hive.go/core v1.0.0-rc.3.0.20231214121634-8b23c68d408d // indirect
-	github.com/iotaledger/hive.go/crypto v0.0.0-20231214121634-8b23c68d408d // indirect
-	github.com/iotaledger/hive.go/ds v0.0.0-20231214121634-8b23c68d408d // indirect
-	github.com/iotaledger/hive.go/ierrors v0.0.0-20231214121634-8b23c68d408d // indirect
+	github.com/iotaledger/hive.go/constraints v0.0.0-20231219105941-542b1b724494 // indirect
+	github.com/iotaledger/hive.go/core v1.0.0-rc.3.0.20231219095137-dd4674b3226e // indirect
+	github.com/iotaledger/hive.go/crypto v0.0.0-20231219105941-542b1b724494 // indirect
+	github.com/iotaledger/hive.go/ds v0.0.0-20231219105941-542b1b724494 // indirect
+	github.com/iotaledger/hive.go/ierrors v0.0.0-20231219105941-542b1b724494 // indirect
 	github.com/iotaledger/hive.go/kvstore v0.0.0-20231214025533-67add6c5091b // indirect
-	github.com/iotaledger/hive.go/lo v0.0.0-20231214121634-8b23c68d408d // indirect
-	github.com/iotaledger/hive.go/log v0.0.0-20231214121634-8b23c68d408d // indirect
-	github.com/iotaledger/hive.go/runtime v0.0.0-20231214121634-8b23c68d408d // indirect
-	github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20231214121634-8b23c68d408d // indirect
-	github.com/iotaledger/hive.go/stringify v0.0.0-20231214121634-8b23c68d408d // indirect
-	github.com/iotaledger/inx-app v1.0.0-rc.3.0.20231214122225-f510ea9b00b5 // indirect
-	github.com/iotaledger/inx/go v1.0.0-rc.2.0.20231206124145-f773dfe3927e // indirect
+	github.com/iotaledger/hive.go/lo v0.0.0-20231219105941-542b1b724494 // indirect
+	github.com/iotaledger/hive.go/log v0.0.0-20231219105941-542b1b724494 // indirect
+	github.com/iotaledger/hive.go/runtime v0.0.0-20231219105941-542b1b724494 // indirect
+	github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20231219095137-dd4674b3226e // indirect
+	github.com/iotaledger/hive.go/stringify v0.0.0-20231219105941-542b1b724494 // indirect
+	github.com/iotaledger/inx-app v1.0.0-rc.3.0.20231219130724-cb37c927be6d // indirect
+	github.com/iotaledger/inx/go v1.0.0-rc.2.0.20231219130433-ad0971fe6306 // indirect
 	github.com/iotaledger/iota-crypto-demo v0.0.0-20231208171603-786bb32fdb00 // indirect
-	github.com/iotaledger/iota.go/v4 v4.0.0-20231211160706-492c65d5e3f5 // indirect
+	github.com/iotaledger/iota.go/v4 v4.0.0-20231219130133-667f32aa821d // indirect
 	github.com/ipfs/boxo v0.13.1 // indirect
 	github.com/ipfs/go-cid v0.4.1 // indirect
 	github.com/ipfs/go-datastore v0.6.0 // indirect
@@ -163,19 +163,19 @@ require (
 	go.uber.org/mock v0.3.0 // indirect
 	go.uber.org/multierr v1.11.0 // indirect
 	go.uber.org/zap v1.26.0 // indirect
-	golang.org/x/crypto v0.16.0 // indirect
-	golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect
+	golang.org/x/crypto v0.17.0 // indirect
+	golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa // indirect
 	golang.org/x/image v0.13.0 // indirect
-	golang.org/x/mod v0.13.0 // indirect
+	golang.org/x/mod v0.14.0 // indirect
 	golang.org/x/net v0.19.0 // indirect
 	golang.org/x/sync v0.5.0 // indirect
 	golang.org/x/sys v0.15.0 // indirect
 	golang.org/x/text v0.14.0 // indirect
 	golang.org/x/time v0.5.0 // indirect
-	golang.org/x/tools v0.14.0 // indirect
+	golang.org/x/tools v0.15.0 // indirect
 	gonum.org/v1/gonum v0.14.0 // indirect
-	google.golang.org/genproto/googleapis/rpc v0.0.0-20231127180814-3a041ad873d4 // indirect
-	google.golang.org/grpc v1.59.0 // indirect
+	google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0 // indirect
+	google.golang.org/grpc v1.60.1 // indirect
 	google.golang.org/protobuf v1.31.0 // indirect
 	gopkg.in/yaml.v2 v2.4.0 // indirect
 	lukechampine.com/blake3 v1.2.1 // indirect
diff --git a/tools/gendoc/go.sum b/tools/gendoc/go.sum
index 53d6ff3a..db5a7e10 100644
--- a/tools/gendoc/go.sum
+++ b/tools/gendoc/go.sum
@@ -6,8 +6,8 @@ dmitri.shuralyov.com/app/changes v0.0.0-20180602232624-0a106ad413e3/go.mod h1:Yl
 dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0/go.mod h1:JLBrvjyP0v+ecvNYvCpyZgu5/xkfAUhi6wJj28eUfSU=
 dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412/go.mod h1:a1inKt/atXimZ4Mv927x+r7UpyzRUf4emIoiiSC2TN4=
 dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c/go.mod h1:0PRwlb0D6DFvNNtx+9ybjezNCa8XF0xaYcETyp6rHWU=
-filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek=
-filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns=
+filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
+filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
 git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
 github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
@@ -96,8 +96,8 @@ github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.m
 github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
 github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
 github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/ethereum/go-ethereum v1.13.5 h1:U6TCRciCqZRe4FPXmy1sMGxTfuk8P7u2UoinF3VbaFk=
-github.com/ethereum/go-ethereum v1.13.5/go.mod h1:yMTu38GSuyxaYzQMViqNmQ1s3cE84abZexQmTgenWk0=
+github.com/ethereum/go-ethereum v1.13.6 h1:TMlJ4t3TLVcnAMo2S8q+WocDLB6z496cYtkRyJJNNKQ=
+github.com/ethereum/go-ethereum v1.13.6/go.mod h1:kcRZmuzRn1lVejiFNTz4l4W7imnpq1bDAnuKS/RyhbQ=
 github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
 github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
 github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo=
@@ -199,6 +199,8 @@ github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO
 github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8=
 github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU=
 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
+github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
 github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8=
 github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo=
 github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
@@ -279,40 +281,40 @@ github.com/iotaledger/grocksdb v1.7.5-0.20230220105546-5162e18885c7 h1:dTrD7X2PT
 github.com/iotaledger/grocksdb v1.7.5-0.20230220105546-5162e18885c7/go.mod h1:ZRdPu684P0fQ1z8sXz4dj9H5LWHhz4a9oCtvjunkSrw=
 github.com/iotaledger/hive.go/ads v0.0.0-20231214025533-67add6c5091b h1:sG5H0JmbjXPQ45eHTB27fQHViSu5sDRdSDQT54whalQ=
 github.com/iotaledger/hive.go/ads v0.0.0-20231214025533-67add6c5091b/go.mod h1:XH4lnT4RPCTVt4b4DNL4FMoi20Ip3f4eFBkIx8WimXg=
-github.com/iotaledger/hive.go/app v0.0.0-20231214121634-8b23c68d408d h1:zNxzb+qLM7J4O/4/OSa2z5saWC2gTL8IoozpcleM1Ds=
-github.com/iotaledger/hive.go/app v0.0.0-20231214121634-8b23c68d408d/go.mod h1:sQ+iVwZB/j8OxM1c81dsIcdzuFQMsXvrFK8dCfpQLCE=
+github.com/iotaledger/hive.go/app v0.0.0-20231219105941-542b1b724494 h1:rO840L4zY8u6KaaDfj90gxfhgp1KxuSYeVd4yzTtTOQ=
+github.com/iotaledger/hive.go/app v0.0.0-20231219105941-542b1b724494/go.mod h1:sQ+iVwZB/j8OxM1c81dsIcdzuFQMsXvrFK8dCfpQLCE=
 github.com/iotaledger/hive.go/apputils v0.0.0-20230829152614-7afc7a4d89b3 h1:4aVJTc0KS77uEw0Tny4r0n1ORwcbAQDECaCclgf/6lE=
 github.com/iotaledger/hive.go/apputils v0.0.0-20230829152614-7afc7a4d89b3/go.mod h1:TZeAqieDu+xDOZp2e9+S+8pZp1PrfgcwLUnxmd8IgLU=
-github.com/iotaledger/hive.go/constraints v0.0.0-20231214121634-8b23c68d408d h1:zRaPXIjAFO3pHftl9jgYN6Uy249haf2HqswTktfWS1Q=
-github.com/iotaledger/hive.go/constraints v0.0.0-20231214121634-8b23c68d408d/go.mod h1:dOBOM2s4se3HcWefPe8sQLUalGXJ8yVXw58oK8jke3s=
-github.com/iotaledger/hive.go/core v1.0.0-rc.3.0.20231214121634-8b23c68d408d h1:3i3bxbdqH8t4kFYo5pFfQnBTMsEPU6hnNNfSMyzSXq8=
-github.com/iotaledger/hive.go/core v1.0.0-rc.3.0.20231214121634-8b23c68d408d/go.mod h1:f+10zIZdQcEXGx9An2Y8YGfKwtdL3i0VlY9Ct+KbZEw=
-github.com/iotaledger/hive.go/crypto v0.0.0-20231214121634-8b23c68d408d h1:FXo3qvJeO0jEmCn7cPfiO4MAGkDGqzw8E8E1nWWCl8A=
-github.com/iotaledger/hive.go/crypto v0.0.0-20231214121634-8b23c68d408d/go.mod h1:YUdghEQkJkAO5GxEvpcKpSWtV5PxAIuW4hXIszROA2E=
-github.com/iotaledger/hive.go/ds v0.0.0-20231214121634-8b23c68d408d h1:/rmBzhxamjARxLNjcGPujS/3vI7hEC4sL6OJ00W0UlE=
-github.com/iotaledger/hive.go/ds v0.0.0-20231214121634-8b23c68d408d/go.mod h1:lDpFB4hkoUke5YxJ8ssmNNuY/qaxWaTQtVu/9y9BhKI=
-github.com/iotaledger/hive.go/ierrors v0.0.0-20231214121634-8b23c68d408d h1:PaA8E4u6FyjYC1iYrzIAXMBgCzl7CXNciAwm1Vy4/Hc=
-github.com/iotaledger/hive.go/ierrors v0.0.0-20231214121634-8b23c68d408d/go.mod h1:HcE8B5lP96enc/OALTb2/rIIi+yOLouRoHOKRclKmC8=
+github.com/iotaledger/hive.go/constraints v0.0.0-20231219105941-542b1b724494 h1:gt3LT6/ObMoS6X5KVugIwUTCSTWg7kyL2rAqmFdsIfM=
+github.com/iotaledger/hive.go/constraints v0.0.0-20231219105941-542b1b724494/go.mod h1:dOBOM2s4se3HcWefPe8sQLUalGXJ8yVXw58oK8jke3s=
+github.com/iotaledger/hive.go/core v1.0.0-rc.3.0.20231219095137-dd4674b3226e h1:GQkpZq4zo24jzCUpE6N9ixB5/NxE6XjeQCdRktkRfOw=
+github.com/iotaledger/hive.go/core v1.0.0-rc.3.0.20231219095137-dd4674b3226e/go.mod h1:f+10zIZdQcEXGx9An2Y8YGfKwtdL3i0VlY9Ct+KbZEw=
+github.com/iotaledger/hive.go/crypto v0.0.0-20231219105941-542b1b724494 h1:lsMO3ojhiSGb7jPUsrNPR/xtk2yL4tA2YHa3d4wZJ+I=
+github.com/iotaledger/hive.go/crypto v0.0.0-20231219105941-542b1b724494/go.mod h1:YUdghEQkJkAO5GxEvpcKpSWtV5PxAIuW4hXIszROA2E=
+github.com/iotaledger/hive.go/ds v0.0.0-20231219105941-542b1b724494 h1:3BnnbvvX6lrOp5fWpD3iXuk+s3nNXTTYPiadXYw+3fQ=
+github.com/iotaledger/hive.go/ds v0.0.0-20231219105941-542b1b724494/go.mod h1:lDpFB4hkoUke5YxJ8ssmNNuY/qaxWaTQtVu/9y9BhKI=
+github.com/iotaledger/hive.go/ierrors v0.0.0-20231219105941-542b1b724494 h1:LzsiaAUkXrlcyGPq+qsBdhbMMIZkM16hJoQgqkBr2r4=
+github.com/iotaledger/hive.go/ierrors v0.0.0-20231219105941-542b1b724494/go.mod h1:HcE8B5lP96enc/OALTb2/rIIi+yOLouRoHOKRclKmC8=
 github.com/iotaledger/hive.go/kvstore v0.0.0-20231214025533-67add6c5091b h1:tpZm/5y+zdOCkdTm4pcEC2cjd943EFKi+BSgNLBIA7A=
 github.com/iotaledger/hive.go/kvstore v0.0.0-20231214025533-67add6c5091b/go.mod h1:UjkGs5jxiEwIFyzX4wfNk01dHuqDtTOtbzsSqoJR9Pw=
-github.com/iotaledger/hive.go/lo v0.0.0-20231214121634-8b23c68d408d h1:4ElSjmSo4n6DZKtnD57CrK6oZl4uf9DSFTADIZjhtbU=
-github.com/iotaledger/hive.go/lo v0.0.0-20231214121634-8b23c68d408d/go.mod h1:kJ3T3R4oteGiO4KVlsHYoGWjl0StK2svlzqLjDPh7EQ=
-github.com/iotaledger/hive.go/log v0.0.0-20231214121634-8b23c68d408d h1:CZa2fR0/N65GiRQ7SCWSu9ljiCL8KpoOq0zyJ2uwlR0=
-github.com/iotaledger/hive.go/log v0.0.0-20231214121634-8b23c68d408d/go.mod h1:JQ7L06XNadFPtxCTKWOtzTtWQEgDHIt5NXAnQoPdu30=
-github.com/iotaledger/hive.go/runtime v0.0.0-20231214121634-8b23c68d408d h1:tq7SBxBAU2Hpyj76EaeZTk1Zkb0huW5+FlNI80MZhN8=
-github.com/iotaledger/hive.go/runtime v0.0.0-20231214121634-8b23c68d408d/go.mod h1:kpzzMz84eIcjRPjJiDv04HBp+vGjW7udXyQ2t/ixjNM=
-github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20231214121634-8b23c68d408d h1:NYOEB9jAl5XZ3+nZ1YAlicOw9Ox+Ikyb48KQc2D2pTY=
-github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20231214121634-8b23c68d408d/go.mod h1:2Gl3qEk1CV9uFPF79JM0Fn4Da39P6SZO+uIF4YMy2kk=
-github.com/iotaledger/hive.go/stringify v0.0.0-20231214121634-8b23c68d408d h1:p/9JAK3ngwESuy4TKs7Sio49z/begA38cwvpaxl4BMs=
-github.com/iotaledger/hive.go/stringify v0.0.0-20231214121634-8b23c68d408d/go.mod h1:FTo/UWzNYgnQ082GI9QVM9HFDERqf9rw9RivNpqrnTs=
-github.com/iotaledger/inx-app v1.0.0-rc.3.0.20231214122225-f510ea9b00b5 h1:AkSPs+Q32E+qO5dM8hkKbxXYtS1Bhu/1Cr9dpODyYw4=
-github.com/iotaledger/inx-app v1.0.0-rc.3.0.20231214122225-f510ea9b00b5/go.mod h1:sDallmfuE1wS4PNYA4LVFftkeUescTFvoBuuvd9KRyo=
-github.com/iotaledger/inx/go v1.0.0-rc.2.0.20231206124145-f773dfe3927e h1:jbtiUlmTpTdGiRBW1pniPSqRcDMJaIW8fGS+uORryas=
-github.com/iotaledger/inx/go v1.0.0-rc.2.0.20231206124145-f773dfe3927e/go.mod h1:zEb9onVHnDUStl5SsFBj7H0HBKfIN0c/pUND8Llfqp8=
+github.com/iotaledger/hive.go/lo v0.0.0-20231219105941-542b1b724494 h1:WzcyMcTExU4Xe4MGSu3WLjc1WVswUMmDiBY6m2Q+i3c=
+github.com/iotaledger/hive.go/lo v0.0.0-20231219105941-542b1b724494/go.mod h1:kJ3T3R4oteGiO4KVlsHYoGWjl0StK2svlzqLjDPh7EQ=
+github.com/iotaledger/hive.go/log v0.0.0-20231219105941-542b1b724494 h1:Is4KDfQ9qt8Ilq6RW1vOpbDTeGMHMPiSsyyBGkg7Ot4=
+github.com/iotaledger/hive.go/log v0.0.0-20231219105941-542b1b724494/go.mod h1:JQ7L06XNadFPtxCTKWOtzTtWQEgDHIt5NXAnQoPdu30=
+github.com/iotaledger/hive.go/runtime v0.0.0-20231219105941-542b1b724494 h1:f8Cp1XnbIcqWyyABd2nq4kkciui+CKaGSIJXLQSXi5s=
+github.com/iotaledger/hive.go/runtime v0.0.0-20231219105941-542b1b724494/go.mod h1:kpzzMz84eIcjRPjJiDv04HBp+vGjW7udXyQ2t/ixjNM=
+github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20231219095137-dd4674b3226e h1:FOz9/O6yuNYFICP33gjHJ+0SBdzIm1oWfFhaEEiOq8Q=
+github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20231219095137-dd4674b3226e/go.mod h1:2Gl3qEk1CV9uFPF79JM0Fn4Da39P6SZO+uIF4YMy2kk=
+github.com/iotaledger/hive.go/stringify v0.0.0-20231219105941-542b1b724494 h1:aa2z4tUca8aZNd2MLcLmGS19sP6BAAO9ULSOYJTFcxo=
+github.com/iotaledger/hive.go/stringify v0.0.0-20231219105941-542b1b724494/go.mod h1:FTo/UWzNYgnQ082GI9QVM9HFDERqf9rw9RivNpqrnTs=
+github.com/iotaledger/inx-app v1.0.0-rc.3.0.20231219130724-cb37c927be6d h1:R7cleqpThJm2N/nYlXiMs2n0fdhMoto0DDR+oPMmPRY=
+github.com/iotaledger/inx-app v1.0.0-rc.3.0.20231219130724-cb37c927be6d/go.mod h1:oSGCn7uIoz2nULqgbji3EJkMO26FzpOmCu5t2hbvjME=
+github.com/iotaledger/inx/go v1.0.0-rc.2.0.20231219130433-ad0971fe6306 h1:8JAa8DrYuKMNAqPkunib1HAvfNoK4X/xO02hqhwyYzI=
+github.com/iotaledger/inx/go v1.0.0-rc.2.0.20231219130433-ad0971fe6306/go.mod h1:KcwBYlfpd7w1SmAY75GBO5Ce7k/RyeCXA4TRQcOwTdQ=
 github.com/iotaledger/iota-crypto-demo v0.0.0-20231208171603-786bb32fdb00 h1:j5udgLtSN6wQgFI9vnhkdJsqsVdJmwtoc0yOmT/Ila4=
 github.com/iotaledger/iota-crypto-demo v0.0.0-20231208171603-786bb32fdb00/go.mod h1:gt+URx7DZu414nZME7jtGgxR4DVTSnNa1jF2trTUTZ0=
-github.com/iotaledger/iota.go/v4 v4.0.0-20231211160706-492c65d5e3f5 h1:2iQUEuYvuyeYtZBr6bRoM4xFLxRiQ66aBPgKuJTirh0=
-github.com/iotaledger/iota.go/v4 v4.0.0-20231211160706-492c65d5e3f5/go.mod h1:jU3Jlnhwv4KWlpft84lu9/M0QkCykESl29bL4oCenKs=
+github.com/iotaledger/iota.go/v4 v4.0.0-20231219130133-667f32aa821d h1:47rt2taNoMPgMF0BixlEd5q9RHEtvsGtIIuOkKsa2k4=
+github.com/iotaledger/iota.go/v4 v4.0.0-20231219130133-667f32aa821d/go.mod h1:66w9NjF5IDk4amUu+i54yPfSi3hLqpAOefotC0kZahs=
 github.com/ipfs/boxo v0.13.1 h1:nQ5oQzcMZR3oL41REJDcTbrvDvuZh3J9ckc9+ILeRQI=
 github.com/ipfs/boxo v0.13.1/go.mod h1:btrtHy0lmO1ODMECbbEY1pxNtrLilvKSYLoGQt1yYCk=
 github.com/ipfs/go-cid v0.4.1 h1:A/T3qGvxi4kpKWWcPC/PgbvDA2bjVLO7n4UeVwnbs/s=
@@ -714,11 +716,11 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U
 golang.org/x/crypto v0.0.0-20200602180216-279210d13fed/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
-golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY=
-golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
+golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k=
+golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
 golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI=
-golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo=
+golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ=
+golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE=
 golang.org/x/image v0.13.0 h1:3cge/F/QTkNLauhf2QoE9zp+7sr+ZcL4HnoZmdwg9sg=
 golang.org/x/image v0.13.0/go.mod h1:6mmbMOeV28HuMTgA6OSRkdXKYw/t5W9Uwn2Yv1r3Yxk=
 golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
@@ -733,8 +735,8 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB
 golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.13.0 h1:I/DsJXRlw/8l/0c24sM9yb0T4z9liZTduXvdAWYiysY=
-golang.org/x/mod v0.13.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
+golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0=
+golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
 golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 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=
@@ -853,8 +855,8 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY
 golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
 golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
 golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
-golang.org/x/tools v0.14.0 h1:jvNa2pY0M4r62jkRQ6RwEZZyPcymeL9XZMLBbV7U2nc=
-golang.org/x/tools v0.14.0/go.mod h1:uYBEerGOWcJyEORxN+Ek8+TT266gXkNlHdJBwexUsBg=
+golang.org/x/tools v0.15.0 h1:zdAyfUGbYmuVokhzVmghFl2ZJh5QhcfebBgmVPFYA+8=
+golang.org/x/tools v0.15.0/go.mod h1:hpksKq4dtpQWS1uQ61JkdqWM3LscIS6Slf+VVkm+wQk=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -878,8 +880,8 @@ google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98
 google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
 google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
 google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231127180814-3a041ad873d4 h1:DC7wcm+i+P1rN3Ff07vL+OndGg5OhNddHyTA+ocPqYE=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231127180814-3a041ad873d4/go.mod h1:eJVxU6o+4G1PSczBr85xmyvSNYAKvAYgkub40YGomFM=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0 h1:/jFB8jK5R3Sq3i/lmeZO0cATSzFfZaJq1J2Euan3XKU=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0/go.mod h1:FUoWkonphQm3RhTS+kOEhF8h0iDpm4tdXolVCeZ9KKA=
 google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
 google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio=
 google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
@@ -891,8 +893,8 @@ google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8
 google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0=
 google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
 google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
+google.golang.org/grpc v1.60.1 h1:26+wFr+cNqSGFcOXcabYC0lUVJVRa2Sb2ortSK7VrEU=
+google.golang.org/grpc v1.60.1/go.mod h1:OlCHIeLYqSSsLi6i49B5QGdzaMZK9+M7LXN2FKz4eGM=
 google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
 google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
 google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
diff --git a/tools/genesis-snapshot/go.mod b/tools/genesis-snapshot/go.mod
index 7d5afccf..bdffced8 100644
--- a/tools/genesis-snapshot/go.mod
+++ b/tools/genesis-snapshot/go.mod
@@ -5,35 +5,35 @@ go 1.21
 replace github.com/iotaledger/iota-core => ../../
 
 require (
-	github.com/iotaledger/hive.go/crypto v0.0.0-20231214121634-8b23c68d408d
-	github.com/iotaledger/hive.go/ierrors v0.0.0-20231214121634-8b23c68d408d
-	github.com/iotaledger/hive.go/lo v0.0.0-20231214121634-8b23c68d408d
-	github.com/iotaledger/hive.go/runtime v0.0.0-20231214121634-8b23c68d408d
+	github.com/iotaledger/hive.go/crypto v0.0.0-20231219105941-542b1b724494
+	github.com/iotaledger/hive.go/ierrors v0.0.0-20231219105941-542b1b724494
+	github.com/iotaledger/hive.go/lo v0.0.0-20231219105941-542b1b724494
+	github.com/iotaledger/hive.go/runtime v0.0.0-20231219105941-542b1b724494
 	github.com/iotaledger/iota-core v0.0.0-00010101000000-000000000000
-	github.com/iotaledger/iota.go/v4 v4.0.0-20231211160706-492c65d5e3f5
+	github.com/iotaledger/iota.go/v4 v4.0.0-20231219130133-667f32aa821d
 	github.com/mr-tron/base58 v1.2.0
 	github.com/spf13/pflag v1.0.5
-	golang.org/x/crypto v0.16.0
+	golang.org/x/crypto v0.17.0
 )
 
 require (
-	filippo.io/edwards25519 v1.0.0 // indirect
+	filippo.io/edwards25519 v1.1.0 // indirect
 	github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect
 	github.com/davecgh/go-spew v1.1.1 // indirect
 	github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect
-	github.com/ethereum/go-ethereum v1.13.5 // indirect
+	github.com/ethereum/go-ethereum v1.13.6 // indirect
 	github.com/google/uuid v1.4.0 // indirect
 	github.com/holiman/uint256 v1.2.4 // indirect
 	github.com/iancoleman/orderedmap v0.3.0 // indirect
 	github.com/iotaledger/grocksdb v1.7.5-0.20230220105546-5162e18885c7 // indirect
 	github.com/iotaledger/hive.go/ads v0.0.0-20231214025533-67add6c5091b // indirect
-	github.com/iotaledger/hive.go/constraints v0.0.0-20231214121634-8b23c68d408d // indirect
-	github.com/iotaledger/hive.go/core v1.0.0-rc.3.0.20231214121634-8b23c68d408d // indirect
-	github.com/iotaledger/hive.go/ds v0.0.0-20231214121634-8b23c68d408d // indirect
+	github.com/iotaledger/hive.go/constraints v0.0.0-20231219105941-542b1b724494 // indirect
+	github.com/iotaledger/hive.go/core v1.0.0-rc.3.0.20231219095137-dd4674b3226e // indirect
+	github.com/iotaledger/hive.go/ds v0.0.0-20231219105941-542b1b724494 // indirect
 	github.com/iotaledger/hive.go/kvstore v0.0.0-20231214025533-67add6c5091b // indirect
-	github.com/iotaledger/hive.go/log v0.0.0-20231214121634-8b23c68d408d // indirect
-	github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20231214121634-8b23c68d408d // indirect
-	github.com/iotaledger/hive.go/stringify v0.0.0-20231214121634-8b23c68d408d // indirect
+	github.com/iotaledger/hive.go/log v0.0.0-20231219105941-542b1b724494 // indirect
+	github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20231219095137-dd4674b3226e // indirect
+	github.com/iotaledger/hive.go/stringify v0.0.0-20231219105941-542b1b724494 // indirect
 	github.com/iotaledger/iota-crypto-demo v0.0.0-20231208171603-786bb32fdb00 // indirect
 	github.com/ipfs/go-cid v0.4.1 // indirect
 	github.com/klauspost/cpuid/v2 v2.2.5 // indirect
@@ -59,7 +59,7 @@ require (
 	github.com/stretchr/testify v1.8.4 // indirect
 	github.com/zyedidia/generic v1.2.1 // indirect
 	go.uber.org/atomic v1.11.0 // indirect
-	golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect
+	golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa // indirect
 	golang.org/x/sync v0.5.0 // indirect
 	golang.org/x/sys v0.15.0 // indirect
 	golang.org/x/text v0.14.0 // indirect
diff --git a/tools/genesis-snapshot/go.sum b/tools/genesis-snapshot/go.sum
index dee249ee..f8dbb43e 100644
--- a/tools/genesis-snapshot/go.sum
+++ b/tools/genesis-snapshot/go.sum
@@ -1,5 +1,5 @@
-filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek=
-filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns=
+filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
+filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
 github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U=
 github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04=
 github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U=
@@ -12,14 +12,16 @@ github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5il
 github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo=
 github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs=
 github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0=
-github.com/ethereum/go-ethereum v1.13.5 h1:U6TCRciCqZRe4FPXmy1sMGxTfuk8P7u2UoinF3VbaFk=
-github.com/ethereum/go-ethereum v1.13.5/go.mod h1:yMTu38GSuyxaYzQMViqNmQ1s3cE84abZexQmTgenWk0=
+github.com/ethereum/go-ethereum v1.13.6 h1:TMlJ4t3TLVcnAMo2S8q+WocDLB6z496cYtkRyJJNNKQ=
+github.com/ethereum/go-ethereum v1.13.6/go.mod h1:kcRZmuzRn1lVejiFNTz4l4W7imnpq1bDAnuKS/RyhbQ=
 github.com/fjl/memsize v0.0.2 h1:27txuSD9or+NZlnOWdKUxeBzTAUkWCVh+4Gf2dWFOzA=
 github.com/fjl/memsize v0.0.2/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0=
 github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
 github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
 github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
+github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
+github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
 github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4=
 github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/holiman/uint256 v1.2.4 h1:jUc4Nk8fm9jZabQuqr2JzednajVmBpC+oiTiXZJEApU=
@@ -30,32 +32,32 @@ github.com/iotaledger/grocksdb v1.7.5-0.20230220105546-5162e18885c7 h1:dTrD7X2PT
 github.com/iotaledger/grocksdb v1.7.5-0.20230220105546-5162e18885c7/go.mod h1:ZRdPu684P0fQ1z8sXz4dj9H5LWHhz4a9oCtvjunkSrw=
 github.com/iotaledger/hive.go/ads v0.0.0-20231214025533-67add6c5091b h1:sG5H0JmbjXPQ45eHTB27fQHViSu5sDRdSDQT54whalQ=
 github.com/iotaledger/hive.go/ads v0.0.0-20231214025533-67add6c5091b/go.mod h1:XH4lnT4RPCTVt4b4DNL4FMoi20Ip3f4eFBkIx8WimXg=
-github.com/iotaledger/hive.go/constraints v0.0.0-20231214121634-8b23c68d408d h1:zRaPXIjAFO3pHftl9jgYN6Uy249haf2HqswTktfWS1Q=
-github.com/iotaledger/hive.go/constraints v0.0.0-20231214121634-8b23c68d408d/go.mod h1:dOBOM2s4se3HcWefPe8sQLUalGXJ8yVXw58oK8jke3s=
-github.com/iotaledger/hive.go/core v1.0.0-rc.3.0.20231214121634-8b23c68d408d h1:3i3bxbdqH8t4kFYo5pFfQnBTMsEPU6hnNNfSMyzSXq8=
-github.com/iotaledger/hive.go/core v1.0.0-rc.3.0.20231214121634-8b23c68d408d/go.mod h1:f+10zIZdQcEXGx9An2Y8YGfKwtdL3i0VlY9Ct+KbZEw=
-github.com/iotaledger/hive.go/crypto v0.0.0-20231214121634-8b23c68d408d h1:FXo3qvJeO0jEmCn7cPfiO4MAGkDGqzw8E8E1nWWCl8A=
-github.com/iotaledger/hive.go/crypto v0.0.0-20231214121634-8b23c68d408d/go.mod h1:YUdghEQkJkAO5GxEvpcKpSWtV5PxAIuW4hXIszROA2E=
-github.com/iotaledger/hive.go/ds v0.0.0-20231214121634-8b23c68d408d h1:/rmBzhxamjARxLNjcGPujS/3vI7hEC4sL6OJ00W0UlE=
-github.com/iotaledger/hive.go/ds v0.0.0-20231214121634-8b23c68d408d/go.mod h1:lDpFB4hkoUke5YxJ8ssmNNuY/qaxWaTQtVu/9y9BhKI=
-github.com/iotaledger/hive.go/ierrors v0.0.0-20231214121634-8b23c68d408d h1:PaA8E4u6FyjYC1iYrzIAXMBgCzl7CXNciAwm1Vy4/Hc=
-github.com/iotaledger/hive.go/ierrors v0.0.0-20231214121634-8b23c68d408d/go.mod h1:HcE8B5lP96enc/OALTb2/rIIi+yOLouRoHOKRclKmC8=
+github.com/iotaledger/hive.go/constraints v0.0.0-20231219105941-542b1b724494 h1:gt3LT6/ObMoS6X5KVugIwUTCSTWg7kyL2rAqmFdsIfM=
+github.com/iotaledger/hive.go/constraints v0.0.0-20231219105941-542b1b724494/go.mod h1:dOBOM2s4se3HcWefPe8sQLUalGXJ8yVXw58oK8jke3s=
+github.com/iotaledger/hive.go/core v1.0.0-rc.3.0.20231219095137-dd4674b3226e h1:GQkpZq4zo24jzCUpE6N9ixB5/NxE6XjeQCdRktkRfOw=
+github.com/iotaledger/hive.go/core v1.0.0-rc.3.0.20231219095137-dd4674b3226e/go.mod h1:f+10zIZdQcEXGx9An2Y8YGfKwtdL3i0VlY9Ct+KbZEw=
+github.com/iotaledger/hive.go/crypto v0.0.0-20231219105941-542b1b724494 h1:lsMO3ojhiSGb7jPUsrNPR/xtk2yL4tA2YHa3d4wZJ+I=
+github.com/iotaledger/hive.go/crypto v0.0.0-20231219105941-542b1b724494/go.mod h1:YUdghEQkJkAO5GxEvpcKpSWtV5PxAIuW4hXIszROA2E=
+github.com/iotaledger/hive.go/ds v0.0.0-20231219105941-542b1b724494 h1:3BnnbvvX6lrOp5fWpD3iXuk+s3nNXTTYPiadXYw+3fQ=
+github.com/iotaledger/hive.go/ds v0.0.0-20231219105941-542b1b724494/go.mod h1:lDpFB4hkoUke5YxJ8ssmNNuY/qaxWaTQtVu/9y9BhKI=
+github.com/iotaledger/hive.go/ierrors v0.0.0-20231219105941-542b1b724494 h1:LzsiaAUkXrlcyGPq+qsBdhbMMIZkM16hJoQgqkBr2r4=
+github.com/iotaledger/hive.go/ierrors v0.0.0-20231219105941-542b1b724494/go.mod h1:HcE8B5lP96enc/OALTb2/rIIi+yOLouRoHOKRclKmC8=
 github.com/iotaledger/hive.go/kvstore v0.0.0-20231214025533-67add6c5091b h1:tpZm/5y+zdOCkdTm4pcEC2cjd943EFKi+BSgNLBIA7A=
 github.com/iotaledger/hive.go/kvstore v0.0.0-20231214025533-67add6c5091b/go.mod h1:UjkGs5jxiEwIFyzX4wfNk01dHuqDtTOtbzsSqoJR9Pw=
-github.com/iotaledger/hive.go/lo v0.0.0-20231214121634-8b23c68d408d h1:4ElSjmSo4n6DZKtnD57CrK6oZl4uf9DSFTADIZjhtbU=
-github.com/iotaledger/hive.go/lo v0.0.0-20231214121634-8b23c68d408d/go.mod h1:kJ3T3R4oteGiO4KVlsHYoGWjl0StK2svlzqLjDPh7EQ=
-github.com/iotaledger/hive.go/log v0.0.0-20231214121634-8b23c68d408d h1:CZa2fR0/N65GiRQ7SCWSu9ljiCL8KpoOq0zyJ2uwlR0=
-github.com/iotaledger/hive.go/log v0.0.0-20231214121634-8b23c68d408d/go.mod h1:JQ7L06XNadFPtxCTKWOtzTtWQEgDHIt5NXAnQoPdu30=
-github.com/iotaledger/hive.go/runtime v0.0.0-20231214121634-8b23c68d408d h1:tq7SBxBAU2Hpyj76EaeZTk1Zkb0huW5+FlNI80MZhN8=
-github.com/iotaledger/hive.go/runtime v0.0.0-20231214121634-8b23c68d408d/go.mod h1:kpzzMz84eIcjRPjJiDv04HBp+vGjW7udXyQ2t/ixjNM=
-github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20231214121634-8b23c68d408d h1:NYOEB9jAl5XZ3+nZ1YAlicOw9Ox+Ikyb48KQc2D2pTY=
-github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20231214121634-8b23c68d408d/go.mod h1:2Gl3qEk1CV9uFPF79JM0Fn4Da39P6SZO+uIF4YMy2kk=
-github.com/iotaledger/hive.go/stringify v0.0.0-20231214121634-8b23c68d408d h1:p/9JAK3ngwESuy4TKs7Sio49z/begA38cwvpaxl4BMs=
-github.com/iotaledger/hive.go/stringify v0.0.0-20231214121634-8b23c68d408d/go.mod h1:FTo/UWzNYgnQ082GI9QVM9HFDERqf9rw9RivNpqrnTs=
+github.com/iotaledger/hive.go/lo v0.0.0-20231219105941-542b1b724494 h1:WzcyMcTExU4Xe4MGSu3WLjc1WVswUMmDiBY6m2Q+i3c=
+github.com/iotaledger/hive.go/lo v0.0.0-20231219105941-542b1b724494/go.mod h1:kJ3T3R4oteGiO4KVlsHYoGWjl0StK2svlzqLjDPh7EQ=
+github.com/iotaledger/hive.go/log v0.0.0-20231219105941-542b1b724494 h1:Is4KDfQ9qt8Ilq6RW1vOpbDTeGMHMPiSsyyBGkg7Ot4=
+github.com/iotaledger/hive.go/log v0.0.0-20231219105941-542b1b724494/go.mod h1:JQ7L06XNadFPtxCTKWOtzTtWQEgDHIt5NXAnQoPdu30=
+github.com/iotaledger/hive.go/runtime v0.0.0-20231219105941-542b1b724494 h1:f8Cp1XnbIcqWyyABd2nq4kkciui+CKaGSIJXLQSXi5s=
+github.com/iotaledger/hive.go/runtime v0.0.0-20231219105941-542b1b724494/go.mod h1:kpzzMz84eIcjRPjJiDv04HBp+vGjW7udXyQ2t/ixjNM=
+github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20231219095137-dd4674b3226e h1:FOz9/O6yuNYFICP33gjHJ+0SBdzIm1oWfFhaEEiOq8Q=
+github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20231219095137-dd4674b3226e/go.mod h1:2Gl3qEk1CV9uFPF79JM0Fn4Da39P6SZO+uIF4YMy2kk=
+github.com/iotaledger/hive.go/stringify v0.0.0-20231219105941-542b1b724494 h1:aa2z4tUca8aZNd2MLcLmGS19sP6BAAO9ULSOYJTFcxo=
+github.com/iotaledger/hive.go/stringify v0.0.0-20231219105941-542b1b724494/go.mod h1:FTo/UWzNYgnQ082GI9QVM9HFDERqf9rw9RivNpqrnTs=
 github.com/iotaledger/iota-crypto-demo v0.0.0-20231208171603-786bb32fdb00 h1:j5udgLtSN6wQgFI9vnhkdJsqsVdJmwtoc0yOmT/Ila4=
 github.com/iotaledger/iota-crypto-demo v0.0.0-20231208171603-786bb32fdb00/go.mod h1:gt+URx7DZu414nZME7jtGgxR4DVTSnNa1jF2trTUTZ0=
-github.com/iotaledger/iota.go/v4 v4.0.0-20231211160706-492c65d5e3f5 h1:2iQUEuYvuyeYtZBr6bRoM4xFLxRiQ66aBPgKuJTirh0=
-github.com/iotaledger/iota.go/v4 v4.0.0-20231211160706-492c65d5e3f5/go.mod h1:jU3Jlnhwv4KWlpft84lu9/M0QkCykESl29bL4oCenKs=
+github.com/iotaledger/iota.go/v4 v4.0.0-20231219130133-667f32aa821d h1:47rt2taNoMPgMF0BixlEd5q9RHEtvsGtIIuOkKsa2k4=
+github.com/iotaledger/iota.go/v4 v4.0.0-20231219130133-667f32aa821d/go.mod h1:66w9NjF5IDk4amUu+i54yPfSi3hLqpAOefotC0kZahs=
 github.com/ipfs/go-cid v0.4.1 h1:A/T3qGvxi4kpKWWcPC/PgbvDA2bjVLO7n4UeVwnbs/s=
 github.com/ipfs/go-cid v0.4.1/go.mod h1:uQHwDeX4c6CtyrFwdqyhpNcxVewur1M7l7fNU7LKwZk=
 github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg=
@@ -122,10 +124,10 @@ github.com/zyedidia/generic v1.2.1 h1:Zv5KS/N2m0XZZiuLS82qheRG4X1o5gsWreGb0hR7XD
 github.com/zyedidia/generic v1.2.1/go.mod h1:ly2RBz4mnz1yeuVbQA/VFwGjK3mnHGRj1JuoG336Bis=
 go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
 go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
-golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY=
-golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
-golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI=
-golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo=
+golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k=
+golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
+golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ=
+golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE=
 golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE=
 golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
 golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=


Test patch:
diff --git a/pkg/protocol/engine/ledger/tests/state.go b/pkg/protocol/engine/ledger/tests/state.go
index c4d4766c..19b5a0fd 100644
--- a/pkg/protocol/engine/ledger/tests/state.go
+++ b/pkg/protocol/engine/ledger/tests/state.go
@@ -2,6 +2,7 @@ package ledgertests
 
 import (
 	"github.com/iotaledger/hive.go/lo"
+	"github.com/iotaledger/iota-core/pkg/protocol/engine/mempool"
 	iotago "github.com/iotaledger/iota.go/v4"
 )
 
@@ -23,8 +24,8 @@ func (m *MockedState) StateID() iotago.Identifier {
 	return iotago.IdentifierFromData(lo.PanicOnErr(m.id.Bytes()))
 }
 
-func (m *MockedState) Type() iotago.StateType {
-	return iotago.InputUTXO
+func (m *MockedState) Type() mempool.StateType {
+	return mempool.StateTypeUTXOInput
 }
 
 func (m *MockedState) IsReadOnly() bool {
diff --git a/pkg/protocol/engine/mempool/tests/testframework.go b/pkg/protocol/engine/mempool/tests/testframework.go
index e5fcfe1c..f82bbb2e 100644
--- a/pkg/protocol/engine/mempool/tests/testframework.go
+++ b/pkg/protocol/engine/mempool/tests/testframework.go
@@ -95,10 +95,10 @@ func (t *TestFramework) CreateTransaction(alias string, referencedStates []strin
 
 	// register the aliases for the generated output IDs
 	for i := uint16(0); i < transaction.outputCount; i++ {
-		t.referencesByAlias[alias+":"+strconv.Itoa(int(i))] = &iotago.UTXOInput{
+		t.referencesByAlias[alias+":"+strconv.Itoa(int(i))] = mempool.UTXOInputStateRefFromInput(&iotago.UTXOInput{
 			TransactionID:          transactionID,
 			TransactionOutputIndex: i,
-		}
+		})
 
 		t.stateIDByAlias[alias+":"+strconv.Itoa(int(i))] = t.referencesByAlias[alias+":"+strconv.Itoa(int(i))].ReferencedStateID()
 	}
@@ -181,7 +181,7 @@ func (t *TestFramework) OutputStateMetadata(alias string) (mempool.StateMetadata
 
 func (t *TestFramework) StateID(alias string) mempool.StateID {
 	if alias == "genesis" {
-		return (&iotago.UTXOInput{}).ReferencedStateID()
+		return iotago.IdentifierFromData(lo.PanicOnErr((&iotago.UTXOInput{}).OutputID().Bytes()))
 	}
 
 	stateID, exists := t.stateIDByAlias[alias]
@@ -324,7 +324,7 @@ func (t *TestFramework) setupHookedEvents() {
 
 func (t *TestFramework) stateReference(alias string) mempool.StateReference {
 	if alias == "genesis" {
-		return &iotago.UTXOInput{}
+		return mempool.UTXOInputStateRefFromInput(&iotago.UTXOInput{})
 	}
 
 	reference, exists := t.referencesByAlias[alias]
@@ -414,10 +414,10 @@ func (t *TestFramework) Cleanup() {
 
 type genericReference struct {
 	referencedStateID iotago.Identifier
-	stateType         iotago.StateType
+	stateType         mempool.StateType
 }
 
-func NewStateReference(referencedStateID iotago.Identifier, stateType iotago.StateType) mempool.StateReference {
+func NewStateReference(referencedStateID iotago.Identifier, stateType mempool.StateType) mempool.StateReference {
 	return &genericReference{
 		referencedStateID: referencedStateID,
 		stateType:         stateType,
@@ -428,6 +428,6 @@ func (g *genericReference) ReferencedStateID() iotago.Identifier {
 	return g.referencedStateID
 }
 
-func (g *genericReference) Type() iotago.StateType {
+func (g *genericReference) Type() mempool.StateType {
 	return g.stateType
 }
diff --git a/pkg/protocol/engine/mempool/tests/tests.go b/pkg/protocol/engine/mempool/tests/tests.go
index e2866cff..8f8f2bd1 100644
--- a/pkg/protocol/engine/mempool/tests/tests.go
+++ b/pkg/protocol/engine/mempool/tests/tests.go
@@ -63,14 +63,14 @@ func TestProcessTransaction(t *testing.T, tf *TestFramework) {
 }
 
 func TestProcessTransactionWithReadOnlyInputs(t *testing.T, tf *TestFramework) {
-	tf.InjectState("readOnlyInput", &iotago.Commitment{
+	tf.InjectState("readOnlyInput", mempool.CommitmentInputStateFromCommitment(&iotago.Commitment{
 		ProtocolVersion:      0,
 		Slot:                 0,
 		PreviousCommitmentID: iotago.CommitmentID{},
 		RootsID:              iotago.Identifier{},
 		CumulativeWeight:     0,
 		ReferenceManaCost:    0,
-	})
+	}))
 
 	tf.CreateTransaction("tx1", []string{"genesis", "readOnlyInput"}, 1)
 	tf.CreateTransaction("tx2", []string{"tx1:0", "readOnlyInput"}, 1)
@@ -85,7 +85,7 @@ func TestProcessTransactionWithReadOnlyInputs(t *testing.T, tf *TestFramework) {
 	tx1Metadata, exists := tf.TransactionMetadata("tx1")
 	require.True(t, exists)
 	_ = tx1Metadata.Outputs().ForEach(func(state mempool.StateMetadata) error {
-		if state.State().Type() == iotago.InputUTXO {
+		if state.State().Type() == mempool.StateTypeUTXOInput {
 			require.False(t, state.IsAccepted())
 			require.Equal(t, 1, state.PendingSpenderCount())
 		}
@@ -97,12 +97,12 @@ func TestProcessTransactionWithReadOnlyInputs(t *testing.T, tf *TestFramework) {
 	require.True(t, exists)
 
 	_ = tx2Metadata.Outputs().ForEach(func(state mempool.StateMetadata) error {
-		if state.State().Type() == iotago.InputUTXO {
+		if state.State().Type() == mempool.StateTypeUTXOInput {
 			require.False(t, state.IsAccepted())
 			require.Equal(t, 0, state.PendingSpenderCount())
 		}
 
-		if state.State().Type() == iotago.InputCommitment {
+		if state.State().Type() == mempool.StateTypeCommitment {
 			require.False(t, state.IsAccepted())
 			require.Equal(t, 2, state.PendingSpenderCount())
 		}