利用 Solana Trader API 实时获取 DEX 交易数据与 Pumpfun 洞察

·

在区块链数据领域,高效获取和分析去中心化交易所(DEX)的交易信息至关重要。Solana Trader API 为开发者和分析师提供了强大的工具,能够实时追踪链上交易活动、监控钱包行为,并深入理解市场动态。本文将介绍几种关键的数据查询方法,帮助您充分利用这一接口。

Solana DEX 交易数据概览

Solana Trader API 支持多种数据查询,包括最新交易、OHLC(开高低收)数据以及其他关键指标。通过该 API,用户可以访问聚合和归档数据集,但需注意“交易方账户”字段在聚合查询中不可用。

查询特定代币的顶级交易者

要分析某个代币的市场活动,识别其顶级交易者是一项常见需求。以下查询示例返回代币 59VxMU35CaHHBTndQQWDkChprM5FMw7YQi5aPE5rfSHN 在 Solana DEX 平台上交易量最高的前 100 名交易者。结果包括每个交易者的买入量、卖出量、总交易量以及以美元计价的交易额。

query TopTraders($token: String, $base: String) {
  Solana {
    DEXTradeByTokens(
      orderBy: {descendingByField: "volumeUsd"}
      limit: {count: 100}
      where: {Trade: {Currency: {MintAddress: {is: $token}}, Side: {Amount: {gt: "0"}, Currency: {MintAddress: {is: $base}}}}, Transaction: {Result: {Success: true}}}
    ) {
      Trade {
        Account {
          Owner
        }
        Dex {
          ProgramAddress
          ProtocolFamily
          ProtocolName
        }
      }
      bought: sum(of: Trade_Amount, if: {Trade: {Side: {Type: {is: buy}}}})
      sold: sum(of: Trade_Amount, if: {Trade: {Side: {Type: {is: sell}}}})
      volume: sum(of: Trade_Amount)
      volumeUsd: sum(of: Trade_Side_AmountInUSD)
    }
  }
}
{
  "token": "59VxMU35CaHHBTndQQWDkChprM5FMw7YQi5aPE5rfSHN",
  "base": "So11111111111111111111111111111111111111112"
}

👉 查看实时交易数据工具

实时监控钱包交易活动

对于需要跟踪特定钱包实时交易行为的用户,以下订阅查询非常有用。它监控地址列表中钱包的买卖活动,并返回交易详情,包括程序方法、区块时间、交易货币信息以及交易签名。

subscription MyQuery($addressList: [String!]) {
  Solana {
    DEXTrades(
      where: {Transaction: {Result: {Success: true}}, any: [{Trade: {Buy: {Account: {Address: {in: $addressList}}}}}, {Trade: {Buy: {Account: {Token: {Owner: {in: $addressList}}}}}}, {Trade: {Sell: {Account: {Address: {in: $addressList}}}}}, {Trade: {Sell: {Account: {Token: {Owner: {in: $addressList}}}}}}]}
    ) {
      Instruction {
        Program {
          Method
        }
      }
      Block {
        Time
      }
      Trade {
        Buy {
          Amount
          Account {
            Address
          }
          Currency {
            Name
            Symbol
            MintAddress
            Decimals
          }
          AmountInUSD
        }
        Sell {
          Amount
          Account {
            Address
          }
          Currency {
            Name
            Symbol
            MintAddress
            Decimals
          }
          AmountInUSD
        }
      }
      Transaction {
        Signature
        Signer
      }
    }
  }
}
{
  "addressList": ["7eWHXZefGY98o9grrrt1Z3j7DcPDEhA4UviQ1pVNhTXX", "6LNdbvyb11JH8qxAsJoPSfkwK4zJDQKQ6LNp4mxt8VpR"]
}

获取带余额更新的钱包交易

此查询扩展了监控功能,不仅返回交易详情,还提供交易前后的余额变化。这对于分析交易对钱包资产的实际影响至关重要。

query MyQuery($addressList: [String!]) {
  Solana {
    DEXTrades(
      limit: {count: 10}
      orderBy: {descending: Block_Time}
      where: {Transaction: {Result: {Success: true}}, any: [{Trade: {Buy: {Account: {Address: {in: $addressList}}}}}, {Trade: {Buy: {Account: {Token: {Owner: {in: $addressList}}}}}}, {Trade: {Sell: {Account: {Address: {in: $addressList}}}}}, {Trade: {Sell: {Account: {Token: {Owner: {in: $addressList}}}}}}]}
    ) {
      Instruction {
        Program {
          Method
        }
      }
      Block {
        Time
      }
      Trade {
        Buy {
          Amount
          Account {
            Address
          }
          Currency {
            Name
            Symbol
            MintAddress
            Decimals
          }
          AmountInUSD
        }
        Sell {
          Amount
          Account {
            Address
          }
          Currency {
            Name
            Symbol
            MintAddress
            Decimals
          }
          AmountInUSD
        }
      }
      Transaction {
        Signature
        Signer
      }
      joinBalanceUpdates(join: left, Transaction_Signature: Transaction_Signature) {
        Block{
          Time
        }
        BalanceUpdate {
          PreBalance
          PostBalance
          Account {
            Address
            Token {
              Owner
            }
          }
        }
      }
    }
  }
}
{
  "addressList": ["HevtGooXxDjLfvLM1vUY2y7b9gyu59whR4ycnQj3UjUT"]
}

