本文是PayJoin(也称为P2EP)的用户指南,详细介绍了如何在Joinmarket中使用PayJoin进行比特币交易。内容涵盖了配置Bitcoin Core、设置和资助钱包、进行BIP78 payjoin支付、Joinmarket钱包间的payjoin支付、手续费注意事项、接收BIP78 payjoin支付、配置Tor以及使用JoinmarketQt发送和接收Payjoin等步骤。
(在阅读本文档之前,你已经按照 README 中的说明使用 install.sh
或类似方法进行了安装)。
本文档不讨论 PayJoin 的有趣之处或总体概念。 有关这方面的信息,请参阅这篇文章。
这里的一些说明与介绍性的使用指南重复; 第 1-3 节针对尚未/不使用 Joinmarket 进行普通 coinjoins 的用户。 因此,如果你已经知道,请跳过这些部分。
<a name="preparatory" />
Joinmarket 目前需要 Bitcoin Core 完整节点,版本 25.1 或更高版本,尽管可以进行裁剪。
首先要做的事情:在 scripts/
中,运行:
python wallet-tool.py generate
这 应该 因为 rpc 未配置而退出并显示错误。打开新创建的文件 joinmarket.cfg
,
并编辑:
[BLOCKCHAIN]
rpc_user = yourusername-as-in-bitcoin.conf
rpc_password = yourpassword-as-in-bitcoin.conf
rpc_host = localhost #default usually correct
rpc_port = 8332 # default for mainnet
注意,你还可以通过在此部分中设置变量 rpc_cookie_file
到该文件的位置来使用 cookie 文件,
作为使用用户名/密码的替代方法。
如果你使用 Bitcoin Core 的 multiwallet 功能,你可以将 rpc_wallet_file
的值编辑为你选择的钱包文件。
然后重试相同的 generate
命令;现在应该不会出错 - 按照下面的步骤继续进行生成过程。
但是,如果仍然收到 rpc 连接错误,请首先确保你可以使用命令行连接到你的 Core 节点。
<a name="before" />
好问题!无论你设置哪个 Joinmarket 钱包,你都可以始终使用正常的 (非 coinjoin,非 PayJoin,没什么特别的 - 只是普通的付款) 使用以下语法:
python sendpayment.py -N0 -m <mixdepth> mywalletname.jmdat amount address
金额可以指定为比特币(如果为小数值或具有 "btc" 后缀)或聪(如果为整数值或具有 "sat" 后缀)。因此,0.1 BTC 可以指定为 0.1、0.1btc、10000000 或 10000000sat。 同样非常重要的是:要清空帐户或 mixdepth (稍后会详细介绍), 将金额设置为 0。在实际将交易推送到网络之前,系统会提示你输入目标地址和金额, 以进行健全性检查。它看起来像这样:
2019-01-19 18:20:08,509 [INFO] Using a fee of : 0.00001672 BTC (1672 sat).
2019-01-19 18:20:08,510 [INFO] Using a change value of: 1.89998328 BTC (189998328 sat).
2019-01-19 18:20:08,511 [INFO] Got signed transaction:
2019-01-19 18:20:08,511 [INFO] {'ins': [{'outpoint': {'hash': '0a00b5a40f4cd587b3158fbf37c75e1824df25b8c8a59e3760a6d3e4850e70e3',
'index': 0},
'script': '1600146cac63b385d6e45acce4d814d9a5d4c36d7515a8',
'sequence': 4294967295,
'txinwitness': ['3045022100d9fe2096c689e882c560c3d5b7adf633b252c2ff8fed3fd81dd5523556ff404302204efdcc947899c7f330a321d5a7a4b56aec457ec5d6dfce72c93351bc65d1cb6c01',
'03f58d6a2f317f829b3bf21a3ba79887013597853e45d656e43222930c5a2854f1']}],
'locktime': 0,
'outs': [{'script': 'a9140b48ac588e74b7dc02755459dbd56ef39a55f06687',
'value': 10000000},
{'script': 'a91477967d4582ef80417943dc152ab36858de02dedf87',
'value': 189998328}],
'version': 1}
2019-01-19 18:20:08,511 [INFO] In serialized form (for copy-paste):
2019-01-19 18:20:08,511 [INFO] 01000000000101e3700e85e4d3a660379ea5c8b825df24185ec737bf8f15b387d54c0fa4b5000a00000000171600146cac63b385d6e45acce4d814d9a5d4c36d7515a8ffffffff02809698000000000017a9140b48ac588e74b7dc02755459dbd56ef39a55f06687f824530b0000000017a91477967d4582ef80417943dc152ab36858de02dedf8702483045022100d9fe2096c689e882c560c3d5b7adf633b252c2ff8fed3fd81dd5523556ff404302204efdcc947899c7f330a321d5a7a4b56aec457ec5d6dfce72c93351bc65d1cb6c012103f58d6a2f317f829b3bf21a3ba79887013597853e45d656e43222930c5a2854f100000000
2019-01-19 18:20:08,512 [INFO] Sends: 0.10000000 BTC (10000000 sat) to address: 2MtGtUpRFVYcQSYgjr6XDHo9QKhjsb3GRye
Would you like to push to the network? (y/n):
这意味着如果你只想进行 PayJoins 和普通付款,而从不进行 coinjoins, 你可以这样做,并且只需在需要时使用上面的方法将资金从钱包中移出。
(额外说明:你还可以使用 -p
选项 wallet-tool.py
(请参阅该脚本的帮助)
如果你需要私钥 (除非紧急情况,否则永远不要这样做)。你也可以
在其他一些钱包中使用助记词,例如 Electrum。)
所以现在我们知道了,让我们继续执行 generate
命令来创建一个新钱包 ... :
<a name="makefund" />
使用上述 (generate
) 方法继续/完成钱包生成。
(但请再次等待!在你完成之前:想要 p2sh segwit 钱包吗?你可能不需要, 但如果你需要,请阅读这里。)
你创建的钱包 (如果不是 p2sh) 默认是 BIP84,使用 BIP39 12 字种子, 助记词扩展是可选的 (如果你不确定,最好省略它)。
一旦 generate
方法运行成功完成,你就需要查看钱包内容。使用
默认的 display
方法:
python wallet-tool.py wallet-name-you-chose.dat [display]
("display" 是可选的,因为是默认值;使用 python wallet-tool.py -h
查看所有可能的方法)。
下面是 一个例子,说明钱包是什么样子的。
Joinmarket 默认使用 5 个帐户,而不是像其他一些钱包 (例如 Electrum) 那样只使用 1 个,这有助于 进行 coin 隔离。尝试仅通过 coinjoins 将币从一个帐户转移到另一个帐户;或者,你可以只 使用一个或两个帐户 (在 Joinmarket 术语中称为 mixdepths),就好像它们是一个帐户一样,理解 如果你不费心做任何特别的事情,那么这两个 mixdepths 中的币是链接的。
通过选择第一个帐户 (这里称为 "Mixdepth 0") 的 external 部分中的一个或多个地址来注资钱包。当你存钱时,将钱存入外部地址。内部地址将用于找零。
(新标准 (BIP84) 应该 与 TREZOR、Ledger、Electrum、Samourai 和其他一些钱包兼容, 包括 12 字种子,尽管将地址发送到远程服务器时请考虑隐私问题!)。
<a name="doing" />
本节详细介绍了如何使用 Payjoin 进行付款。如果你使用的是 JoinmarketQt 而不是命令行,你可能更喜欢从 此处 链接的视频开始,以了解其工作原理。
<a name="bip78" />
此处的流程是使用 sendpayment.py 的语法:
(jmvenv)a$ python sendpayment.py -m 0 walletname.jmdat "bitcoin:bc1qxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx?amount=0.05933201&pj=https://some/url/payjoin"
关于此说明:
sendpayment
脚本完成的,或者通过在 JoinmarketQt 的 "Recipient" 字段中输入 BIP21 URI 完成的。pj=
,否则该服务器不支持 payjoin。pj=
中的 url 是 ****.onion
,则意味着你必须使用 Tor,请记住在你的系统上运行 Tor 并根据需要更改 socks5 端口的配置 (见下文)。如果你正在运行 Tor 浏览器,则端口是 9150 而不是 9050。-m 0
指定你从中消费的 mixdepth。付款金额当然在 URI 中,以及地址。joinmarket.cfg
的 POLICY
部分中指定 native=false
。在你进行此类 coinjoins 之前,你可能需要:
joinmarket.cfg
。首先,重命名你当前的 joinmarket.cfg
(在 Linux 上的 ~/.joinmarket
中),然后运行一次脚本以从默认值重新生成它。然后重新应用你的自定义更改。[PAYJOIN]
## 对于大多数情况,默认值
## 不需要更改 - 它们将确保你不会支付
## 明显更高的费用。
## 建议不要修改这些设置。
## Payjoin 协议版本;目前仅支持 '1'。
payjoin_version = 1
## 默认情况下,服务器可以更改其目标地址 (0)。
## 如果是 '1',则他们不能。请注意,服务器可以明确请求
## 激活它,在这种情况下,我们尊重该选择。
disable_output_substitution = 0
## "default" 在这里表示我们将允许接收者
## 将我们支付的费用增加:
## 1.2 * (our_fee_rate_per_vbyte * vsize_of_our_input_type)
## (请参阅 https://github.com/bitcoin/bips/blob/master/bip-0078.mediawiki#span_idfeeoutputspanFee_output)
## (和 1.2 以提供缓冲空间)
## 这表明我们允许大约一个额外输入的费用。
## 如果将其设置为整数,则允许这么多聪。
## 此外,请注意,我们还将参数 additionafeeoutputindex 设置为
## 我们的找零输出的参数,除非没有,在这种情况下,此参数将被禁用。
max_additional_fee_contribution = default
## 这是我们在 payjoin 交易中允许的最小 sats/vbyte;
## 请注意,它是十进制数,而不是整数。
min_fee_rate = 1.1
## 对于作为发送者 (即客户端) 到隐藏服务端点的 payjoins,
## socks5 配置:
onion_socks5_host = localhost
onion_socks5_port = 9050
## 对于 payjoin onion 服务创建:
## tor 控制配置:
tor_control_host = localhost
## 或者,使用 UNIX 套接字
## control_host = unix:/var/run/tor/control
## 请注意:需要提供端口 (但对于 UNIX 套接字,端口将被忽略)
tor_control_port = 9051
## 实际提供隐藏服务的主机/端口
## (请注意 *虚拟端口*,客户端使用,
## 已硬编码为 80):
onion_serving_host = 127.0.0.1
onion_serving_port = 8082
## 在某些特殊情况下,HS 可以进行 SSL 配置,
## 此功能尚未在代码中实现,但在这里是为了
## 未来:
hidden_service_ssl = false
正如注释中提到的,你可能会发现这里的默认值绝对没问题,并且 可能不需要修改它们。但是请阅读注释以了解它们是什么;主要的一点 是,作为付款人,你可以控制你准备支付多少额外费用以允许 服务器与你参与 Payjoin 交易。默认情况下,我们只允许他们 增加足够的费用以向交易添加一个输入,这在几乎所有情况下都应该没问题。
<a name="jmtojm" />
可以使用上述相同的 BIP78 工作流程来完成;2019 年的 "old style" 内部 Joinmarket payjoins 现已弃用。
<a name="fees" />
在 joinmarket.cfg 文件中的 [POLICY]
部分下,你应该看到一个名为 tx_fees
的设置。
你可以将其设置为任何整数;如果将其设置为 1000 或更小,则将其视为 "在 N 个区块中确认目标",
即,如果将其设置为 3 (默认值),则将从 Bitcoin Core 的估算器中选择费用,以在 3 个区块中确认目标。
因此,如果将其更改为例如 10,它会更便宜,但预计平均在 10 个区块中获得首次确认。
但是,如果将其设置为 > 1000 的数字,那么它是你想使用的每千字节 (技术上是千字节) 的聪数。 如果这样做,请不要使用低于约 1200 的数字 - 一个典型的数字可能是 5000 或 10000,对应于 大约 5-10 sats/字节,这如今是一个合理的费用。确切的金额会被随机化约 20%,以避免你无意中 为所有交易添加水印。因此,不要使用 < 1200,因为那样你可能使用的费用低于 1 sat/字节,这 很难在比特币网络上进行中继。
BIP78 本身对费用有各种控制 - 本质上,它试图让接收者增加费用,但 只是稍微 增加,以考虑到接收者正在添加至少一个输入,因此增加了交易的大小,并且还确保低费用不会意外地降得太低 (甚至低于中继限制)。Joinmarket 的接收者目前只会添加一个输入,而且永远不会添加更多输入,而且看起来这是大多数钱包都会做出的权衡。如果你想了解更多信息,请调查 BIP 中描述的 maxadditionalfeecontribution
、additionalfeeoutputindex
和 minfeerate
参数。
作为 BIP78 协议中的消费方,你通常会看到以下情况:由于额外的 1 个输入,你的找零输出的大小略有减少。除非付款非常小,否则这可能不会很重要。
<a name="p2sh" />
你可以这样做,但请记住:只有在你和你的接收者使用相同类型的地址时,PayJoin 才能发挥其全部作用;因此,只有在你和你的接收者/发送者同意的情况下才这样做 - 至少对于现在,大多数 BIP78 接收者只有在他们可以提供与你的类型相同的输入时才会参与该协议。
正如 BIP78 部分中提到的,因此可能你 需要 这样做 (尽管最坏的情况是回退到非 payjoin 付款,这不是灾难)。
在配置文件 joinmarket.cfg
(这是在上面的准备步骤中创建的) 中,转到
POLICY 部分并设置:
[POLICY]
native = false
请注意,必须在生成钱包 之前 完成此操作,因为 钱包内部当然会存储它管理的地址类型,并且目前只能是两种 类型 (忽略旧版升级):bech32 或 p2sh-segwit (以 '3' 开头),前者是 Joinmarket 0.8.0+ 中的默认值。
请注意,p2sh 包装的 segwit 样式钱包的编写符合 BIP49, 类似于 native/bech32 的 BIP84 情况。
<a name="receiving" />
Joinmarket 允许你使用 Tor 隐藏服务从任何支持通过 BIP78 协议消费的钱包接收付款。
此隐藏服务是 "ephemeral",这意味着它是专门为付款而设置的,并在你关闭接收过程后被丢弃。设置需要几秒钟,但不会太慢。
为了使它起作用,你需要在第一次时对 Tor 进行一些小的配置。这在 下面 详细解释。如果你未能完成此步骤,则在尝试运行下一个脚本时会看到一些相当难以理解的关于连接失败的错误。
准备好后,你可以像这样 receive-payjoin.py
运行脚本:
(jmvenv)a$ python receive-payjoin.py -m1 walletname.jmdat 0.32
提供的参数是钱包名称和你打算接收的确切金额 (这里是 0.32 BTC (标记为 BTC 因为是十进制数),但你也可以写 32000000
,它将被解释为聪)。
在延迟 5-50 秒后 (通常是这样;Tor 设置会以无法预测的方式变化),你将看到一条消息,如下所示:
Your hidden service is available. Please now pass this URI string to the sender to effect the payjoin payment:
bitcoin:bc1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx?amount=0.32000000&pj=http://p53lf57qovyuvwsc6xnrppyply3vtqm7l6pcobkmyqsiofyeznfu5uqd.onion:7083
Keep this process running until the payment is received.
... 这应该是不言自明的。发送者可能正在使用 Joinmarket,或者使用其他支持 Payjoin 的钱包,例如 Wasabi。如前所述,如果两个钱包使用的地址类型不同,Payjoins 将不起作用,因此对于 Wasabi,有必要使用 bech32 Joinmarket 钱包 (默认值)。
当付款通过时,你将看到一大块日志文本 (其中大部分是正在交换的序列化 PSBT)。如果 Payjoin 按预期生效,你将看到:
date string [INFO] Removed utxos= ...
date string [INFO] Added utxos= ...
date string [INFO] transaction seen on network: hex-txid
done
其中 hex-txid 当然是支付你的 payjoin 交易的交易 id。
如果你看到:
date string [INFO] Payment made without coinjoin. Transaction:
后跟详细的交易输出,这意味着两个钱包之间的一些不兼容或错误导致发送了正常的非 payjoin (非 coinjoin) 付款;你仍然收到了你的钱,所以仅仅因为 Payjoin 失败了,就 不要 要求再次付款!这是 BIP78 的一部分 - 我们认识到安排中可能会出现一些小问题 (例如,错误的地址类型,或无法满足的费用要求),因此允许正常的付款替代是非常 预期的行为。
另一方面,如果你在最后看到:
2020-09-12 13:01:15,887 [WARNING] Payment is not valid. Payment has NOT been made.
当然,这意味着另一种情况。与你的交易对手仔细检查,他们没有按预期在一开始就向你发送有效的非 coinjoin 付款,这说明更根本的问题已经出现。
<a name="torconfig" />
请在此处阅读有关如何执行此操作的信息:here。
<a name="using-qt" />
上述所有配置详细信息均适用于此方案 (例如,如果你想充当接收者,则设置 Tor)。
<a name="sample" />
JM 钱包
mixdepth 0 xpub6CMAJ67vZWVXuzjzYXUoJgWrmuvFRiqiUG4dwoXNFmJtpTH3WgviANNxGyZYo27zxbMuqhDDym6fnBxmGaYoxr6LHgNDo1eEghkXHTX4Jnx
external addresses (外部地址) m/84'/0'/0'/0 xpub6FFUn4AxdqFbnTH2fyPrkLreEkStNnMFb6R1PyAykZ4fzN3LzvkRB4VF8zWrks4WhJroMYeFbCcfeooEVM6n2YRy1EAYUvUxZe6JET6XYaW
m/84'/0'/0'/0/0 bc1qt493axn3wl4gzjxvfg03vkacre0m6f2gzfhv5t 0.00000000 new (新的)
m/84'/0'/0'/0/1 bc1q2av9emer8k2j567yzv6ey6muqkuew4nh4rl85q 0.00000000 new (新的)
m/84'/0'/0'/0/2 bc1qggpg0q7cn4mpe98t29wte2rfn2rzjtn3zdmqye 0.00000000 new (新的)
m/84'/0'/0'/0/3 bc1qnnkqz8vcdjan7ztcpr68tyec7dw2yk8gjnr9ze 0.00000000 new (新的)
m/84'/0'/0'/0/4 bc1qud5s2ln88ktg83hkr6gv9s576zvt249qn2lepx 0.00000000 new (新的)
m/84'/0'/0'/0/5 bc1qw0lhq7xlhj7ww2jdaknv23vcyhnz6qxg23uthy 0.00000000 new (新的)
Balance: (余额) 0.00000000
internal addresses (内部地址) m/84'/0'/0'/1
Balance: (余额) 0.00000000
Balance for mixdepth 0: (mixdepth 0 的余额) 0.00000000
mixdepth 1 xpub6CMAJ67vZWVXyTJEaZndxZy9ACUufsmNuJwp9k5dHHKa22zQdsgALxXvMRFSwtvB8BRJzsd8h17pKqoAyHtkBrAoSqC9AUcXB1cPrSYATsZ
external addresses (外部地址) m/84'/0'/1'/0 xpub6FNSLcHuGnoUbaiKgwXuKpfcbR63ybrjaqHCudrma13NDqMfKgBtZRiPZaHjSbCY3P3cgEEcdzZCwrLKXeT5jeuk8erdSmBuRgJJzfNnVjj
m/84'/0'/1'/0/0 bc1qhrvm7kd9hxv3vxs8mw2arcrsl9w37a7d6ccwe4 0.00000000 new (新的)
m/84'/0'/1'/0/1 bc1q0sccdfrsnjtgfytul5zulst46wxgahtcf44tcw 0.00000000 new (新的)
m/84'/0'/1'/0/2 bc1qst6p8hr8yg280zcpvvkxahv42ecvdzq63t75su 0.00000000 new (新的)
m/84'/0'/1'/0/3 bc1q0gkarwg8y3nc2mcusuaw9zsn3gvzwe8mp3ac9h 0.00000000 new (新的)
m/84'/0'/1'/0/4 bc1qkf5wlcla2qlg5g5sym9gk6q4l4k5c98vvyj33u 0.00000000 new (新的)
m/84'/0'/1'/0/5 bc1qz6zptlh3cqty2tqyspjk6ksqelnvrrrvmyqa5v 0.00000000 new (新的)
Balance: (余额) 0.00000000
internal addresses (内部地址) m/84'/0'/1'/1
Balance: (余额) 0.00000000
Balance for mixdepth 1: (mixdepth 1 的余额) 0.00000000
mixdepth 2 xpub6CMAJ67vZWVY2cq5fmVxXw92fcgTchphGNFxweSiupYH1xYfjBiK6dj5wEEVAQeA4JcGDQGm2xcuz2UsMnDkzVmi2ESZ3xey63mQMY4x2w2
external addresses (外部地址) m/84'/0'/2'/0 xpub6DqkbMG3tj2oixGYniEQTFamLCHTZx9CeAbUdBttiGuYwgfGZbrLMor8LWeJBUqTpsa81JcJqAUXuDxhXdLpKDxJAEqKMqPgJyXstj5dp3o
m/84'/0'/2'/0/0 bc1qwtdgg928wma8jz32upkje7e4cegtef7yrv233l 0.00000000 new (新的)
m/84'/0'/2'/0/1 bc1qhkuk2gny4gumrxcaw999uq3jm3fjrjvcwz7lz3 0.00000000 new (新的)
m/84'/0'/2'/0/2 bc1qvu753lkltc8akfasclnq89tdv8yylu2alyg76y 0.00000000 new (新的)
m/84'/0'/2'/0/3 bc1qal3r040k26cw2f08337huzcf00hrnws5rhfrz3 0.00000000 new (新的)
m/84'/0'/2'/0/4 bc1qpv4nm7wwtxesgwsr0g0slxls33u0w02gqx2euk 0.00000000 new (新的)
m/84'/0'/2'/0/5 bc1qk3ekjzlvw3uythw738z7nvwe2sg93w2rtuy6ml 0.00000000 new (新的)
Balance: (余额) 0.00000000
internal addresses (内部地址) m/84'/0'/2'/1
Balance: (余额) 0.00000000
Balance for mixdepth 2: (mixdepth 2 的余额) 0.00000000
mixdepth 3 xpub6CMAJ67vZWVY3uty61M6jeGheGU5ni5mQmqMW2QLQbEa8ZQXuBw1K2umKFZsmU8EMEafJZKQkGS1trtWE5dtz4XmDbvLvUccAPn26ZC5i2o
external addresses (外部地址) m/84'/0'/3'/0 xpub6EvT4QFPRdkt2sji3QdLLZjkJQmk7G2y3umT99ceomKTXGYvZ5S9TLaGos6cEugXEuxS6s9kvSUj1Xvpiu65dn5yzK7CgdZLzXawpKC9Mpe
m/84'/0'/3'/0/0 bc1q9ph5l2gknjezcmzv84rnhu4df566jgputzef7l 0.00000000 new (新的)
m/84'/0'/3'/0/1 bc1qrlvmmxfuryr3mfhssjv45h0fl6s43g3vzrkwca 0.00000000 new (新的)
m/84'/0'/3'/0/2 bc1q40xkajgv9q42ve92zstwjc9v4jgauxme9su6uc 0.00000000 new (新的)
m/84'/0'/3'/0/3 bc1q38pfk8yfnu97v4mckkuk2dhk9u8geuyzu9c0hc 0.00000000 new (新的)
m/84'/0'/3'/0/4 bc1q2qzxyw56em9qdxc5z5s5xjz3j6s2qlzn3juvtu 0.00000000 new (新的)
m/84'/0'/3'/0/5 bc1qd2f8f3dau5pfjqu7dpuvt6fahj36w4rgl3xevr 0.00000000 new (新的)
Balance: (余额) 0.00000000
internal addresses (内部地址) m/84'/0'/3'/1
Balance: (余额) 0.00000000
Balance for mixdepth 3: (mixdepth 3 的余额) 0.00000000
mixdepth 4 xpub6CMAJ67vZWVY7gT4oJQBMc1fhbausT57yNVLCLCMwaGed5spHKaQY1EMQxvL2vTgDfhEimuAy7bzBE1qx5uY6D7cpUjQtXPHpyJzFuUtQPN
external addresses (外部地址) m/84'/0'/4'/0 xpub6EQWpKsBTG3N9TFU4v6WtCcBJuLAeTZTcUwVJTxYUAsHeVPFdey4qT1dg4G7MqvnFFgHZDxqTo37S81UWUA2BqKKoTff1pcHTcSFzxyp5JG
m/84'/0'/4'/0/0 bc1qdpjh3ewm367jm5eazqdf8wfrm09py50wn47urs 0.00000000 new (新的)
m/84'/0'/4'/0/1 bc1q2x0fmtms5nr3wz3x3660c8wampg7t22e6m30t8 0.00000000 new (新的)
m/84'/0'/4'/0/2 bc1q23595yg3dkj8gd3jrgup0hyzslhzf9skrg50r5 0.00000000 new (新的)
m/84'/0'/4'/0/3 bc1qw48asjpkwm3k2w8cketqhrre0uwq9f7ypwzmxl 0.00000000 new (新的)
m/84'/0'/4'/0/4 bc1qf3wljw44utyv7qd0z57zvdkfl20y470mva0nes 0.00000000 new (新的)
m/84'/0'/4'/0/5 bc1qz3f80rtv0ux85d7rc06ldtvmpqyfx6ly48c9pa 0.00000000 new (新的)
Balance: (余额) 0.00000000
internal addresses (内部地址) m/84'/0'/4'/1
Balance: (余额) 0.00000000
Balance for mixdepth 4: (mixdepth 4 的余额) 0.00000000
Total balance: (总余额) 0.00000000
- 原文链接: github.com/JoinMarket-Or...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!