インポート

import { useGetMultipleContractsInfo } from '@0xsequence/hooks'

使い方

import { useGetMultipleContractsInfo } from '@0xsequence/hooks'

function CrossChainPortfolio() {
  const {
    data: contractsInfo,
    isLoading,
    isError
  } = useGetMultipleContractsInfo([
    // NFTs
    { 
      chainID: "1",
      contractAddress: "0x..." 
    },
    { 
      chainID: "137",
      contractAddress: "0x..."
    },
    // ERC20 Tokens
    { 
      chainID: "1",
      contractAddress: "0x..." 
    },
    { 
      chainID: "137",
      contractAddress: "0x..."
    }
  ])

  if (isLoading) return <div>Loading portfolio...</div>
  if (isError) return <div>Error loading portfolio</div>

  const nfts = contractsInfo?.filter(info => 
    info.type === 'ERC721' || info.type === 'ERC1155'
  ) || []

  const tokens = contractsInfo?.filter(info => 
    info.type === 'ERC20'
  ) || []

  return (
    <div className="portfolio">
      <div className="nft-collections">
        <h2>NFT Collections</h2>
        {nfts.map((nft, index) => (
          <div key={index} className="collection-card">
            <img 
              src={nft.logoURI} 
              alt={nft.name}
              width={64}
              height={64}
            />
            <div className="collection-info">
              <h3>{nft.name}</h3>
              <span>Type: {nft.type}</span>
              <span>Chain ID: {nft.chainID}</span>
              {nft.description && (
                <p>{nft.description}</p>
              )}
            </div>
          </div>
        ))}
      </div>

      <div className="tokens">
        <h2>Tokens</h2>
        {tokens.map((token, index) => (
          <div key={index} className="token-card">
            <img 
              src={token.logoURI} 
              alt={token.symbol}
              width={32}
              height={32}
            />
            <div className="token-info">
              <h4>{token.name}</h4>
              <span>Symbol: {token.symbol}</span>
              <span>Decimals: {token.decimals}</span>
              <span>Chain ID: {token.chainID}</span>
            </div>
          </div>
        ))}
      </div>
    </div>
  )
}

返却型:UseQueryResult<ContractInfo[]>

このフックはReact QueryのUseQueryResultの全プロパティと、コントラクト情報の配列を返します。詳細な構造は以下の通りです:

interface ContractInfo {
    chainId: number;
    address: string;
    source: string;
    name: string;
    type: string;
    symbol: string;
    decimals?: number;
    logoURI: string;
    deployed: boolean;
    bytecodeHash: string;
    extensions: ContractInfoExtensions;
    updatedAt: string;
    notFound: boolean;
    queuedAt?: string;
    status: ResourceStatus;
}

プロパティ

data

ContractInfo[] | undefined

リクエストした各コントラクトの情報を含むオブジェクトの配列:

  • name: コントラクトまたはトークン名
  • symbol: トークンシンボル
  • decimals: 小数点以下の桁数(ERC20トークンの場合)
  • logoURI: コントラクト/トークンのロゴ画像URL
  • type: コントラクトタイプ(ERC20、ERC721、ERC1155)
  • verified: コントラクトが認証済みかどうか
  • description: 任意のコントラクト説明
  • websiteURL: 任意のプロジェクトWebサイトURL
  • imageURL: 任意のプロジェクト画像URL
  • bannerURL: 任意のバナー画像URL
  • chainID: コントラクトが存在するチェーンID

isLoading

boolean

データ取得時のローディング状態。

isError

boolean

クエリが失敗した場合のエラー状態。

エラー

Error | null

データ取得中に発生したエラー内容。

パラメータ

このフックは2つのパラメータを受け取ります:

args: GetContractInfoArgs[]

interface GetContractInfoArgs {
  chainID: string
  contractAddress: string
}
パラメータ説明
chainIDstringチェーンID(例:Ethereumメインネットの場合は”1”)
contractAddressstring情報を取得するコントラクトアドレス

options: HooksOptions

interface HooksOptions {
  disabled?: boolean
  retry?: boolean
}
パラメータ説明
disabledboolean(オプション)クエリの自動実行を無効にします
retryboolean(オプション)失敗したクエリを再試行するかどうか