mcpField
M
margin-trading

margin-trading

github.com/binance其他1.1k1.9k 次安装2 天前更新
代码仓库

关于 margin-trading

面向 Binance 保证金交易的 Agent 技能,涵盖账户、借贷、订单及资金流查询与操作。部分接口需 API 凭证,结果以 JSON 返回。

主要功能

  1. 01查询保证金账户与费用数据
  2. 02借入、偿还及查询记录
  3. 03创建、查询和取消订单
  4. 04管理逐仓账户及杠杆
  5. 05查看资金流、利息与清算记录

适用场景

  1. 01检查全仓或逐仓账户状态
  2. 02执行保证金借款或还款
  3. 03提交或取消保证金订单

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/binance/binance-skills-hub --skill margin-trading

安装后在 Claude Code 中输入/margin-trading确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

CHANGELOG.md
LICENSE.md
references/
authentication.md

详细介绍

Binance 保证金交易 Skill

使用经过身份验证的 API 端点在 Binance 上进行保证金交易请求。某些端点需要 API 密钥和密钥。以 JSON 格式返回结果。

快速参考

端点描述必填可选身份验证
/sapi/v1/margin/max-leverage (POST)调整全仓保证金最大杠杆(USER_DATA)maxLeverage无是
/sapi/v1/margin/isolated/account (DELETE)禁用逐仓保证金账户(TRADE)symbolrecvWindow是
/sapi/v1/margin/isolated/account (POST)启用逐仓保证金账户(TRADE)symbolrecvWindow是
/sapi/v1/margin/isolated/account (GET)查询逐仓保证金账户信息(USER_DATA)无symbols, recvWindow是
/sapi/v1/bnbBurn (GET)获取 BNB 销毁状态(USER_DATA)无recvWindow是
/sapi/v1/margin/tradeCoeff (GET)获取保证金账户摘要(USER_DATA)无recvWindow是
/sapi/v1/margin/capital-flow (GET)查询全仓及逐仓保证金资金流(USER_DATA)无asset, symbol, type, startTime, endTime, fromId, limit, recvWindow是
/sapi/v1/margin/account (GET)查询全仓保证金账户详情(USER_DATA)无recvWindow是
/sapi/v1/margin/crossMarginData (GET)查询全仓保证金费率数据(USER_DATA)无vipLevel, coin, recvWindow是
/sapi/v1/margin/isolated/accountLimit (GET)查询已启用的逐仓保证金账户数量限制(USER_DATA)无recvWindow是
/sapi/v1/margin/isolatedMarginData (GET)查询逐仓保证金费率数据(USER_DATA)无vipLevel, symbol, recvWindow是
/sapi/v1/margin/interestHistory (GET)获取利息历史记录(USER_DATA)无asset, isolatedSymbol, startTime, endTime, current, size, recvWindow是
/sapi/v1/margin/next-hourly-interest-rate (GET)获取未来每小时利率(USER_DATA)assets, isIsolated无是
/sapi/v1/margin/borrow-repay (POST)保证金账户借款/还款(MARGIN)asset, isIsolated, symbol, amount, typerecvWindow是
/sapi/v1/margin/borrow-repay (GET)查询保证金账户借款/还款记录(USER_DATA)typeasset, isolatedSymbol, txId, startTime, endTime, current, size, recvWindow是
/sapi/v1/margin/interestRateHistory (GET)查询保证金利率历史记录(USER_DATA)assetvipLevel, startTime, endTime, recvWindow是
/sapi/v1/margin/maxBorrowable (GET)查询最大可借数量(USER_DATA)assetisolatedSymbol, recvWindow是
/sapi/v1/margin/crossMarginCollateralRatio (GET)全仓保证金抵押率(MARKET_DATA)无无否
/sapi/v1/margin/allPairs (GET)获取所有全仓保证金交易对(MARKET_DATA)无symbol否
/sapi/v1/margin/isolated/allPairs (GET)获取所有逐仓保证金交易对(MARKET_DATA)无symbol, recvWindow否
/sapi/v1/margin/allAssets (GET)获取所有保证金资产(MARKET_DATA)无asset否
/sapi/v1/margin/delist-schedule (GET)获取下架计划(MARKET_DATA)无recvWindow否
/sapi/v1/margin/limit-price-pairs (GET)获取限价交易对(MARKET_DATA)无无否
/sapi/v1/margin/list-schedule (GET)获取列表计划(MARKET_DATA)无recvWindow否
/sapi/v1/margin/risk-based-liquidation-ratio (GET)获取基于风险的保证金资产清算率(MARKET_DATA)无无否
/sapi/v1/margin/restricted-asset (GET)获取保证金受限资产(MARKET_DATA)无无否
/sapi/v1/margin/isolatedMarginTier (GET)查询逐仓保证金层级数据(USER_DATA)symboltier, recvWindow是
/sapi/v1/margin/leverageBracket (GET)查询全仓保证金专业模式下负债币种的杠杆档位(MARKET_DATA)无无否
/sapi/v1/margin/priceIndex (GET)查询保证金价格指数(MARKET_DATA)symbol无否
/sapi/v1/margin/available-inventory (GET)查询保证金可用库存(USER_DATA)type无是
/sapi/v1/margin/listen-key (DELETE)关闭用户数据流(USER_STREAM)无无否
/sapi/v1/margin/listen-key (PUT)延长用户数据流有效期(USER_STREAM)listenKey无否
/sapi/v1/margin/listen-key (POST)启动用户数据流(USER_STREAM)无无否
/sapi/v1/margin/apiKey (POST)创建专用密钥(低延迟交易)(TRADE)apiNamesymbol, ip, publicKey, permissionMode, recvWindow是
/sapi/v1/margin/apiKey (DELETE)删除专用密钥(低延迟交易)(TRADE)无apiName, symbol, recvWindow是
/sapi/v1/margin/apiKey (GET)查询专用密钥(低延迟交易)(TRADE)无symbol, recvWindow是
/sapi/v1/margin/apiKey/ip (PUT)编辑专用密钥的 IP(低延迟交易)(TRADE)ipsymbol, recvWindow是
/sapi/v1/margin/forceLiquidationRec (GET)获取强制清算记录(USER_DATA)无startTime, endTime, isolatedSymbol, current, size, recvWindow是
/sapi/v1/margin/exchange-small-liability (GET)获取小额负债兑换币种列表(USER_DATA)无recvWindow是
/sapi/v1/margin/exchange-small-liability (POST)小额负债兑换(MARGIN)assetNamesrecvWindow是
/sapi/v1/margin/exchange-small-liability-history (GET)获取小额负债兑换历史记录(USER_DATA)current, sizestartTime, endTime, recvWindow是
/sapi/v1/margin/openOrders (DELETE)取消保证金账户某交易对的所有未成交订单(TRADE)symbolisIsolated, recvWindow是
/sapi/v1/margin/openOrders (GET)查询保证金账户的未成交订单(USER_DATA)无symbol, isIsolated, recvWindow是
/sapi/v1/margin/orderList (DELETE)取消保证金账户 OCO 订单(TRADE)symbolisIsolated, orderListId, listClientOrderId, newClientOrderId, recvWindow是
/sapi/v1/margin/orderList (GET)查询保证金账户的 OCO 订单(USER_DATA)无isIsolated, symbol, orderListId, origClientOrderId, recvWindow是
/sapi/v1/margin/order (DELETE)取消保证金账户订单(TRADE)symbolisIsolated, orderId, origClientOrderId, newClientOrderId, recvWindow是
/sapi/v1/margin/order (POST)创建保证金账户订单(TRADE)symbol, side, typeisIsolated, quantity, quoteOrderQty, price, stopPrice, newClientOrderId, icebergQty, newOrderRespType, sideEffectType, timeInForce, selfTradePreventionMode, autoRepayAtCancel, recvWindow是
/sapi/v1/margin/order (GET)查询保证金账户订单(USER_DATA)symbolisIsolated, orderId, origClientOrderId, recvWindow是
/sapi/v1/margin/order/oco (POST)创建保证金账户 OCO 订单(TRADE)symbol, side, quantity, price, stopPriceisIsolated, listClientOrderId, limitClientOrderId, limitIcebergQty, stopClientOrderId, stopLimitPrice, stopIcebergQty, stopLimitTimeInForce, newOrderRespType, sideEffectType, selfTradePreventionMode, autoRepayAtCancel, recvWindow是
/sapi/v1/margin/order/oto (POST)创建保证金账户 OTO 订单(TRADE)symbol, workingType, workingSide, workingPrice, workingQuantity, workingIcebergQty, pendingType, pendingSide, pendingQuantityisIsolated, listClientOrderId, newOrderRespType, sideEffectType, selfTradePreventionMode, autoRepayAtCancel, workingClientOrderId, workingTimeInForce, pendingClientOrderId, pendingPrice, pendingStopPrice, pendingTrailingDelta, pendingIcebergQty, pendingTimeInForce是
/sapi/v1/margin/order/otoco (POST)创建保证金账户 OTOCO 订单(TRADE)symbol, workingType, workingSide, workingPrice, workingQuantity, pendingSide, pendingQuantity, pendingAboveTypeisIsolated, sideEffectType, autoRepayAtCancel, listClientOrderId, newOrderRespType, selfTradePreventionMode, workingClientOrderId, workingIcebergQty, workingTimeInForce, pendingAboveClientOrderId, pendingAbovePrice, pendingAboveStopPrice, pendingAboveTrailingDelta, pendingAboveIcebergQty, pendingAboveTimeInForce, pendingBelowType, pendingBelowClientOrderId, pendingBelowPrice, pendingBelowStopPrice, pendingBelowTrailingDelta, pendingBelowIcebergQty, pendingBelowTimeInForce是
/sapi/v1/margin/manual-liquidation (POST)手动清算保证金(MARGIN)typesymbol, recvWindow是
/sapi/v1/margin/rateLimit/order (GET)查询当前保证金订单计数使用情况(TRADE)无isIsolated, symbol, recvWindow是
/sapi/v1/margin/allOrderList (GET)查询保证金账户的所有 OCO 订单(USER_DATA)无isIsolated, symbol, fromId, startTime, endTime, limit, recvWindow是
/sapi/v1/margin/allOrders (GET)查询保证金账户的所有订单(USER_DATA)symbolisIsolated, orderId, startTime, endTime, limit, recvWindow是
/sapi/v1/margin/openOrderList (GET)查询保证金账户的未成交 OCO 订单(USER_DATA)无isIsolated, symbol, recvWindow是
/sapi/v1/margin/myTrades (GET)查询保证金账户的交易列表(USER_DATA)symbolisIsolated, orderId, startTime, endTime, fromId, limit, recvWindow是
/sapi/v1/margin/myPreventedMatches (GET)查询阻止的撮合记录(USER_DATA)symbolpreventedMatchId, orderId, fromPreventedMatchId, recvWindow, isIsolated是
/sapi/v1/margin/api-key-list (GET)查询专用密钥列表(低延迟交易)(TRADE)无symbol, recvWindow是
/sapi/v1/margin/transfer (GET)获取全仓保证金划转历史记录(USER_DATA)无asset, type, startTime, endTime, current, size, isolatedSymbol, recvWindow是
/sapi/v1/margin/maxTransferable (GET)查询最大可划转转出数量(USER_DATA)assetisolatedSymbol, recvWindow是

