@@ -19,8 +19,8 @@ use common::{
19
19
chain:: {
20
20
block:: { signed_block_header:: SignedBlockHeader , BlockReward } ,
21
21
tokens:: {
22
- RPCFungibleTokenInfo , RPCNonFungibleTokenInfo , RPCTokenInfo , RPCTokenTotalSupply ,
23
- TokenAuxiliaryData , TokenData , TokenId ,
22
+ NftIssuance , RPCFungibleTokenInfo , RPCNonFungibleTokenInfo , RPCTokenInfo ,
23
+ RPCTokenTotalSupply , TokenAuxiliaryData , TokenData , TokenId ,
24
24
} ,
25
25
Block , GenBlock , OutPointSourceId , SignedTransaction , Transaction , TxMainChainIndex ,
26
26
TxOutput ,
@@ -298,39 +298,29 @@ impl<'a, S: BlockchainStorageRead, V: TransactionVerificationStrategy> Chainstat
298
298
. issuance_tx ( )
299
299
. outputs ( )
300
300
. iter ( )
301
- // Filter tokens
302
- . filter_map ( |output| match output {
301
+ // find tokens
302
+ . find_map ( |output| match output {
303
303
TxOutput :: Transfer ( v, _)
304
304
| TxOutput :: LockThenTransfer ( v, _, _)
305
- | TxOutput :: Burn ( v) => v. token_data ( ) ,
305
+ | TxOutput :: Burn ( v) => v. token_data ( ) . and_then ( |token_data| {
306
+ to_rpc_token_info ( token_data, token_id, & token_aux_data)
307
+ } ) ,
306
308
TxOutput :: CreateStakePool ( _, _)
307
309
| TxOutput :: ProduceBlockFromStake ( _, _)
308
310
| TxOutput :: CreateDelegationId ( _, _)
309
- | TxOutput :: DelegateStaking ( _, _)
310
- | TxOutput :: IssueFungibleToken ( _)
311
- | TxOutput :: IssueNft ( _, _, _) => None ,
312
- } )
313
- // Find issuance data and return RPCTokenInfo
314
- . find_map ( |token_data| match token_data {
315
- TokenData :: TokenIssuance ( issuance) => {
316
- Some ( RPCTokenInfo :: new_fungible ( RPCFungibleTokenInfo :: new (
317
- token_id,
318
- issuance. token_ticker . clone ( ) ,
319
- issuance. number_of_decimals ,
320
- issuance. metadata_uri . clone ( ) ,
321
- issuance. amount_to_issue ,
322
- RPCTokenTotalSupply :: Fixed ( issuance. amount_to_issue ) ,
323
- ) ) )
324
- }
325
- TokenData :: NftIssuance ( nft) => {
326
- Some ( RPCTokenInfo :: new_nonfungible ( RPCNonFungibleTokenInfo :: new (
327
- token_id,
328
- token_aux_data. issuance_tx ( ) . get_id ( ) ,
329
- token_aux_data. issuance_block_id ( ) ,
330
- & nft. metadata ,
331
- ) ) )
332
- }
333
- TokenData :: TokenTransfer ( _) => None ,
311
+ | TxOutput :: DelegateStaking ( _, _) => None ,
312
+ TxOutput :: IssueNft ( _, issuance, _) => match issuance. as_ref ( ) {
313
+ NftIssuance :: V0 ( nft) => {
314
+ Some ( RPCTokenInfo :: new_nonfungible ( RPCNonFungibleTokenInfo :: new (
315
+ token_id,
316
+ token_aux_data. issuance_tx ( ) . get_id ( ) ,
317
+ token_aux_data. issuance_block_id ( ) ,
318
+ & nft. metadata ,
319
+ ) ) )
320
+ }
321
+ } ,
322
+ // Should be handled by the token data branch
323
+ TxOutput :: IssueFungibleToken ( _) => None ,
334
324
} ) )
335
325
}
336
326
}
@@ -371,3 +361,31 @@ impl<'a, S: BlockchainStorageRead, V: TransactionVerificationStrategy> Chainstat
371
361
self . chainstate_ref . get_circulating_supply ( id) . map_err ( PropertyQueryError :: from)
372
362
}
373
363
}
364
+
365
+ fn to_rpc_token_info (
366
+ token_data : & TokenData ,
367
+ token_id : TokenId ,
368
+ token_aux_data : & TokenAuxiliaryData ,
369
+ ) -> Option < RPCTokenInfo > {
370
+ match token_data {
371
+ TokenData :: TokenIssuance ( issuance) => {
372
+ Some ( RPCTokenInfo :: new_fungible ( RPCFungibleTokenInfo :: new (
373
+ token_id,
374
+ issuance. token_ticker . clone ( ) ,
375
+ issuance. number_of_decimals ,
376
+ issuance. metadata_uri . clone ( ) ,
377
+ issuance. amount_to_issue ,
378
+ RPCTokenTotalSupply :: Fixed ( issuance. amount_to_issue ) ,
379
+ ) ) )
380
+ }
381
+ TokenData :: NftIssuance ( nft) => {
382
+ Some ( RPCTokenInfo :: new_nonfungible ( RPCNonFungibleTokenInfo :: new (
383
+ token_id,
384
+ token_aux_data. issuance_tx ( ) . get_id ( ) ,
385
+ token_aux_data. issuance_block_id ( ) ,
386
+ & nft. metadata ,
387
+ ) ) )
388
+ }
389
+ TokenData :: TokenTransfer ( _) => None ,
390
+ }
391
+ }
0 commit comments