余额告急?用API秒查加密货币账户余额!

API 查余额:加密货币世界的数据之眼

在加密货币世界中,掌握账户余额是至关重要的。无论是交易、投资,还是简单地监控资产,了解账户中的加密货币数量都是一切行动的基础。幸运的是,有了应用程序编程接口 (API),这个过程变得自动化且高效。API 查余额允许开发者和用户通过程序化的方式访问和获取加密货币账户的信息,而无需手动登录交易所或钱包。

什么是 API?

API(应用程序编程接口)本质上是不同软件系统之间进行沟通的桥梁,它犹如一套预先定义好的协议,使得各种应用程序能够以结构化的方式相互通信并安全地交换数据。API 并非单一的技术,而是一组规范、函数、协议和工具的集合,用于构建软件和应用程序。它允许开发者在无需了解底层实现细节的情况下,利用其他软件系统的功能。

在加密货币领域,API 扮演着至关重要的角色。它提供了一种标准化的、程序化的方式来访问各种加密货币服务,例如交易所、钱包、区块浏览器、以及其他相关服务的数据。开发者可以使用 API 来构建各种应用,例如:

  • 交易机器人: 自动化交易策略,根据市场行情自动买卖加密货币。
  • 投资组合跟踪器: 实时监控您的加密货币投资组合的表现。
  • 数据分析工具: 分析历史市场数据,以便更好地了解加密货币趋势。
  • 支付网关: 将加密货币支付集成到电子商务平台中。

通过 API,你可以向加密货币交易所或其他服务提供商发出特定请求,并获得结构化的响应。这些请求可能包括:

  • 获取账户余额: 查询特定加密货币账户的可用余额。
  • 查看交易历史记录: 获取账户的交易记录,包括买入、卖出、转账等。
  • 获取市场价格: 查询特定加密货币的实时价格和历史价格数据。
  • 下单交易: 下达买入或卖出特定加密货币的订单。
  • 查询订单状态: 查询特定订单的状态,例如是否已成交、部分成交或已取消。

简而言之,API 为开发者提供了一个强大且灵活的工具,可以轻松地访问和利用加密货币领域的数据和服务,从而构建各种创新应用。

API 查余额的工作原理

API 查余额是加密货币应用开发中的一个常见需求,它允许用户通过编程方式查询特定账户或钱包的余额。这个过程通常涉及以下几个关键步骤:

  1. 获取 API 密钥: 开发者需要从提供 API 服务的平台(例如加密货币交易所、钱包提供商或区块链浏览器)获取 API 密钥。这个密钥是访问 API 的凭证,类似于一个身份验证的通行证。平台会根据密钥对请求进行身份验证和授权。不同平台提供的 API 密钥类型可能不同,例如,有些是公开密钥和私有密钥对,有些则是简单的 API 密钥。开发者需要妥善保管自己的 API 密钥,防止泄露,因为密钥泄露可能导致资金损失或数据泄露。部分 API 还需要进行 IP 白名单设置,限制 API 密钥的使用来源,进一步增强安全性。
  2. 构建 API 请求: 接下来,开发者需要构建一个符合 API 规范的 HTTP 请求,指定要查询的信息。对于查余额,这通常涉及到使用特定的 API 端点(Endpoint)和参数。API 端点是服务器上提供特定服务的 URL。例如,可能需要指定账户的地址(Address)、账户 ID(Account ID)、币种(Currency)类型等参数。请求方法通常是 GET 或 POST,具体取决于 API 的设计。构建 API 请求时,需要仔细阅读 API 文档,了解每个参数的含义和要求。还需要考虑请求的速率限制(Rate Limit),避免因请求过于频繁而被 API 提供商限制访问。
  3. 发送 API 请求: 使用编程语言(例如 Python、JavaScript、Go 或 PHP)和 HTTP 客户端库(例如 Python 的 `requests` 库,JavaScript 的 `fetch` API 或 Axios 库),开发者可以将构建好的 API 请求发送到服务器。发送请求时,需要设置合适的 HTTP 头(Headers),例如 `Content-Type` 和 `Authorization`。`Content-Type` 指定请求体的类型,通常设置为 `application/`。`Authorization` 用于传递 API 密钥,通常以 Bearer Token 的形式传递。发送 API 请求时,还需要处理可能出现的网络错误,例如连接超时、DNS 解析失败等。
  4. 接收 API 响应: 服务器在接收到 API 请求后,会进行处理,并将结果以 HTTP 响应的形式返回给客户端。响应通常是 JSON 格式,包含开发者请求的信息,例如账户余额(Balance)、可用余额(Available Balance)、冻结余额(Frozen Balance)等。响应还可能包含错误信息,例如无效的 API 密钥、参数错误等。HTTP 响应包含状态码(Status Code),例如 200 表示成功,400 表示请求错误,500 表示服务器错误。开发者需要根据状态码判断请求是否成功。
  5. 解析 API 响应: 开发者需要解析 JSON 响应,提取所需的余额信息,并在应用程序中使用。JSON 解析库(例如 Python 的 `` 库,JavaScript 的 `JSON.parse()` 方法)可以将 JSON 字符串转换为编程语言中的数据结构,例如字典或对象。提取余额信息时,需要注意数据类型,例如余额可能是字符串或数字。如果余额是字符串,可能需要将其转换为数字类型进行计算。还需要处理可能出现的异常情况,例如 JSON 格式错误、缺少字段等。提取的余额信息可以用于显示用户的账户余额,进行交易验证,或者进行其他相关的业务逻辑处理。