Parameters

Common Parameters
  • maxLeverage:只能设置为 3、5 或 10。例如:Cross Margin Classic 的 maxLeverage = 5 或 3;Cross Margin Pro 的 maxLeverage=10(10 倍杠杆),如果合规允许,也可以设置为 20 倍。
  • symbol:
  • recvWindow:不得超过 60000(例如,5000)
  • asset:
  • symbol:逐仓保证金交易对
  • type:划转类型:ROLL_IN、ROLL_OUT
  • startTime:仅支持查询过去 90 天的数据。(例如,1623319461670)
  • endTime:(例如,1641782889000)
  • fromId:如果设置了 fromId,将返回 id 大于 fromId 的数据。否则,将返回最新数据。(例如,1)
  • limit:每次请求返回的数据记录数上限。默认值:500;最大值:1000。(例如,500)
  • vipLevel:如果省略 vipLevel,将返回用户当前的特定保证金数据。(例如,1)
  • coin:
  • symbols:最多可传入 5 个交易对;用逗号分隔。例如:"BTCUSDT,BNBUSDT,ADAUSDT"
  • isolatedSymbol:逐仓交易对
  • current:当前查询页码。从 1 开始。默认值:1(例如,1)
  • size:默认值:10,最大值:100(例如,10)
  • assets:资产列表,用逗号分隔,最多 20 个
  • isIsolated:是否为逐仓保证金,"TRUE"、"FALSE"
  • asset:
  • isIsolated:TRUE 表示逐仓保证金,FALSE 表示全仓保证金,默认值为 FALSE(例如,FALSE)
  • amount:
  • type:MARGIN、ISOLATED
  • txId:POST /sapi/v1/margin/loan 中的 tranId(例如,1)
  • tier:如果省略 tier,将返回所有保证金等级数据
  • listenKey:
  • apiName:
  • ip:可批量添加,用逗号分隔。每个 API 密钥最多 30 个
  • publicKey:1. 如果输入 publicKey,将创建 RSA 或 Ed25519 密钥。 2. 需要编码为 URL 编码格式
  • permissionMode:此参数仅适用于 Ed25519 API 密钥,对其他加密方式无效。可选值为 TRADE(所有权限均为 TRADE)或 READ(USER_DATA、FIX_API_READ_ONLY 为 READ)。默认值为 TRADE。(例如,value)
  • apiName:
  • ip:可批量添加,用逗号分隔。每个 API 密钥最多 30 个
  • current:当前查询页码。从 1 开始。默认值:1(例如,1)
  • size:默认值:10,最大值:100(例如,10)
  • isIsolated:是否为逐仓保证金,"TRUE"、"FALSE",默认值为 "FALSE"
  • orderListId:必须提供 orderListId 或 listClientOrderId 其中之一(例如,1)
  • listClientOrderId:必须提供 orderListId 或 listClientOrderId 其中之一(例如,1)
  • newClientOrderId:用于唯一标识此次取消操作。默认自动生成(例如,1)
  • orderId:(例如,1)
  • origClientOrderId:(例如,1)
  • quantity:(例如,1.0)
  • limitClientOrderId:限价单的唯一 ID(例如,1)
  • price:(例如,1.0)
  • limitIcebergQty:(例如,1.0)
  • stopClientOrderId:止损单/止损限价单部分的唯一 ID(例如,1)
  • stopPrice:(例如,1.0)
  • stopLimitPrice:如果提供此参数,则必须提供 stopLimitTimeInForce。(例如,1.0)
  • stopIcebergQty:(例如,1.0)
  • stopLimitTimeInForce:有效值为 GTC/FOK/IOC
  • sideEffectType:NO_SIDE_EFFECT、MARGIN_BUY、AUTO_REPAY、AUTO_BORROW_REPAY;默认值为 NO_SIDE_EFFECT。更多信息请参阅 FAQ(例如,NO_SIDE_EFFECT)
  • selfTradePreventionMode:可用枚举值取决于交易对的配置。支持的值包括 EXPIRE_TAKER、EXPIRE_MAKER、EXPIRE_BOTH、NONE(例如,NONE)
  • autoRepayAtCancel:仅当 MARGIN_BUY 或 AUTO_BORROW_REPAY 订单生效时适用。true 表示订单取消后,需要偿还该订单产生的债务。默认值为 true(例如,true)
  • workingType:支持的值:LIMIT、LIMIT_MAKER
  • workingSide:BUY、SELL
  • workingClientOrderId:工作订单在未结订单中的任意唯一 ID。如果未发送,则自动生成。(例如,1)
  • workingPrice:(例如,1.0)
  • workingQuantity:(例如,1.0)
  • workingIcebergQty:仅当 workingTimeInForce 为 GTC 时才能使用。(例如,1.0)
  • workingTimeInForce:GTC、IOC、FOK
  • pendingType:支持的值:订单类型。请注意,不支持使用 quoteOrderQty 的 MARKET 订单。(例如,订单类型)
  • pendingSide:BUY、SELL
  • pendingClientOrderId:待处理订单在未结订单中的任意唯一 ID。如果未发送,则自动生成。(例如,1)
  • pendingPrice:(例如,1.0)
  • pendingStopPrice:(例如,1.0)
  • pendingTrailingDelta:(例如,1.0)
  • pendingQuantity:(例如,1.0)
  • pendingIcebergQty:仅当 pendingTimeInForce 为 GTC 时才能使用。(例如,1.0)
  • pendingTimeInForce:GTC、IOC、FOK
  • workingIcebergQty:仅当 workingTimeInForce 为 GTC 时才能使用。(例如,1.0)
  • pendingAboveType:支持的值:LIMIT_MAKER、STOP_LOSS 和 STOP_LOSS_LIMIT
  • pendingAboveClientOrderId:上方待处理订单在未结订单中的任意唯一 ID。如果未发送,则自动生成。(例如,1)
  • pendingAbovePrice:(例如,1.0)
  • pendingAboveStopPrice:(例如,1.0)
  • pendingAboveTrailingDelta:(例如,1.0)
  • pendingAboveIcebergQty:仅当 pendingAboveTimeInForce 为 GTC 时才能使用。(例如,1.0)
  • pendingAboveTimeInForce:
  • pendingBelowType:支持的值:LIMIT_MAKER、STOP_LOSS 和 STOP_LOSS_LIMIT
  • pendingBelowClientOrderId:下方待处理订单在未结订单中的任意唯一 ID。如果未发送,则自动生成。(例如,1)
  • pendingBelowPrice:(例如,1.0)
  • pendingBelowStopPrice:(例如,1.0)
  • pendingBelowTrailingDelta:(例如,1.0)
  • pendingBelowIcebergQty:仅当 pendingBelowTimeInForce 为 GTC 时才能使用。(例如,1.0)
  • pendingBelowTimeInForce:
  • quantity:(例如,1.0)
  • quoteOrderQty:(例如,1.0)
  • price:(例如,1.0)
  • stopPrice:与 STOP_LOSS、STOP_LOSS_LIMIT、TAKE_PROFIT 和 TAKE_PROFIT_LIMIT 订单配合使用。(例如,1.0)
  • icebergQty:与 LIMIT、STOP_LOSS_LIMIT 和 TAKE_PROFIT_LIMIT 配合使用,以创建冰山订单。(例如,1.0)
  • preventedMatchId:(例如,1)
  • fromPreventedMatchId:(例如,1)
  • assetNames:小额负债兑换的资产列表。例如:assetNames = BTC,ETH