统计交易者的买卖次数

了解特定交易者在某时间点后的买卖频率有助于评估其市场参与度。以下查询返回指定交易者的买入和卖出交易次数。

query MyQuery($timestamp: DateTime, $trader: String) {
  Solana(dataset: combined) {
    DEXTradeByTokens(
      where: {Block: {Time: {since: $timestamp}}, Trade: {Side: {Currency: {MintAddress: {in: ["So11111111111111111111111111111111111111112", "11111111111111111111111111111111"]}}}}, any: [{Trade: {Account: {Address: {is: $trader}}}}, {Trade: {Account: {Token: {Owner: {is: $trader}}}}}]}
    ) {
      buys: count(if: {Trade: {Side: {Type: {is: buy}}}})
      sells: count(if: {Trade: {Side: {Type: {is: sell}}}})
    }
  }
}
{
  "timestamp" : "2024-06-25T06:19:00Z",
  "trader" : "FeWbDQ9SpgWS8grNrpFesVquJfxVkRu1WNZerKsrkcbY"
}

实时订阅交易者活动

通过订阅查询,您可以实时获取特定钱包的交易数据。该功能基于 WebSocket,非常适合构建实时应用程序。以下示例监控钱包 CP1d7VVnCMy321G6Q1924Bibp528rqibTX8x9UL6wUCe 的买卖交易,并返回详细的交易信息。

subscription {
  Solana {
    buy: DEXTrades(
      where: {Trade: {Buy: {Account: {Address: {is: "CP1d7VVnCMy321G6Q1924Bibp528rqibTX8x9UL6wUCe"}}}}}
    ) {
      Trade {
        Dex {
          ProgramAddress
          ProtocolFamily
          ProtocolName
        }
        Buy {
          Amount
          Account {
            Address
          }
          Currency {
            MetadataAddress
            Key
            IsMutable
            EditionNonce
            Decimals
            CollectionAddress
            Fungible
            Symbol
            Native
            Name
          }
          Order {
            LimitPrice
            LimitAmount
            OrderId
          }
          Price
        }
        Market {
          MarketAddress
        }
        Sell {
          Account {
            Address
          }
          Currency {
            IsMutable
            Decimals
            CollectionAddress
            Fungible
            Symbol
            Native
            Name
          }
          Price
        }
      }
    }
    sell: DEXTrades(
      where: {Trade: {Sell: {Account: {Address: {is: "CP1d7VVnCMy321G6Q1924Bibp528rqibTX8x9UL6wUCe"}}}}}
    ) {
      Trade {
        Dex {
          ProgramAddress
          ProtocolFamily
          ProtocolName
        }
        Buy {
          Amount
          Account {
            Address
          }
          Currency {
            MetadataAddress
            Key
            IsMutable
            EditionNonce
            Decimals
            CollectionAddress
            Fungible
            Symbol
            Native
            Name
          }
          Order {
            LimitPrice
            LimitAmount
            OrderId
          }
          Price
        }
        Market {
          MarketAddress
        }
        Sell {
          Account {
            Address
          }
          Currency {
            IsMutable
            Decimals
            CollectionAddress
            Fungible
            Symbol
            Native
            Name
          }
          Price
        }
      }
    }
  }
}

检索代币的首批买家

分析新代币的早期采用者时,获取其首批买家信息很有价值。以下查询返回指定代币的前 100 名买家,按交易时间升序排列。

queryMyQuery{
  Solana{
    DEXTrades(
      where:{
        Trade:{
          Buy:{
            Currency:{
              MintAddress:{
                is:"2Z4FzKBcw48KBD2PaR4wtxo4sYGbS7QqTQCLoQnUpump"
              }
            }
          }
        }
      }
      limit:{count:100}
      orderBy:{ascending:Block_Time}
    ){
      Trade{
        Buy{
          Amount
          Account{
            Token{
              Owner
            }
          }
        }
      }
    }
  }
}

👉 探索更多高级数据策略

常见问题

Solana Trader API 支持哪些类型的数据查询?

该 API 支持多种数据查询,包括实时交易监控、历史交易分析、余额更新跟踪以及聚合统计数据。用户可以根据需求获取最新交易、OHLC 数据、特定代币的交易者排名等信息。

如何实时监控钱包的交易活动?

通过订阅查询(Subscription)功能,结合 WebSocket 连接,可以实时获取指定钱包的买卖交易数据。只需提供钱包地址列表,即可持续接收交易详情,包括交易时间、金额、货币类型和交易签名。

查询聚合数据时有哪些限制?

在聚合查询中,“交易方账户”字段不可用。此外,对于大规模数据请求,需要注意 API 的调用频率限制和返回结果的数量限制,通常可通过分页或增量查询优化。

如何获取交易前后的余额变化?

使用包含 joinBalanceUpdates 的查询,可以获取交易发生前后的钱包余额。该功能通过左连接交易和余额更新数据,提供更全面的资产变动视图。

这些查询是否需要认证?

大多数示例查询为公开数据,但部分高级功能或大规模数据访问可能需要 API 密钥。建议查阅官方文档了解具体的认证要求和访问权限。

能否获取特定代币的早期买家信息?

是的,通过按交易时间升序排序并限制返回数量,可以获取代币的首批买家。这对于分析新项目的早期社区参与度非常有用。