不同类型的 API 查余额

查询加密货币余额的API根据底层架构、安全模型以及数据来源的不同,呈现出多种形态。选择合适的API类型取决于具体需求,包括所需精度、安全级别、以及可接受的延迟。

  • 交易所 API: 加密货币交易所为了方便用户管理账户,通常会提供一套完善的API接口,允许用户通过程序化方式查询其在交易所账户中的各类资产余额,包括现货账户、合约账户等。这些API接口的设计通常遵循RESTful原则或GraphQL,并需要通过API密钥进行身份验证,以确保账户安全。为了防止恶意攻击和资源滥用,交易所通常会对API调用频率设置速率限制,即限制特定时间内允许的请求次数。交易所API能够提供实时的交易数据和账户信息,但需注意API密钥的安全保管,防止泄露导致资产损失。不同的交易所API在数据格式、身份验证方式、以及速率限制策略上可能存在差异,开发者需仔细阅读相关文档。
  • 钱包 API: 加密货币钱包,无论是软件钱包还是硬件钱包,有些也会提供API接口,允许用户查询其钱包地址中的加密货币余额。这类API通常需要用户显式授权第三方应用程序访问其钱包数据,以保障用户的隐私和资产安全。钱包API可以分为托管钱包API和非托管钱包API。托管钱包API由钱包服务商提供,用户无需管理私钥,但需信任服务商的安全性。非托管钱包API则允许用户通过程序化方式与区块链进行交互,但需要用户自行管理私钥,并承担相应的安全风险。使用钱包API进行余额查询时,需注意选择信誉良好的钱包提供商,并仔细阅读相关API文档,了解授权范围和数据安全措施。
  • 区块链浏览器 API: 区块链浏览器作为一种公开透明的区块链数据查询工具,也提供了API接口,允许用户在无需登录交易所或钱包的情况下,通过提供账户地址,查询该地址在特定区块链上的余额。这类API通常是免费开放的,但可能存在数据延迟,因为区块链浏览器需要同步区块链数据。区块链浏览器API的优势在于无需用户提供任何身份验证信息,即可查询公开的区块链数据,但缺点是无法查询交易所或托管钱包中的余额,只能查询链上地址的余额。对于隐私敏感的用户,可以使用专门的隐私区块链浏览器API,这类API会对用户的查询请求进行匿名化处理,以保护用户的隐私。不同的区块链浏览器API在数据覆盖范围、数据更新频率、以及API调用方式上可能存在差异,开发者需根据实际需求进行选择。

使用 API 查询余额的优势