枚举
  • side:BUY | SELL
  • newOrderRespType:ACK | RESULT | FULL
  • timeInForce:GTC | IOC | FOK

身份验证

对于需要身份验证的端点,你需要提供 Binance API 凭据。 所需凭据:

  • apiKey:你的 Binance API 密钥(用于请求头)
  • secretKey:你的 Binance API 密钥(用于签名)

基础 URL:

安全

分享凭据

用户可以通过不同方式提供 Binance API 凭据。Agent 会尝试通过前两种方式自动获取凭据,但用户也可以明确告知 Agent 凭据已经设置或存储在 .env 文件中;收到此类告知后,Agent 应重新读取该文件。Agent 也可以通过前两种方式发起 HTTP 请求,无需用户确认。

  1. 环境变量

仅搜索以下特定变量(绝不转储完整环境变量):

已授权的环境变量

  • 主网:BINANCE_API_KEY 和 BINANCE_SECRET_KEY

在单次 exec 调用中读取并使用,以免原始密钥进入 Agent 的上下文:

KEY="$BINANCE_API_KEY"
SECRET="$BINANCE_SECRET_KEY"

response=$(curl -s -X GET "$URL" \
  -H "X-MBX-APIKEY: $KEY" \
  --data-urlencode "param1=value1")

echo "$response"

