// Copyright 2023 @soul-wallet/extension-koni authors & contributors // SPDX-License-Identifier: Apache-2.0 import { SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME } from '@soul-wallet/extension-base/koni/api/nft/config'; import { _SubstrateApi } from '@soul-wallet/extension-base/services/chain-service/types'; import { reformatAddress } from '@soul-wallet/extension-base/utils'; export function isRecipientSelf (currentAddress: string, recipientAddress: string) { return reformatAddress(currentAddress, 1) === reformatAddress(recipientAddress, 1); } export function acalaGetExtrinsic (substrateApi: _SubstrateApi, senderAddress: string, recipientAddress: string, params: Record) { try { const itemId = params.itemId as number; const collectionId = params.collectionId as number; return substrateApi.api.tx.nft.transfer(recipientAddress, [collectionId, itemId]); } catch (e) { console.error(e); return null; } } export function rmrkGetExtrinsic (substrateApi: _SubstrateApi, senderAddress: string, recipientAddress: string, params: Record) { try { const remark = params.remark as string; if (!remark) { return null; } const parsedRemark = remark.concat(recipientAddress.replace( /\\s/g, '' )); return substrateApi.api.tx.system.remark(parsedRemark); } catch (e) { console.error(e); return null; } } export function uniqueGetExtrinsic (substrateApi: _SubstrateApi, senderAddress: string, recipientAddress: string, params: Record) { try { const itemId = params.itemId as number; const collectionId = params.collectionId as number; return substrateApi.api.tx.nft.transfer({ Substrate: recipientAddress }, collectionId, itemId, 1); } catch (e) { console.error(e); return null; } } export function quartzGetExtrinsic (substrateApi: _SubstrateApi, senderAddress: string, recipientAddress: string, params: Record) { try { const itemId = params.itemId as number; const collectionId = params.collectionId as number; return substrateApi.api.tx.unique.transfer({ Substrate: recipientAddress }, collectionId, itemId, 1); } catch (e) { console.error(e); return null; } } export function statemineGetExtrinsic (substrateApi: _SubstrateApi, senderAddress: string, recipientAddress: string, params: Record) { try { const itemId = params.itemId as number; const collectionId = params.collectionId as number; return substrateApi.api.tx.uniques.transfer(collectionId, itemId, recipientAddress); } catch (e) { console.error(e); return null; } } export function statemintGetExtrinsic (substrateApi: _SubstrateApi, senderAddress: string, recipientAddress: string, params: Record) { try { const itemId = params.itemId as number; const collectionId = params.collectionId as number; return substrateApi.api.tx.nfts.transfer(collectionId, itemId, recipientAddress); } catch (e) { console.error(e); return null; } } export function getNftTransferExtrinsic (networkKey: string, substrateApi: _SubstrateApi, senderAddress: string, recipientAddress: string, params: Record) { switch (networkKey) { case SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME.acala: return acalaGetExtrinsic(substrateApi, senderAddress, recipientAddress, params); case SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME.karura: return acalaGetExtrinsic(substrateApi, senderAddress, recipientAddress, params); case SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME.kusama: return rmrkGetExtrinsic(substrateApi, senderAddress, recipientAddress, params); case SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME.uniqueNft: return uniqueGetExtrinsic(substrateApi, senderAddress, recipientAddress, params); case SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME.quartz: return quartzGetExtrinsic(substrateApi, senderAddress, recipientAddress, params); case SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME.opal: return quartzGetExtrinsic(substrateApi, senderAddress, recipientAddress, params); case SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME.statemine: return statemineGetExtrinsic(substrateApi, senderAddress, recipientAddress, params); case SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME.statemint: return statemintGetExtrinsic(substrateApi, senderAddress, recipientAddress, params); case SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME.bitcountry: return acalaGetExtrinsic(substrateApi, senderAddress, recipientAddress, params); case SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME.pioneer: return acalaGetExtrinsic(substrateApi, senderAddress, recipientAddress, params); } return null; }