在加密货币领域,使用应用程序编程接口 (API) 查询账户余额相较于传统方式具有显著优势。API 提供了一种程序化的方式来访问交易所、钱包或其他加密货币服务的数据,从而实现自动化、实时性、集成性、效率和安全性。

  • 自动化: API 允许开发者编写脚本或应用程序,自动定期或按需查询余额。这消除了手动登录各个平台并检查余额的繁琐过程,尤其是在管理多个账户时。通过自动化,用户可以节省时间和精力,并避免人为错误。例如,可以设置一个程序,每天自动记录所有账户的余额,并生成报告。
  • 实时数据: API 提供近乎实时的余额信息,确保用户始终掌握最新的账户状态。这种实时性对于快速做出交易决策至关重要,尤其是在波动性极高的加密货币市场。与需要手动刷新的网页界面不同,API 可以持续提供最新的数据。
  • 集成: API 可以无缝集成到各种应用程序中,例如交易机器人、投资组合管理工具、税务报告软件或支付系统。这种集成性允许开发者构建定制化的解决方案,以满足特定需求。例如,可以将 API 集成到交易机器人中,以便根据账户余额自动执行交易。或者,可以将 API 集成到投资组合管理工具中,以便实时跟踪资产价值。
  • 效率: API 是一种高效的数据获取方式,尤其是在需要查询大量账户余额或历史数据时。API 允许开发者一次性请求多个账户的信息,而无需逐个查询。这种效率对于需要处理大量数据的应用程序至关重要。例如,一个加密货币税务软件可以使用 API 来快速获取用户的交易历史记录和余额信息,以便计算税款。
  • 安全性: 只要用户妥善保管 API 密钥并遵循最佳安全实践,API 提供了一种安全的账户信息访问方式。API 密钥就像密码一样,应严格保密,并定期更换。应限制 API 密钥的权限,使其只能访问必要的数据。尽管存在潜在的安全风险,但通过采取适当的安全措施,API 可以提供一种比手动登录更安全的方式来访问账户信息。双因素认证和IP白名单是两种常见的安全措施。

安全注意事项

在使用 API 查询余额时,安全性至关重要,尤其是在涉及敏感财务数据时。以下是一些需要严格遵守的安全最佳实践:

  • 保护 API 密钥: API 密钥是访问账户和数据的凭证,必须像密码一样保护。绝对不要将 API 密钥以明文形式存储在代码中或提交到版本控制系统。不要将它们泄露给任何人。将它们存储在安全的地方,例如服务器端的环境变量、加密的配置文件、专门的密钥管理系统(例如 HashiCorp Vault)或硬件安全模块 (HSM)。采用访问控制策略,确保只有授权的用户和应用程序才能访问这些密钥。
  • 使用 HTTPS: 始终使用 HTTPS(HTTP Secure)协议来发送 API 请求。HTTPS 通过 TLS/SSL 加密在客户端和服务器之间传输的数据,防止中间人攻击和数据窃听。确保你的 API 客户端配置正确,强制使用 HTTPS 连接,并且验证服务器的 SSL 证书。避免使用 HTTP 协议发送任何敏感数据。
  • 验证 API 响应: 验证 API 响应的来源和完整性。检查响应头中的签名或其他安全机制,以确认数据确实来自可信赖的服务器,并且没有被篡改。实施数据验证,确保响应数据符合预期格式和类型,防止恶意数据注入攻击。注意时间戳,防止重放攻击。
  • 限制 API 权限: 如果 API 平台提供权限控制功能,则应限制 API 密钥的权限,只允许访问应用程序或服务真正需要的信息。采用最小权限原则,避免授予不必要的权限,降低潜在的安全风险。例如,如果只需要查询余额,则不要授予提款或交易权限。
  • 定期轮换 API 密钥: 定期轮换 API 密钥是防止密钥泄露造成的风险的重要措施。即使密钥没有被泄露,也应定期更换,以降低长期风险。实施自动化的密钥轮换机制,并确保旧密钥在轮换后被安全地销毁。监控密钥的使用情况,及时发现异常活动。

示例:使用 Python 和 Coinbase API 查询账户余额

以下是一个使用 Python 编程语言和 Coinbase API 查询账户余额的示例代码。 该示例展示了如何利用 Coinbase 提供的 API 接口,通过编程方式访问您的 Coinbase 账户,并获取账户中的可用余额信息。 使用 API 密钥和访问令牌进行身份验证,可以安全地从您的 Coinbase 账户检索数据。

为了成功运行此示例,您需要先安装 requests 库,此库用于发送 HTTP 请求。 您还需要一个有效的 Coinbase API 密钥和 API Secret。 这些凭据可以通过 Coinbase 开发者平台获取。 请务必妥善保管您的 API 密钥和 Secret,避免泄露,因为它们可以用来访问您的账户。


