什么是 Solana webhooks?
Solana webhooks 是当链上事件发生时,实时通过 HTTP 通知发送到您的应用程序。与其不断轮询区块链,Helius 会在钱包转移资金、NFT 销售或任何监控的交易类型触发时,将解析的交易数据直接推送到您的端点。使用 webhooks 来支持交易机器人、分析仪表盘、合规流水线和事件驱动的自动化。 我们提供了用户友好的界面、程序化 API 和 SDK 访问,以便轻松创建和管理 webhooks。有关常见问题,请参见 Webhooks FAQ。 对于需要实时解析交易的新项目,可以考虑使用解析流。它是 Enhanced Transaction Webhooks 的后继方案,可通过 IDL 目录解码每条指令,并在服务器端按程序、账户和指令名称进行筛选。所有套餐均按每个事件 1 积分计费。如果你的服务器未成功响应,Helius 可能会重试投递 Webhook,因此你可能会收到重复事件。有关重试和处理重复事件的详细信息,请参阅 Webhooks 常见问题。
定价
当 Helius 处理 Webhook 事件并将其发送到你的端点时,每个事件将收取 1 积分。无论你的端点能否成功处理 Webhook,都将收取费用。通过 API 编辑、添加或删除 Webhook 的费用为每个请求 100 积分。Webhook 类型
我们目前提供多种针对不同需求的 Webhook:Enhanced Transaction Webhooks
提供与你所监控地址相关的特定交易类型(例如 NFT 销售)的易读解析数据。如果你需要经过筛选且可直接采取行动的信息,这是理想选择。Raw Transaction Webhooks
此选项会提供涉及你所监控地址的所有交易的原始交易数据,但不支持按交易类型筛选。Raw Transaction Webhooks 无需解析事件类型,因此延迟更低。
Discord Webhooks
将特定交易类型的更新以格式化消息的形式直接流式发送到指定的 Discord 频道。要使用此选项,你必须提交 Discord Webhook URL。事件载荷示例
Enhanced
Enhanced
[
{
"accountData": [
{
"account": "CKs1E69a2e9TmH4mKKLrXFF8kD3ZnwKjoEuXa6sz9WqX",
"nativeBalanceChange": -72938049280,
"tokenBalanceChanges": []
},
{
"account": "NTYeYJ1wr4bpM5xo6zx5En44SvJFAd35zTxxNoERYqd",
"nativeBalanceChange": 0,
"tokenBalanceChanges": []
},
{
"account": "AAaTGaA3uVqikfVEwoSG7EwkCb4bBDsMEyueiVUS5CaU",
"nativeBalanceChange": 0,
"tokenBalanceChanges": []
},
{
"account": "autMW8SgBkVYeBgqYiTuJZnkvDZMVU2MHJh9Jh7CSQ2",
"nativeBalanceChange": 0,
"tokenBalanceChanges": []
},
{
"account": "D8TxfGwdu9MiNMoJmUoC9wQfNfNT7Lnm6DzifQHRTy6B",
"nativeBalanceChange": 0,
"tokenBalanceChanges": []
},
{
"account": "5DxD5ViWjvRZEkxQEaJHZw2sBsso6xoXx3wGFNKgXUzE",
"nativeBalanceChange": 71860273440,
"tokenBalanceChanges": []
},
{
"account": "25DTUAd1roBFoUQaxJQByL6Qy2cKQCBp4bK9sgfy9UiM",
"nativeBalanceChange": -2039280,
"tokenBalanceChanges": [
{
"mint": "FdsNQE5EeCe57tbEYCRV1JwW5dzNCof7MUTaGWhmzYqu",
"rawTokenAmount": {
"decimals": 0,
"tokenAmount": "-1"
},
"tokenAccount": "25DTUAd1roBFoUQaxJQByL6Qy2cKQCBp4bK9sgfy9UiM",
"userAccount": "1BWutmTvYPwDtmw9abTkS4Ssr8no61spGAvW1X6NDix"
}
]
},
{
"account": "DTYuh7gAGGZg2okM7hdFfU1yMY9LUemCiPyD5Z5GCs6Z",
"nativeBalanceChange": 2039280,
"tokenBalanceChanges": [
{
"mint": "FdsNQE5EeCe57tbEYCRV1JwW5dzNCof7MUTaGWhmzYqu",
"rawTokenAmount": {
"decimals": 0,
"tokenAmount": "1"
},
"tokenAccount": "DTYuh7gAGGZg2okM7hdFfU1yMY9LUemCiPyD5Z5GCs6Z",
"userAccount": "CKs1E69a2e9TmH4mKKLrXFF8kD3ZnwKjoEuXa6sz9WqX"
}
]
},
{
"account": "rFqFJ9g7TGBD8Ed7TPDnvGKZ5pWLPDyxLcvcH2eRCtt",
"nativeBalanceChange": 1080000000,
"tokenBalanceChanges": []
},
{
"account": "CgXS5xC3qAGSg9txD9bS7BUgugZwshivGXpCJcGmdwrd",
"nativeBalanceChange": -2234160,
"tokenBalanceChanges": []
},
{
"account": "M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K",
"nativeBalanceChange": 0,
"tokenBalanceChanges": []
},
{
"account": "E8cU1WiRWjanGxmn96ewBgk9vPTcL6AEZ1t6F6fkgUWe",
"nativeBalanceChange": 0,
"tokenBalanceChanges": []
},
{
"account": "11111111111111111111111111111111",
"nativeBalanceChange": 0,
"tokenBalanceChanges": []
},
{
"account": "FdsNQE5EeCe57tbEYCRV1JwW5dzNCof7MUTaGWhmzYqu",
"nativeBalanceChange": 0,
"tokenBalanceChanges": []
},
{
"account": "AYZsWahcrSnkwqbA1ji7wEzgAnGjLNJhVUMDPfACECZf",
"nativeBalanceChange": 0,
"tokenBalanceChanges": []
},
{
"account": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"nativeBalanceChange": 0,
"tokenBalanceChanges": []
},
{
"account": "SysvarRent111111111111111111111111111111111",
"nativeBalanceChange": 0,
"tokenBalanceChanges": []
},
{
"account": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL",
"nativeBalanceChange": 0,
"tokenBalanceChanges": []
},
{
"account": "1BWutmTvYPwDtmw9abTkS4Ssr8no61spGAvW1X6NDix",
"nativeBalanceChange": 0,
"tokenBalanceChanges": []
}
],
"description": "5DxD5ViWjvRZEkxQEaJHZw2sBsso6xoXx3wGFNKgXUzE sold Fox #7637 to CKs1E69a2e9TmH4mKKLrXFF8kD3ZnwKjoEuXa6sz9WqX for 72 SOL on MAGIC_EDEN.",
"events": {
"nft": {
"amount": 72000000000,
"buyer": "CKs1E69a2e9TmH4mKKLrXFF8kD3ZnwKjoEuXa6sz9WqX",
"description": "5DxD5ViWjvRZEkxQEaJHZw2sBsso6xoXx3wGFNKgXUzE sold Fox #7637 to CKs1E69a2e9TmH4mKKLrXFF8kD3ZnwKjoEuXa6sz9WqX for 72 SOL on MAGIC_EDEN.",
"fee": 10000,
"feePayer": "CKs1E69a2e9TmH4mKKLrXFF8kD3ZnwKjoEuXa6sz9WqX",
"nfts": [
{
"mint": "FdsNQE5EeCe57tbEYCRV1JwW5dzNCof7MUTaGWhmzYqu",
"tokenStandard": "NonFungible"
}
],
"saleType": "INSTANT_SALE",
"seller": "5DxD5ViWjvRZEkxQEaJHZw2sBsso6xoXx3wGFNKgXUzE",
"signature": "5nNtjezQMYBHvgSQmoRmJPiXGsPAWmJPoGSa64xanqrauogiVzFyGQhKeFataHGXq51jR2hjbzNTkPUpP787HAmL",
"slot": 171942732,
"source": "MAGIC_EDEN",
"staker": "",
"timestamp": 1673445241,
"type": "NFT_SALE"
}
},
"fee": 10000,
"feePayer": "CKs1E69a2e9TmH4mKKLrXFF8kD3ZnwKjoEuXa6sz9WqX",
"nativeTransfers": [
{
"amount": 72936000000,
"fromUserAccount": "CKs1E69a2e9TmH4mKKLrXFF8kD3ZnwKjoEuXa6sz9WqX",
"toUserAccount": "AAaTGaA3uVqikfVEwoSG7EwkCb4bBDsMEyueiVUS5CaU"
},
{
"amount": 2011440,
"fromUserAccount": "CKs1E69a2e9TmH4mKKLrXFF8kD3ZnwKjoEuXa6sz9WqX",
"toUserAccount": "D8TxfGwdu9MiNMoJmUoC9wQfNfNT7Lnm6DzifQHRTy6B"
},
{
"amount": 71856000000,
"fromUserAccount": "AAaTGaA3uVqikfVEwoSG7EwkCb4bBDsMEyueiVUS5CaU",
"toUserAccount": "5DxD5ViWjvRZEkxQEaJHZw2sBsso6xoXx3wGFNKgXUzE"
},
{
"amount": 1080000000,
"fromUserAccount": "AAaTGaA3uVqikfVEwoSG7EwkCb4bBDsMEyueiVUS5CaU",
"toUserAccount": "rFqFJ9g7TGBD8Ed7TPDnvGKZ5pWLPDyxLcvcH2eRCtt"
},
{
"amount": 2039280,
"fromUserAccount": "CKs1E69a2e9TmH4mKKLrXFF8kD3ZnwKjoEuXa6sz9WqX",
"toUserAccount": "DTYuh7gAGGZg2okM7hdFfU1yMY9LUemCiPyD5Z5GCs6Z"
}
],
"signature": "5nNtjezQMYBHvgSQmoRmJPiXGsPAWmJPoGSa64xanqrauogiVzFyGQhKeFataHGXq51jR2hjbzNTkPUpP787HAmL",
"slot": 171942732,
"source": "MAGIC_EDEN",
"timestamp": 1673445241,
"tokenTransfers": [
{
"fromTokenAccount": "25DTUAd1roBFoUQaxJQByL6Qy2cKQCBp4bK9sgfy9UiM",
"fromUserAccount": "1BWutmTvYPwDtmw9abTkS4Ssr8no61spGAvW1X6NDix",
"mint": "FdsNQE5EeCe57tbEYCRV1JwW5dzNCof7MUTaGWhmzYqu",
"toTokenAccount": "DTYuh7gAGGZg2okM7hdFfU1yMY9LUemCiPyD5Z5GCs6Z",
"toUserAccount": "CKs1E69a2e9TmH4mKKLrXFF8kD3ZnwKjoEuXa6sz9WqX",
"tokenAmount": 1,
"tokenStandard": "NonFungible"
}
],
"type": "NFT_SALE"
}
]
Raw
Raw
[
{
"blockTime": 1673445241,
"indexWithinBlock": 2557,
"meta": {
"err": null,
"fee": 10000,
"innerInstructions": [
{
"index": 0,
"instructions": [
{
"accounts": [
0,
2
],
"data": "3Bxs3zs3x6pg4XWo",
"programIdIndex": 12
}
]
},
{
"index": 1,
"instructions": [
{
"accounts": [
0,
4
],
"data": "11112nba6qLH4BKL4MW8GP9ayKApZeYn3LQKJdPdeSXbRW1n6UPeJ8y77ps6sAVwAjdxzh",
"programIdIndex": 12
}
]
},
{
"index": 2,
"instructions": [
{
"accounts": [
2,
5
],
"data": "3Bxs3zx147oWJQej",
"programIdIndex": 12
},
{
"accounts": [
2,
8
],
"data": "3Bxs3zwT1TGLhiT9",
"programIdIndex": 12
},
{
"accounts": [
0,
7,
0,
13,
12,
15
],
"data": "1",
"programIdIndex": 17
},
{
"accounts": [
13
],
"data": "84eT",
"programIdIndex": 15
},
{
"accounts": [
0,
7
],
"data": "11119os1e9qSs2u7TsThXqkBSRVFxhmYaFKFZ1waB2X7armDmvK3p5GmLdUxYdg3h7QSrL",
"programIdIndex": 12
},
{
"accounts": [
7
],
"data": "P",
"programIdIndex": 15
},
{
"accounts": [
7,
13
],
"data": "6YTZgAHgNKVRJ2mAHQUYC1DgXF6dPCgbSWA5P4gZoSfGV",
"programIdIndex": 15
},
{
"accounts": [
6,
7,
18
],
"data": "3DdGGhkhJbjm",
"programIdIndex": 15
},
{
"accounts": [
6,
5,
18
],
"data": "A",
"programIdIndex": 15
}
]
}
],
"loadedAddresses": {
"readonly": [],
"writable": []
},
"logMessages": [
"Program M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K invoke [1]",
"Program log: Instruction: Deposit",
"Program 11111111111111111111111111111111 invoke [2]",
"Program 11111111111111111111111111111111 success",
"Program M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K consumed 10148 of 600000 compute units",
"Program M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K success",
"Program M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K invoke [1]",
"Program log: Instruction: Buy",
"Program 11111111111111111111111111111111 invoke [2]",
"Program 11111111111111111111111111111111 success",
"Program log: {\"price\":72000000000,\"buyer_expiry\":0}",
"Program M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K consumed 30501 of 589852 compute units",
"Program M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K success",
"Program M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K invoke [1]",
"Program log: Instruction: ExecuteSaleV2",
"Program 11111111111111111111111111111111 invoke [2]",
"Program 11111111111111111111111111111111 success",
"Program 11111111111111111111111111111111 invoke [2]",
"Program 11111111111111111111111111111111 success",
"Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL invoke [2]",
"Program log: Create",
"Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [3]",
"Program log: Instruction: GetAccountDataSize",
"Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1622 of 497733 compute units",
"Program return: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA pQAAAAAAAAA=",
"Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success",
"Program 11111111111111111111111111111111 invoke [3]",
"Program 11111111111111111111111111111111 success",
"Program log: Initialize the associated token account",
"Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [3]",
"Program log: Instruction: InitializeImmutableOwner",
"Program log: Please upgrade to SPL Token 2022 for immutable owner support",
"Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1405 of 491243 compute units",
"Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success",
"Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [3]",
"Program log: Instruction: InitializeAccount3",
"Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4241 of 487361 compute units",
"Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success",
"Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL consumed 21793 of 504630 compute units",
"Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL success",
"Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]",
"Program log: Instruction: Transfer",
"Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4645 of 475696 compute units",
"Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success",
"Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]",
"Program log: Instruction: CloseAccount",
"Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 3033 of 456654 compute units",
"Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success",
"Program log: {\"price\":72000000000,\"seller_expiry\":-1,\"buyer_expiry\":0}",
"Program M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K consumed 109266 of 559351 compute units",
"Program M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K success"
],
"postBalances": [
371980779080,
0,
0,
100129388687,
0,
81872924494,
0,
2039280,
993583055919,
0,
1141440,
3654000,
1,
1461600,
5616720,
934087680,
1009200,
731913600,
457953014766
],
"postTokenBalances": [
{
"accountIndex": 7,
"mint": "FdsNQE5EeCe57tbEYCRV1JwW5dzNCof7MUTaGWhmzYqu",
"owner": "CKs1E69a2e9TmH4mKKLrXFF8kD3ZnwKjoEuXa6sz9WqX",
"programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"uiTokenAmount": {
"amount": "1",
"decimals": 0,
"uiAmount": 1,
"uiAmountString": "1"
}
}
],
"preBalances": [
444918828360,
0,
0,
100129388687,
0,
10012651054,
2039280,
0,
992503055919,
2234160,
1141440,
3654000,
1,
1461600,
5616720,
934087680,
1009200,
731913600,
457953014766
],
"preTokenBalances": [
{
"accountIndex": 6,
"mint": "FdsNQE5EeCe57tbEYCRV1JwW5dzNCof7MUTaGWhmzYqu",
"owner": "1BWutmTvYPwDtmw9abTkS4Ssr8no61spGAvW1X6NDix",
"programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"uiTokenAmount": {
"amount": "1",
"decimals": 0,
"uiAmount": 1,
"uiAmountString": "1"
}
}
],
"rewards": []
},
"slot": 171942732,
"transaction": {
"message": {
"accountKeys": [
"CKs1E69a2e9TmH4mKKLrXFF8kD3ZnwKjoEuXa6sz9WqX",
"NTYeYJ1wr4bpM5xo6zx5En44SvJFAd35zTxxNoERYqd",
"AAaTGaA3uVqikfVEwoSG7EwkCb4bBDsMEyueiVUS5CaU",
"autMW8SgBkVYeBgqYiTuJZnkvDZMVU2MHJh9Jh7CSQ2",
"D8TxfGwdu9MiNMoJmUoC9wQfNfNT7Lnm6DzifQHRTy6B",
"5DxD5ViWjvRZEkxQEaJHZw2sBsso6xoXx3wGFNKgXUzE",
"25DTUAd1roBFoUQaxJQByL6Qy2cKQCBp4bK9sgfy9UiM",
"DTYuh7gAGGZg2okM7hdFfU1yMY9LUemCiPyD5Z5GCs6Z",
"rFqFJ9g7TGBD8Ed7TPDnvGKZ5pWLPDyxLcvcH2eRCtt",
"CgXS5xC3qAGSg9txD9bS7BUgugZwshivGXpCJcGmdwrd",
"M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K",
"E8cU1WiRWjanGxmn96ewBgk9vPTcL6AEZ1t6F6fkgUWe",
"11111111111111111111111111111111",
"FdsNQE5EeCe57tbEYCRV1JwW5dzNCof7MUTaGWhmzYqu",
"AYZsWahcrSnkwqbA1ji7wEzgAnGjLNJhVUMDPfACECZf",
"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"SysvarRent111111111111111111111111111111111",
"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL",
"1BWutmTvYPwDtmw9abTkS4Ssr8no61spGAvW1X6NDix"
],
"addressTableLookups": null,
"header": {
"numReadonlySignedAccounts": 1,
"numReadonlyUnsignedAccounts": 9,
"numRequiredSignatures": 2
},
"instructions": [
{
"accounts": [
0,
1,
2,
3,
11,
12
],
"data": "3GyWrkssW12wSfxjTynBnbif",
"programIdIndex": 10
},
{
"accounts": [
0,
1,
13,
14,
2,
3,
11,
4,
3,
15,
12,
16
],
"data": "3Jmjmsq2jyrch5iz612vBLZCRB498owPe7qezQVetRZhiMu",
"programIdIndex": 10
},
{
"accounts": [
0,
5,
1,
6,
13,
14,
2,
7,
3,
11,
8,
4,
3,
9,
3,
15,
12,
17,
18,
16
],
"data": "B2rqPwAgvj3t35y6HpdumfhdhsZMLNFLmXMC9Uz2HX4nNAwirTk3o98vTazFB1y",
"programIdIndex": 10
}
],
"recentBlockhash": "3NRncb7FJuDruQjMDxnHvJBQkvkHa7KSUBqBsxG21roZ"
},
"signatures": [
"5nNtjezQMYBHvgSQmoRmJPiXGsPAWmJPoGSa64xanqrauogiVzFyGQhKeFataHGXq51jR2hjbzNTkPUpP787HAmL",
"4dWBkbLHGvU2jw9Sjj6YETtKfaVKAAN1M8aWzXRNC4aHBckUzM73n3FddNbWTtfUvkU2vFRQ7bKHMwKZQ5dGy1iH"
]
}
}
]
开始使用
Webhooks Quickstart
通过控制面板、REST API 或官方 TypeScript / Rust SDK 创建你的第一个 Webhook。
自动禁用投递失败的 Webhook
Helius 会监控 Webhook 端点的运行状况,并自动禁用持续接收投递失败的 Webhook。这可以避免继续尝试向无法访问或发生故障的端点投递,从而造成浪费。工作原理
- **付费套餐(Dev 及以上):**如果 Webhook 在 7 天内的失败率 ≥ 95%,系统将自动禁用它。
- **免费套餐:**系统会在 24 小时的时间窗口内评估 Webhook,并采用相同的失败率阈值。
电子邮件通知
使用 Dev 及以上套餐的用户会在 Webhook 被自动禁用时收到电子邮件通知。重新启用已禁用的 Webhook
1
Fix your endpoint
解决导致投递失败的问题(例如服务器停机、URL 不正确或端点错误)。
2
Log in to the Helius Dashboard
前往 Helius 控制面板。
3
Re-enable the webhook
找到已禁用的 Webhook,然后将其重新开启。
重新启用后,Webhook 将进入 24 小时宽限期,在此期间不会再次被自动禁用。这让你有时间确认端点运行正常。
使用示例
机器人
- 当某个 NFT 在市场 X 上架时,触发“NFT 购买”操作。
- 当某个保证金头寸状况不健康时,触发“清算”操作。
监控和警报
- 当程序发出特定日志时,触发 PagerDuty 集成。
- 当代币账户余额的变动超过 X% 时,使用 Dialect 发出警告。
事件驱动型索引
- 当指定程序发生任何交易时,将其直接发送到你的数据库或后端。
通知和活动跟踪
- 从钱包 X 向钱包 Y 转账时,发送 Slack 通知或电子邮件。
分析和日志
- 当事件 X 发生时,将其发送到 ETL 流水线,或直接将其持久化到 Helius,以查看长期趋势。
工作流自动化
- 当事件 X 发生时,触发任意一组操作。