@@ -167,31 +167,83 @@ func testMintAssetWithDecimalDisplayMetaField(t *harnessTest) {
167167 secondAssetReq .Asset .GroupKey = groupKey
168168 secondAssetReq .Asset .DecimalDisplay = 0
169169
170- // Reissuance should fail if the decimal display does not match the
170+ // Re-issuance should fail if the decimal display does not match the
171171 // group anchor.
172172 _ , err = t .tapd .MintAsset (ctxt , secondAssetReq )
173173 require .ErrorContains (t .t , err , "decimal display does not match" )
174174
175- // Requesting a decimal display without specifying the metadata type as
176- // JSON should fail.
175+ // Requesting a decimal display without specifying the metadata field
176+ // with at least the type should fail.
177177 secondAssetReq .Asset .DecimalDisplay = firstAsset .DecimalDisplay
178178 secondAssetReq .Asset .AssetMeta = nil
179179
180180 _ , err = t .tapd .MintAsset (ctxt , secondAssetReq )
181- require .ErrorContains (t .t , err , "decimal display requires JSON" )
181+ require .ErrorContains (
182+ t .t , err , "decimal display requires asset metadata" ,
183+ )
182184
183- // If we update the decimal display to match the group anchor, minting
184- // should succeed. We also unset the metadata to ensure that the decimal
185- // display is set as the sole JSON object if needed.
185+ // Attempting to set a different decimal display in the JSON meta data
186+ // as in the new RPC request field should give us an error as well.
186187 secondAssetReq .Asset .AssetMeta = & taprpc.AssetMeta {
187188 Type : taprpc .AssetMetaType_META_TYPE_JSON ,
189+ Data : []byte (`{"foo": "bar", "decimal_display": 3}` ),
188190 }
189- MintAssetsConfirmBatch (
191+ _ , err = t .tapd .MintAsset (ctxt , secondAssetReq )
192+ require .ErrorContains (
193+ t .t , err , "decimal display in JSON asset meta does not match" ,
194+ )
195+
196+ // If we set a valid asset meta again, minting should succeed, using the
197+ // same decimal display as the group anchor.
198+ secondAssetReq .Asset .AssetMeta .Data = []byte (`{"foo": "bar"}` )
199+ secondAssets := MintAssetsConfirmBatch (
190200 t .t , t .lndHarness .Miner ().Client , t .tapd ,
191201 []* mintrpc.MintAssetRequest {secondAssetReq },
192202 )
203+ require .Len (t .t , secondAssets , 1 )
204+ require .NotNil (t .t , secondAssets [0 ].DecimalDisplay )
205+ require .EqualValues (
206+ t .t , 2 , secondAssets [0 ].DecimalDisplay .DecimalDisplay ,
207+ )
208+
209+ // For an asset with a JSON meta data type, we also expect the decimal
210+ // display to be encoded in the meta data JSON.
211+ metaResp , err := t .tapd .FetchAssetMeta (
212+ ctxt , & taprpc.FetchAssetMetaRequest {
213+ Asset : & taprpc.FetchAssetMetaRequest_AssetId {
214+ AssetId : secondAssets [0 ].AssetGenesis .AssetId ,
215+ },
216+ },
217+ )
218+ require .NoError (t .t , err )
219+ require .Contains (t .t , string (metaResp .Data ), `"foo":"bar"` )
220+ require .Contains (t .t , string (metaResp .Data ), `"decimal_display":2` )
193221
194222 AssertGroupSizes (
195223 t .t , t .tapd , []string {hex .EncodeToString (groupKey )}, []int {2 },
196224 )
225+
226+ // Now we also test minting an asset that uses the opaque meta data type
227+ // and check that the decimal display is correctly encoded as well.
228+ thirdAsset := & mintrpc.MintAsset {
229+ AssetType : taprpc .AssetType_NORMAL ,
230+ Name : "test-asset-opaque-decimal-display" ,
231+ AssetMeta : & taprpc.AssetMeta {
232+ Type : taprpc .AssetMetaType_META_TYPE_OPAQUE ,
233+ Data : []byte ("some opaque data" ),
234+ },
235+ Amount : 123 ,
236+ DecimalDisplay : 7 ,
237+ }
238+ thirdAssetReq := & mintrpc.MintAssetRequest {Asset : thirdAsset }
239+ thirdAssets := MintAssetsConfirmBatch (
240+ t .t , t .lndHarness .Miner ().Client , t .tapd ,
241+ []* mintrpc.MintAssetRequest {thirdAssetReq },
242+ )
243+
244+ require .Len (t .t , thirdAssets , 1 )
245+ require .NotNil (t .t , thirdAssets [0 ].DecimalDisplay )
246+ require .EqualValues (
247+ t .t , 7 , thirdAssets [0 ].DecimalDisplay .DecimalDisplay ,
248+ )
197249}
0 commit comments