必须在 OpenClaw 启动前设置环境变量。它们会在进程启动时继承,无法注入正在运行的实例。如果需要在不重启的情况下添加或更新凭据,请使用密钥文件(见选项 2)。

  1. 密钥文件(.env)

检查 ~/.openclaw/secrets.env、~/.env 或工作区中的 .env 文件。使用 grep 读取单个密钥,绝不要加载整个文件:

# Try all credential locations in order
API_KEY=$(grep '^BINANCE_API_KEY=' ~/.openclaw/secrets.env 2>/dev/null | cut -d= -f2-)
SECRET_KEY=$(grep '^BINANCE_SECRET_KEY=' ~/.openclaw/secrets.env 2>/dev/null | cut -d= -f2-)

# Fallback: search .env in known directories (KEY=VALUE then raw line format)
for dir in ~/.openclaw ~; do
  [ -n "$API_KEY" ] && break
  env_file="$dir/.env"
  [ -f "$env_file" ] || continue

  # Read first two lines
  line1=$(sed -n '1p' "$env_file")
  line2=$(sed -n '2p' "$env_file")

  # Check if lines contain '=' indicating KEY=VALUE format
  if [[ "$line1" == *=* && "$line2" == *=* ]]; then
    API_KEY=$(grep '^BINANCE_API_KEY=' "$env_file" 2>/dev/null | cut -d= -f2-)
    SECRET_KEY=$(grep '^BINANCE_SECRET_KEY=' "$env_file" 2>/dev/null | cut -d= -f2-)
  else
    # Treat lines as raw values
    API_KEY="$line1"
    SECRET_KEY="$line2"
  fi
