Skip to content

Commit 0866470

Browse files
committed
Fix query token data for NFT issuance v1
1 parent d8a8e50 commit 0866470

File tree

1 file changed

+48
-30
lines changed

1 file changed

+48
-30
lines changed

chainstate/src/detail/query.rs

Lines changed: 48 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ use common::{
1919
chain::{
2020
block::{signed_block_header::SignedBlockHeader, BlockReward},
2121
tokens::{
22-
RPCFungibleTokenInfo, RPCNonFungibleTokenInfo, RPCTokenInfo, RPCTokenTotalSupply,
23-
TokenAuxiliaryData, TokenData, TokenId,
22+
NftIssuance, RPCFungibleTokenInfo, RPCNonFungibleTokenInfo, RPCTokenInfo,
23+
RPCTokenTotalSupply, TokenAuxiliaryData, TokenData, TokenId,
2424
},
2525
Block, GenBlock, OutPointSourceId, SignedTransaction, Transaction, TxMainChainIndex,
2626
TxOutput,
@@ -298,39 +298,29 @@ impl<'a, S: BlockchainStorageRead, V: TransactionVerificationStrategy> Chainstat
298298
.issuance_tx()
299299
.outputs()
300300
.iter()
301-
// Filter tokens
302-
.filter_map(|output| match output {
301+
// find tokens
302+
.find_map(|output| match output {
303303
TxOutput::Transfer(v, _)
304304
| 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+
}),
306308
TxOutput::CreateStakePool(_, _)
307309
| TxOutput::ProduceBlockFromStake(_, _)
308310
| 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,
334324
}))
335325
}
336326
}
@@ -371,3 +361,31 @@ impl<'a, S: BlockchainStorageRead, V: TransactionVerificationStrategy> Chainstat
371361
self.chainstate_ref.get_circulating_supply(id).map_err(PropertyQueryError::from)
372362
}
373363
}
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

Comments
 (0)