在区块链数据领域,高效获取和分析去中心化交易所(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 密钥。建议查阅官方文档了解具体的认证要求和访问权限。
能否获取特定代币的早期买家信息?
是的,通过按交易时间升序排序并限制返回数量,可以获取代币的首批买家。这对于分析新项目的早期社区参与度非常有用。