done

此文件可随时更新,无需重启 OpenClaw;每次调用时都会读取最新的密钥。用户可以告知你变量现已设置或存储在 .env 文件中;收到此类告知后,你应重新读取该文件。

  1. 内联文件

发送内容采用以下格式的文件:

abc123...xyz
secret123...key
  • 绝不运行 printenv、env、export,也绝不运行未指定具体变量名的 set
  • 绝不在 env 文件上运行未锚定到特定密钥('^VARNAME=')的 grep
  • 绝不将密钥文件加载到 shell 环境中(source .env 或 . .env)
  • 只读取当前任务明确需要的凭据
  • 绝不在输出或回复中回显或记录原始凭据
  • 如果 TOOLS.md 中包含真实凭据,绝不将其提交到版本控制;应将其添加到 .gitignore
绝不泄露 API 密钥和密钥

绝不泄露 API 密钥和密钥文件的位置。

绝不向主网和测试网以外的任何网站发送 API 密钥和密钥。

绝不显示完整密钥

向用户展示凭据时:

  • API 密钥: 显示前 5 位和后 4 位:su1Qc...8akf
  • 密钥: 始终遮蔽,仅显示末尾 5 位:***...aws1

用户询问凭据时的示例回复: 账户:main API 密钥:su1Qc...8akf 密钥:***...aws1