import requests
import 

# 替换为您的 Coinbase API 密钥和 Secret
API_KEY = "YOUR_API_KEY"
API_SECRET = "YOUR_API_SECRET"

# Coinbase API 端点
API_ENDPOINT = "https://api.coinbase.com/v2"

def get_accounts():
    """
    获取所有 Coinbase 账户信息。
    """
    url = f"{API_ENDPOINT}/accounts"
    headers = {
        "Content-Type": "application/",
        "CB-ACCESS-KEY": API_KEY,
        "CB-ACCESS-SIGN": generate_signature("GET", "/v2/accounts"),
        "CB-ACCESS-TIMESTAMP": str(int(time.time()))
    }
    response = requests.get(url, headers=headers)

    if response.status_code == 200:
        return response.()
    else:
        print(f"Error fetching accounts: {response.status_code} - {response.text}")
        return None

def get_account_balance(account_id):
    """
    获取指定 Coinbase 账户的余额。

    Args:
        account_id (str): Coinbase 账户 ID.
    """
    url = f"{API_ENDPOINT}/accounts/{account_id}"
    headers = {
        "Content-Type": "application/",
        "CB-ACCESS-KEY": API_KEY,
        "CB-ACCESS-SIGN": generate_signature("GET", f"/v2/accounts/{account_id}"),
        "CB-ACCESS-TIMESTAMP": str(int(time.time()))
    }

    response = requests.get(url, headers=headers)

    if response.status_code == 200:
        account_data = response.()
        return account_data['data']['balance']
    else:
        print(f"Error fetching account balance: {response.status_code} - {response.text}")
        return None

def generate_signature(method, request_path, body=''):
    """
    生成 Coinbase API 请求签名。
    """
    import hmac
    import hashlib
    import time
    message = str(int(time.time())) + method + request_path + body
    hmac_obj = hmac.new(API_SECRET.encode('utf-8'), message.encode('utf-8'), hashlib.sha256)
    return hmac_obj.hexdigest()

if __name__ == "__main__":
    import time
    accounts = get_accounts()
    if accounts:
        for account in accounts['data']:
            account_id = account['id']
            account_name = account['name']
            balance = get_account_balance(account_id)
            if balance:
                print(f"账户名称: {account_name}, 账户ID: {account_id}, 余额: {balance['amount']} {balance['currency']}")
            else:
                print(f"无法获取账户 {account_name} ({account_id}) 的余额")
    else:
        print("无法获取账户列表")

代码解释:

  • API_KEY API_SECRET : 您需要替换为您的实际 Coinbase API 密钥和 Secret。请务必妥善保管这些凭据。
  • API_ENDPOINT :定义了 Coinbase API 的基础 URL。
  • get_accounts() 函数:此函数调用 Coinbase API 获取您的所有账户信息,包括账户 ID、名称和可用余额。
  • get_account_balance(account_id) 函数:接收一个账户 ID 作为参数,并调用 Coinbase API 获取该特定账户的余额。
  • generate_signature(method, request_path, body='') 函数:生成 Coinbase API 要求的请求签名。 签名用于验证请求的完整性和真实性。
  • 主程序:首先调用 get_accounts() 获取所有账户,然后循环遍历每个账户,调用 get_account_balance() 获取余额,并将结果打印到控制台。

注意事项:

  • 在运行此代码之前,请确保您已经安装了 requests 库。 您可以使用 pip install requests 命令进行安装。
  • 请仔细阅读 Coinbase API 的文档,了解速率限制和其他使用条款。
  • 此示例仅用于演示目的。 在生产环境中使用 API 时,请务必采取适当的安全措施。

Coinbase API 密钥和密钥

在使用 Coinbase API 进行交易和数据访问时,必须配置 API 密钥和密钥。这两个凭证用于验证您的身份并授权您的应用程序访问您的 Coinbase 账户。

api_key = "YOUR_API_KEY"

api_key 是一个公钥,类似于用户名。它标识您的应用程序或账户。您可以在 Coinbase 开发者平台上生成并管理您的 API 密钥。请务必妥善保管您的 API 密钥,因为它可能会被滥用。

api_secret = "YOUR_API_SECRET"

api_secret 是一个私钥,类似于密码。它与 api_key 配合使用,用于验证您的请求。 api_secret 必须严格保密,切勿泄露给任何人或存储在不安全的地方。泄露 api_secret 可能会导致您的 Coinbase 账户被盗用。

