32个版本
0.6.3 | 2023年3月10日 |
---|---|
0.5.0 | 2022年10月30日 |
0.4.1 | 2022年7月26日 |
0.3.9 | 2022年3月31日 |
#1862 in 魔法豆
80 每月下载量
93KB
2K SLoC
melwalletd:Themelio钱包守护进程
与其他缺乏“账户”抽象的基于UTXO的区块链(如比特币)一样,Themelio需要一些复杂的逻辑来处理钱包 —— 软件管理链上资产并提供类似于银行账户的接口。
In Themelio, the "canonical" wallet software is melwalletd, a headless program that internally manages wallets and exposes a local REST API for operations on the wallets. Although you can use it directly as a Themelio wallet, melwalletd is intended more as a backend to wallet apps, such as melwallet-cli, the official CLI wallet.
启动melwalletd
通过cargo install --locked melwalletd
安装melwalletd后,通过指定存储钱包的目录和要连接的网络来启动它
$ melwalletd --wallet-dir ~/.themelio-wallets --network testnet
May 18 16:20:43.583 INFO melwalletd: opened wallet directory: []
如果目录不存在,将会被创建。默认情况下,melwalletd将监听在localhost:11773
。
管理钱包
创建钱包
端点 PUT /wallets/[wallet name]
正文字段
password
: 可选字段;用于加密私钥的密码。警告:如果不提供,私钥将以明文形式存储!secret
: 可选字段;用于导入现有钱包的密钥
响应
- 无
示例
$ curl -s 'localhost:11773/wallets/alice' -X PUT --data '{"password": "password"}'
列出所有钱包
端点 GET /wallets
响应
- 哈希表,将钱包名称映射到具有以下字段的类型 WalletSummary
total_micromel
:钱包的总体 µMEL 余额detailed_balance
:将特定代币面额与金额关联的映射staked_microsym
:网络中抵押的 µSYM 金额network
:1 表示测试网,255 表示主网address
:地址编码的契约哈希locked
:布尔值,表示钱包是否被锁定。
示例
$ curl -s localhost:11773/wallets | jq
{
"alice": {
"total_micromel": 0,
"network": 1,
"address": "t607gqktd3njqewnjcvzxv2m4ta6epbcv1sdjkp0qkmztaq3wxn350",
"detailed_balance": {
"73": 9871,
"6d": 32131,
"64": 314159265
},
"staked_microsym": 2500000000,
"locked": true
},
"labooyah": {
"total_micromel": 0,
"network": 255,
"address": "t1jhtj4ex1n069xr8w6mbkgrt25jgzw0pam1a25redg9ykpsykbq70",
"detailed_balance": {
"6d": 202220,
},
"staked_microsym": 0,
"locked": true
},
"testnet": {
"total_micromel": 17322999920,
"network": 1,
"address": "t6zf5m662ge2hwax4hcs5kzqmr1a5214fa9sj2rbtassw04n6jffr0",
"detailed_balance": {
"64": 10111,
},
"staked_microsym": 0,
"locked": true
}
}
导出钱包
端点 GET /wallets/[钱包名称]
响应
- 哈希表,将钱包名称映射到类型 WalletSummary,具有以下字段
total_micromel
:钱包的总体 µMEL 余额detailed_balance
:将特定代币面额与金额关联的映射staked_microsym
:网络中抵押的 µSYM 金额network
:1 表示测试网,255 表示主网address
:地址编码的契约哈希locked
:布尔值,表示钱包是否被锁定。
示例
$ curl -s localhost:11773/wallets/alice | jq
{
"alice": {
"total_micromel": 0,
"network": 1,
"address": "t607gqktd3njqewnjcvzxv2m4ta6epbcv1sdjkp0qkmztaq3wxn350",
"detailed_balance": {
"73": 9871,
"6d": 32131,
"64": 314159265
},
"staked_microsym": 2500000000,
"locked": true
}
}
使用单个钱包
解锁钱包
端点 POST /wallets/[名称]/unlock
正文字段
password
:密码
响应
无
锁定钱包
端点 POST /wallets/[名称]/lock
正文字段
无
响应
无
发送水龙头交易
这个动词发送一个水龙头交易,向钱包添加固定的 1001 MEL。 注意:显然,这仅在 测试网 钱包中有效!
端点 POST /wallets/[名称]/send-faucet
正文字段
无。
响应
正在发送的交易引用的十六进制交易哈希。
示例
$ curl -s localhost:11773/wallets/alice/send-faucet -X POST
"86588da7863b39152105e4f78c04e07a5d3f3ebf61d799f95293372dabdb06a1"
列出所有交易
端点 GET /wallets/[名称]/transactions/
响应
包含类型 (TxHash, Option<BlockHeight>) 元素列表的 JSON 对象
- TxHash:与给定钱包相关联的特定交易的哈希
- Option<BlockHeight>:如果未确认,则为 null,否则为确认交易所在的区块的整数高度
示例
$ curl -s localhost:11773/wallets/bar/transactions | jq
[
[
"d23b4240f7e02a38e8deb8a111d0ec8650a8912df50d15ec43992e3085b4ca98",
null
],
[
"5b4ca98d23b4240f7e02a38e8deb8a111d0ec8650a8912df50d15ec43992e308",
48113
]
]
检查交易
端点 GET /wallets/[名称]/transactions/[txhash]
响应
包含以下字段的类型 TransactionStatus 的 JSON
raw
:实际的 JSON 格式交易confirmed_height
:如果未确认,则为 null,否则为确认交易的高度。outputs
:一组 AnnCoinID 对象的数组,例如coin_data
:CoinData 对象is_change
:这是否是我自己的更改输出?coin_id
:以字符串表示的 CoinID(txhash-index)
示例
$ curl -s localhost:11773/wallets/alice/transactions/
442bdc353b773b8949c59cee8061545a9a89e27a2e6638fcc1d065583bb170b8 | jq
{
"raw": {
"kind": 255,
"inputs": [],
"outputs": [
{
"covhash": "t4xn73csvjxp0dvh0gs6ehpgfq0ht0akr9g6tkxywv7xvfp09cy6x0",
"value": 1001000000,
"denom": "MEL",
"additional_data": ""
}
],
"fee": 1001000000,
"covenants": [],
"data": "72a1aba97ada3d1958932244836b0c72aaedeef7f6b032c1877c83ae05e28469",
"sigs": []
},
"confirmed_height": 42633,
"outputs": [
{
"coin_data": {
"covhash": "t4xn73csvjxp0dvh0gs6ehpgfq0ht0akr9g6tkxywv7xvfp09cy6x0",
"value": 1001000000,
"denom": "MEL",
"additional_data": ""
},
"is_change": true,
"coin_id": "442bdc353b773b8949c59cee8061545a9a89e27a2e6638fcc1d065583bb170b8-0"
}
]
}
准备交易
注意:这 准备 从钱包发送的交易,创建一个填写完整、有效的交易,但 不会 改变钱包状态。如果您实际上想发送交易,必须使用 send-tx 调用。
请注意,此端点对更高级的合约部署没有用。请检查send-tx
端点 POST /wallets/[name]/prepare-tx
正文字段
-
outputs
:一个CoinData
数组,表示交易所需的输出。添加的任何变动输出都保证在这些输出之后添加。 -
kind
:交易的可选TxKind
(默认为Normal) -
inputs
:可选,一个表示必须由本交易使用的输入的CoinID
数组。这对于构建契约链等很有用。 -
data
:可选,交易的其他数据(默认为空) -
契约
: -
nobalance
:可选,在平衡(检查交易产生的硬币数量与消耗的硬币数量是否完全相同)时不进行检查的Denom
向量。通常,这用于在准备DOSC铸造交易时免除ERG余额检查。 -
signing_key
:可选,与钱包的契约对应的ed25519签名密钥。警告:仅用于高级用例,如果使用不当可能会导致资金损失
响应
- JSON编码的
Transaction
示例
$ curl -s localhost:11773/wallets/alice/prepare-tx -X POST --data '{
"outputs": [
{
"covhash": "57df1dd5b067f77a177127cbe4d69aa10fe8fcac3b2f9718cb8263d5a6216ab0",
"value": 1000,
"denom": "6d",
"additional_data": ""
}
],
"signing_key": "4239e79eab9b39c49de990363197a64e1a54f0f9a0d12a936e85e69ea7fb05b006425dfe7967003e2a5362e36231730f2faaa6068979afc52784f916466e05b6"
}'
{
"kind": 0,
"inputs": [
{
"txhash": "4950f3af9da569e1a99a7e738026a581d6e96caaf02d94b02efcd645540a2d2f",
"index": 0
}
],
"outputs": [
{
"covhash": "57df1dd5b067f77a177127cbe4d69aa10fe8fcac3b2f9718cb8263d5a6216ab0",
"value": 1000,
"denom": "6d",
"additional_data": ""
},
{
"covhash": "41d04b65a010aaa3404e1a109c53e3190a393d7ff920fa5644969a879547d0aa",
"value": 1000998977,
"denom": "6d",
"additional_data": ""
}
],
"fee": 23,
"scripts": [
"420009f100000000000000000000000000000000000000000000000000000000000000064200005050f02006425dfe7967003e2a5362e36231730f2faaa6068979afc52784f916466e05b6420001320020"
],
"data": "",
"sigs": [
"df3cc2795d3c9576b85c4c960501af3e44bbc490c9dc51c8422f18a3a0fa1150c2f745440206748c8205971ba0cff32b87c9797a4d1098ce3bd677db62e8560c"
]
}
发送交易
注意:此端点将拒绝任何格式不正确或不属于钱包的交易。对于个人使用,建议使用[melwallet-cli]({{< ref my-first-tx.md>}})代替。如果必须使用此端点,请考虑使用/prepare-tx来准备此交易的正文。
端点 POST /wallets/[name]/send-tx
正文
带有字段的JSON编码的Transaction
- kind:此交易的
TXKind
- inputs:一个
CoinID
数组 - outputs:一个
CoinData
数组 fee
:CoinValue
响应
- 引用的交易哈希
依赖关系
~57–98MB
~2M SLoC