You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何强制Monero广播余额不足的无效交易用于端到端测试?

解决Monero钱包RPC无法广播余额不足交易的问题

Monero的transfer RPC方法本身会在钱包端做严格的余额校验,所以没法直接通过它发起余额不足的交易。要实现你的测试需求,可以从以下两个方向入手:

1. 手动构造无效交易并通过send_raw_transaction广播

钱包的校验是在本地完成的,你可以绕过钱包的逻辑,自己构造一笔余额不足的交易,再用节点的send_raw_transaction方法直接广播到网络:

  • 步骤:
    • 先用钱包的get_transaction_template获取一个合法的交易模板
    • 修改模板中的输出金额,让总输出超过钱包可用余额
    • 对修改后的交易进行签名(签名只验证私钥匹配,不校验余额,所以即使余额不足也能完成签名)
    • 将签名后的原始交易数据通过send_raw_transaction RPC发送到节点

示例curl命令(假设已构造好raw_tx):

curl --request POST \
  --url http://127.0.0.1:38081/json_rpc \
  --header 'Content-Type: application/json' \
  --data '{"jsonrpc":"2.0","id":"0","method":"send_raw_transaction","params":{"tx_as_hex":"[构造好的原始交易十六进制字符串]"}}'

注意:send_raw_transaction是节点的RPC方法(默认端口38081),不是钱包RPC,无需钱包授权头。

2. 模拟未确认入账场景(更贴合测试需求)

你的核心需求是验证“入账确认前不允许支出”,其实不需要广播无效交易,而是可以在测试环境中模拟未确认余额的场景:

  • 使用Monero测试网,给自己的钱包发送一笔交易,此时钱包会显示未确认余额
  • 默认情况下,调用transfer方法时钱包只会使用已确认余额,会直接拒绝使用未确认余额的转账请求
  • 若要强制钱包尝试使用未确认余额,可在transfer参数中添加allow_unconfirmed_inputs: true,此时钱包会发起交易,但网络会因输入未确认而无法完成确认,以此验证你的应用是否拦截这类操作

示例修改后的transfer请求:

curl --request POST \
  --url http://127.0.0.1:38084/json_rpc \
  --header 'Authorization: Basic [redacted]' \
  --header 'Content-Type: application/json' \
  --data '{"jsonrpc":"2.0","id":"0","method":"transfer","params":{"destinations":[{"amount":250000,"address":"[redacted]"}],"priority":0,"get_tx_metadata":true,"allow_unconfirmed_inputs":true}}'

内容的提问来源于stack exchange,提问作者Alice

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 18:17:20