请将 "YOUR_API_KEY" "YOUR_API_SECRET" 替换为您从 Coinbase 开发者平台获得的实际 API 密钥和密钥。 请注意,出于安全考虑,实际的 API 密钥和密钥不应直接硬编码到代码中,而应通过环境变量或配置文件等方式进行管理。

Coinbase API 账户端点

Coinbase API 提供多种端点用于访问和管理用户的账户信息。其中,用于获取账户列表的基础 API URL 为: https://api.coinbase.com/v2/accounts

该端点允许开发者检索与特定 Coinbase 用户关联的所有账户的信息。账户类型包括但不限于:比特币 (BTC) 钱包、以太坊 (ETH) 钱包以及其他支持的加密货币钱包。响应数据通常包含每个账户的唯一 ID、账户名称、货币类型、当前余额等详细信息。

为了成功调用此 API 端点,开发者需要有效的 API 密钥和适当的权限。请求头中需要包含授权信息,通常是通过 OAuth 2.0 协议进行身份验证。未授权的请求将被拒绝。

该端点还支持分页功能,允许开发者以分批方式检索大量账户数据。通过使用 limit starting_after 等查询参数,可以控制每次请求返回的账户数量,并指定起始位置。

除了列出账户,Coinbase API 还提供了其他与账户相关的端点,例如:创建新账户、获取特定账户的详细信息、以及进行资金转账等操作。开发者应参考官方文档以获取完整的 API 规范和使用指南。

设置请求头

在与加密货币交易所或API交互时,设置正确的请求头至关重要,它能确保你的请求被正确地处理和授权。以下是一个示例,展示了如何构建一个包含必要信息的请求头:

headers = {

"Content-Type": "application/",

"CB-ACCESS-KEY": api_key,

"CB-ACCESS-SIGN": api_secret,

"CB-ACCESS-TIMESTAMP": str(int(time.time())), # 确保时间戳与服务器时间同步

"CB-VERSION": "YYYY-MM-DD" # 替换为当前日期, 例如 "2024-01-01"

}

详细解释:

  • Content-Type: application/ :指定请求体的格式为JSON。大多数加密货币API都使用JSON格式来交换数据。如果API要求其他格式(例如 application/x-www-form-urlencoded ),则需要相应地修改此值。

  • CB-ACCESS-KEY :这是你的API密钥。它用于标识你的身份,类似于用户名。请妥善保管你的API密钥,避免泄露。

  • CB-ACCESS-SIGN :这是请求的签名,用于验证请求的完整性和真实性。通常,签名是基于API密钥、API密钥、时间戳和请求体等参数生成的哈希值。具体的签名算法和参数取决于API提供商的要求。

  • CB-ACCESS-TIMESTAMP :这是请求的时间戳,用于防止重放攻击。时间戳表示请求发送的时间。确保时间戳与服务器时间同步非常重要,否则请求可能会被拒绝。通常,允许的误差范围很小(例如,几秒钟)。可以使用 time.time() 获取当前时间戳,并将其转换为整数。

  • CB-VERSION :这是API的版本号。API提供商可能会发布不同版本的API,每个版本可能具有不同的功能和接口。指定API版本可以确保你的请求与API的预期行为匹配。请查阅API文档以获取最新的API版本号,并按照 YYYY-MM-DD 格式填写,例如 "2024-01-01"

注意事项:

  • 不同的加密货币交易所或API可能需要不同的请求头。请务必查阅API文档,了解所需的请求头及其格式。

  • API密钥和API密钥是敏感信息,请妥善保管。不要将它们存储在公共代码库中,也不要将其泄露给他人。

  • 在生产环境中,建议使用更安全的方式来管理API密钥和API密钥,例如使用环境变量或密钥管理服务。

  • 某些API可能还需要其他请求头,例如 User-Agent ,用于标识你的应用程序。你可以根据需要添加其他请求头。

  • 务必仔细阅读交易所或者API的官方文档,理解每个Header的具体作用,以及值的格式要求,有些交易所对时间戳的精度有要求,需要是毫秒级别而不是秒级别。

发送 API 请求