列出账户

列出账户时,只显示名称和环境,绝不显示密钥: Binance 账户:

  • main(主网)
  • futures-keys(主网)
主网交易

在主网执行交易前,务必先要求用户输入“CONFIRM”进行确认。


Binance 账户

main
  • API 密钥:your_mainnet_api_key
  • 密钥:your_mainnet_secret
TOOLS.md 结构
## Binance Accounts

### main
- API Key: abc123...xyz
- Secret: secret123...key
- Description: Primary trading account


### futures-keys
- API Key: futures789...def
- Secret: futuressecret...uvw
- Description: Futures trading account

Agent 行为

  1. 请求凭据:遮蔽密钥(仅显示末尾 5 位)
  2. 列出账户:显示名称和环境,绝不显示密钥
  3. 选择账户:若不明确则询问,默认使用 main
  4. 在主网执行交易时,先要求用户输入“CONFIRM”进行确认
  5. 新凭据:提示用户提供名称、环境和签名模式

添加新账户

用户通过内联文件或消息提供新凭据时:

  • 询问账户名称
  • 将其存储在 TOOLS.md 中,并确认时显示遮蔽后的信息

签名请求

对于需要签名的交易端点:

  1. 先检测密钥类型,在签名前检查密钥格式。
  2. 使用所有参数构建查询字符串,包括时间戳(Unix 毫秒)。
  3. 根据 RFC 3986 使用 UTF-8 对参数进行百分号编码。
  4. 使用 secretKey 对查询字符串进行签名,算法为 HMAC SHA256、RSA 或 Ed25519(取决于账户配置)。
  5. 将签名追加到查询字符串。
  6. 添加 X-MBX-APIKEY 请求头。

否则,不要执行步骤 4–6。

新客户端订单 ID

对于包含 newClientOrderId 参数的端点,其值必须始终以 agent- 开头。如果未提供该参数,系统会自动生成 agent-,后接 18 个随机字母数字字符。如果提供了值,系统会在其前面添加 agent-。

示例:agent-1a2b3c4d5e6f7g8h9i

User Agent 请求头

添加 User-Agent 请求头,其值为以下字符串:binance-margin-trading/1.1.0 (Skill)

实现详情请参阅 references/authentication.md。

评论

支持 Markdown