Skip to content

Commit 9765314

Browse files
committed
proof: add test helpers to assert equality of group key reveal types
Introduce helper functions to simplify testing by asserting equality between instances of group key reveal types.
1 parent a7707d5 commit 9765314

File tree

2 files changed

+124
-0
lines changed

2 files changed

+124
-0
lines changed

asset/asset.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1350,6 +1350,12 @@ func (g *GroupKeyRevealV1) SetTapscriptRoot(tapscriptRootBytes []byte) {
13501350
g.tapscript.root = tapscriptRoot
13511351
}
13521352

1353+
// CustomSubtreeRoot returns the custom subtree root hash of the group key
1354+
// reveal.
1355+
func (g *GroupKeyRevealV1) CustomSubtreeRoot() fn.Option[chainhash.Hash] {
1356+
return g.tapscript.customSubtreeRoot
1357+
}
1358+
13531359
// GroupPubKey returns the group public key derived from the group key reveal.
13541360
func (g *GroupKeyRevealV1) GroupPubKey(assetID ID) (*btcec.PublicKey, error) {
13551361
internalKey, err := g.RawKey().ToPubKey()

proof/proof_test.go

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,119 @@ func assertEqualTaprootProof(t *testing.T, expected, actual *TaprootProof) {
8686
}
8787
}
8888

89+
// assertEqualGroupKeyRevealV0 asserts that the expected and actual group key
90+
// reveal V0 are equal.
91+
func assertEqualGroupKeyRevealV0(t *testing.T, expected,
92+
actual asset.GroupKeyRevealV0, expectedGenesisAssetID asset.ID) {
93+
94+
t.Helper()
95+
96+
require.Equal(t, expected.RawKey(), actual.RawKey())
97+
98+
// Compare the tapscript root. Normalize nil to empty slice for
99+
// comparison.
100+
expectedRoot := expected.TapscriptRoot()
101+
if expectedRoot == nil {
102+
expectedRoot = []byte{}
103+
}
104+
105+
actualRoot := actual.TapscriptRoot()
106+
if actualRoot == nil {
107+
actualRoot = []byte{}
108+
}
109+
110+
require.Equal(t, expectedRoot, actualRoot)
111+
112+
// Assert that the asset group pub key is equal for the expected genesis
113+
// asset ID.
114+
expectedGroupPubKey, err := expected.GroupPubKey(expectedGenesisAssetID)
115+
require.NoError(t, err)
116+
117+
actualGroupPubKey, err := actual.GroupPubKey(expectedGenesisAssetID)
118+
require.NoError(t, err)
119+
120+
require.Equal(t, expectedGroupPubKey, actualGroupPubKey)
121+
}
122+
123+
// assertEqualGroupKeyRevealV1 asserts that the expected and actual group key
124+
// reveal V1 are equal.
125+
func assertEqualGroupKeyRevealV1(t *testing.T, expected,
126+
actual asset.GroupKeyRevealV1, expectedGenesisAssetID asset.ID) {
127+
128+
require.Equal(t, expected.RawKey(), actual.RawKey())
129+
130+
// Compare the tapscript root. Normalize nil to empty slice for
131+
// comparison.
132+
expectedRoot := expected.TapscriptRoot()
133+
if expectedRoot == nil {
134+
expectedRoot = []byte{}
135+
}
136+
137+
actualRoot := actual.TapscriptRoot()
138+
if actualRoot == nil {
139+
actualRoot = []byte{}
140+
}
141+
142+
require.Equal(t, expectedRoot, actualRoot)
143+
144+
// Assert that the asset group pub key is equal for the expected genesis
145+
// asset ID.
146+
expectedGroupPubKey, err := expected.GroupPubKey(expectedGenesisAssetID)
147+
require.NoError(t, err)
148+
149+
actualGroupPubKey, err := actual.GroupPubKey(expectedGenesisAssetID)
150+
require.NoError(t, err)
151+
152+
require.Equal(t, expectedGroupPubKey, actualGroupPubKey)
153+
154+
// Compare the custom subtree root.
155+
require.Equal(
156+
t, expected.CustomSubtreeRoot(), actual.CustomSubtreeRoot(),
157+
)
158+
}
159+
160+
// assertEqualGroupKeyReveal asserts that the expected and actual group key
161+
// reveal are equal.
162+
func assertEqualGroupKeyReveal(t *testing.T, expected,
163+
actual asset.GroupKeyReveal, expectedGenesisAssetID asset.ID) {
164+
165+
t.Helper()
166+
167+
// Handle nil cases.
168+
if expected == nil {
169+
require.Nil(t, actual)
170+
return
171+
}
172+
require.NotNil(t, actual)
173+
174+
// Dispatch to group key reveal version 0 assertion.
175+
if expectedV0, ok := expected.(*asset.GroupKeyRevealV0); ok {
176+
// If expected is V0 then actual should be V0.
177+
actualV0, actualOk := actual.(*asset.GroupKeyRevealV0)
178+
require.True(t, actualOk)
179+
180+
assertEqualGroupKeyRevealV0(
181+
t, *expectedV0, *actualV0, expectedGenesisAssetID,
182+
)
183+
return
184+
}
185+
186+
// Dispatch to group key reveal version 1 assertion.
187+
if expectedV1, ok := expected.(*asset.GroupKeyRevealV1); ok {
188+
// If expected is V1 then actual should be V1.
189+
actualV1, actualOk := actual.(*asset.GroupKeyRevealV1)
190+
require.True(t, actualOk)
191+
192+
assertEqualGroupKeyRevealV1(
193+
t, *expectedV1, *actualV1, expectedGenesisAssetID,
194+
)
195+
return
196+
}
197+
198+
// Unexpected group key reveal type.
199+
require.FailNow(t, "unexpected group key reveal type")
200+
}
201+
89202
func assertEqualProof(t *testing.T, expected, actual *Proof) {
90203
t.Helper()
91204

@@ -136,6 +249,11 @@ func assertEqualProof(t *testing.T, expected, actual *Proof) {
136249
}
137250

138251
require.Equal(t, expected.ChallengeWitness, actual.ChallengeWitness)
252+
253+
assertEqualGroupKeyReveal(
254+
t, expected.GroupKeyReveal, actual.GroupKeyReveal,
255+
expected.Asset.Genesis.ID(),
256+
)
139257
}
140258

141259
func TestProofEncoding(t *testing.T) {

0 commit comments

Comments
 (0)