使用 Python 的 requests 库向指定的 API 端点发送 GET 请求,并包含必要的请求头信息。 headers 变量通常包含诸如 API 密钥或授权令牌等认证信息,确保能够安全地访问 API 资源。

import requests
import 

api_url = "YOUR_API_ENDPOINT" # 替换为实际的 API 端点
headers = {
    "Authorization": "Bearer YOUR_API_KEY",  # 替换为实际的 API 密钥
    "Content-Type": "application/"  # 指定内容类型为 JSON
}

try:
    response = requests.get(api_url, headers=headers)
    response.raise_for_status()   # 检查 HTTP 状态码,如果状态码表示错误(4xx 或 5xx),则抛出异常

    # 解析 JSON 响应
    data = response.()

    # 打印账户信息
    for account in data["data"]:
        print(f"账户名称: {account['name']}")
        print(f"账户类型: {account['type']}") # 假设API返回账户类型信息
        print(f"账户ID: {account['id']}") # 假设API返回账户ID信息
        print(f"账户余额: {account['balance']['amount']} {account['balance']['currency']}")
        print("-" * 20)

except requests.exceptions.RequestException as e:
    print(f"API 请求错误: {e}") # 网络连接错误、超时等
except .JSONDecodeError as e:
    print(f"JSON 解析错误: {e}") # API 响应不是有效的 JSON 格式
except KeyError as e:
    print(f"KeyError: {e} - 确保 API 响应结构正确, 检查响应字段是否存在") # 访问了不存在的键
except TypeError as e:
    print(f"TypeError: {e} - 数据类型错误,检查数据类型是否符合预期") #API返回的数据类型不符合预期
except Exception as e:
    print(f"其他错误: {e}") # 捕获其他未知异常

这段代码展示了如何通过 requests 库发送 API 请求并处理可能出现的各种异常。 使用 try...except 块捕获并处理不同类型的错误,包括网络请求错误、JSON 解析错误、键错误和类型错误,保证程序的健壮性。 务必替换 YOUR_API_ENDPOINT YOUR_API_KEY 为实际的 API 端点和密钥。

请注意:

  • 你需要将 YOUR_API_KEY YOUR_API_SECRET 替换为你自己的 Coinbase API 密钥和密钥。务必妥善保管你的API密钥,因为它们能够访问你的账户信息并执行交易。泄露API密钥可能导致资金损失或账户被盗用。
  • 在实际使用中,你应该使用更安全的存储 API 密钥的方式,例如使用环境变量或密钥管理系统。直接在代码中硬编码API密钥是极其不安全的做法。考虑使用专门为安全存储敏感信息设计的工具和服务,例如 HashiCorp Vault 或 AWS Secrets Manager。
  • CB-ACCESS-SIGN 的生成还需要使用密钥进行哈希,具体方法请参考Coinbase API文档。此处只是简化示例。生成签名需要将请求的特定部分(例如时间戳、请求方法、请求路径和请求主体)与你的API密钥进行哈希计算。请务必查阅Coinbase API文档,了解正确的签名算法和要求。 错误的签名会导致请求被拒绝。
  • CB-VERSION 是 Coinbase API 要求的版本号,需要设置为具体日期,例如 "2024-01-01"。API的版本号会影响请求的处理方式和响应格式。请始终使用最新的稳定版本,并定期检查Coinbase API文档以了解任何版本更新和弃用信息。不正确的版本号可能导致请求失败或返回不兼容的数据。

这个示例只是一个简单的例子,你可以根据你的需要进行修改。例如,可以增加错误处理,或者将余额信息存储到数据库中。 添加错误处理机制可以帮助你更好地诊断和解决问题,例如网络连接错误、API速率限制或服务器端错误。将余额信息存储到数据库可以让你跟踪账户历史记录并执行更复杂的分析。 考虑使用异步编程技术来提高应用程序的性能和响应能力,尤其是在处理多个API请求时。 确保你的应用程序符合Coinbase API的使用条款和条件,并遵守所有相关的法律法规。

API 查余额是加密货币世界中一个强大的工具,可以帮助你自动化账户余额查询,并将其集成到你的应用程序中。 了解 API 的工作原理,并采取必要的安全措施,可以让你安全高效地管理你的加密货币资产。 通过利用 API 的力量,你可以更好地掌握你的加密货币财务状况。

本文章为原创、翻译或编译,转载请注明来自 币新知