Fork lwcli for Wownero

- Rename project to lwcli-wow
- Update submodule to use lwsf-wow from Codeberg
- Change XMR -> WOW in all UI displays
- Update README with Wownero build instructions
- Add Wownero copyright notices
- Add upstream sync instructions
This commit is contained in:
jwinterm
2025-12-24 10:37:29 -05:00
parent 6d55efc323
commit a7ed15fede
7 changed files with 35 additions and 22 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
[submodule "external/lwsf"]
path = external/lwsf
url = https://github.com/vtnerd/lwsf.git
url = https://codeberg.org/wownero/lwsf-wow.git
[submodule "external/ftxui"]
path = external/ftxui
url = https://github.com/ArthurSonzogni/FTXUI.git
+2 -1
View File
@@ -1,4 +1,5 @@
# Copyright (c) 2025, Cifro Codes LLC
# Copyright (c) 2025, The Wownero Project
#
# All rights reserved.
#
@@ -34,7 +35,7 @@ set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
if (NOT MONERO_SOURCE_DIR)
message(FATAL_ERROR "The argument -DMONERO_SOURCE_DIR must specify a location of a monero source tree")
message(FATAL_ERROR "The argument -DMONERO_SOURCE_DIR must specify a location of a wownero source tree")
endif()
include(FetchContent)
+18 -9
View File
@@ -1,16 +1,25 @@
# lwcli
# lwcli-wow
This is an experimental TUI (FTXUI) wallet (with mouse support) used to test the ability of [lwsf](https://code.leeclagett.com/lwsf) in replacing the standard backend for the Monero wallet api. This wallet can use either backend with a runtime option, but once the wallet file is created it is "bound" to that particular backend due to file format.
This was _not_ billed/paid for by Monero CCS, as I'm not sure if there are real users desiring this sort of wallet. I may ask for CCS contributions in maintaining this wallet if there are users.
This is an experimental TUI (FTXUI) wallet (with mouse support) for Wownero, forked from [lwcli](https://github.com/cifro-codes/lwcli). This wallet uses [lwsf-wow](https://codeberg.org/wownero/lwsf-wow) as backend and can connect to [wownero-lws](https://codeberg.org/wownero/wownero-lws) light wallet servers.
## Building
```bash
git clone https://github.com/monero-project/monero.git
git clone https://github.com/cifro-codes/lwcli.git
cd lwcli && mkdir build && cd build
git submodules update --init --recursive
cmake -DCMAKE_BUILD_TYPE=Release -DMONERO_SOURCE_DIR=../../monero ..
git clone https://git.wownero.com/wownero/wownero.git
git clone --recursive https://codeberg.org/wownero/lwcli-wow.git
cd lwcli-wow && mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release -DMONERO_SOURCE_DIR=../../wownero ..
make -j$(nproc)
./src/lwcli -h
```
## Syncing with Upstream
This project tracks the upstream [lwcli](https://github.com/cifro-codes/lwcli) repository.
To sync changes from upstream:
```bash
git fetch upstream
git merge upstream/main
# Resolve any conflicts if needed
git push origin main
```
+1 -1
+1
View File
@@ -1,4 +1,5 @@
// Copyright (c) 2025, Cifro Codes LLC
// Copyright (c) 2025, The Wownero Project
//
// All rights reserved.
//
+2 -1
View File
@@ -1,4 +1,5 @@
// Copyright (c) 2025, Cifro Codes LLC
// Copyright (c) 2025, The Wownero Project
//
// All rights reserved.
//
@@ -414,7 +415,7 @@ namespace lwcli { namespace view
row_map_.try_emplace(i++).first->second = id;
rows.push_back({
active + std::to_string(id),
detail->getBalance() + " XMR",
detail->getBalance() + " WOW",
detail->getLabel(),
detail->getAddress().substr(0, 12) + "..."
});
+7 -6
View File
@@ -1,4 +1,5 @@
// Copyright (c) 2025, Cifro Codes LLC
// Copyright (c) 2025, The Wownero Project
//
// All rights reserved.
//
@@ -105,8 +106,8 @@ namespace lwcli { namespace view
std::vector<std::vector<ftxui::Element>> grid;
grid.reserve(dests.first.size() + 3);
grid.push_back({ftxui::text(_("Sending: ")), ftxui::text(lwsf::displayAmount(tx_->amount()) + " XMR")});
grid.push_back({ftxui::text(_("Fee: ")), ftxui::text(lwsf::displayAmount(tx_->fee()) + " XMR")});
grid.push_back({ftxui::text(_("Sending: ")), ftxui::text(lwsf::displayAmount(tx_->amount()) + " WOW")});
grid.push_back({ftxui::text(_("Fee: ")), ftxui::text(lwsf::displayAmount(tx_->fee()) + " WOW")});
{
std::vector<std::string> ids = tx_->txid();
@@ -120,7 +121,7 @@ namespace lwcli { namespace view
}
for (std::size_t i = 0; i < dests.first.size(); ++i)
grid.push_back({ftxui::text(lwsf::displayAmount(dests.second.at(i)) + " XMR to "), ftxui::text(std::move(dests.first.at(i)))});
grid.push_back({ftxui::text(lwsf::displayAmount(dests.second.at(i)) + " WOW to "), ftxui::text(std::move(dests.first.at(i)))});
info_ = ftxui::gridbox(std::move(grid));
}
@@ -268,7 +269,7 @@ namespace lwcli { namespace view
: ftxui::ComponentBase(),
wm_(std::move(wm)),
wal_(std::move(wal)),
title_(ftxui::text(_("Send from account #") + std::to_string(account) + " (" + lwsf::displayAmount(wal_->unlockedBalance(account)) + " XMR available)")),
title_(ftxui::text(_("Send from account #") + std::to_string(account) + " (" + lwsf::displayAmount(wal_->unlockedBalance(account)) + " WOW available)")),
priority_names_({_("Auto"), _("Unimportant"), _("Normal"), _("Elevated"), _("Priority")}),
dests_(),
dests_ui_(),
@@ -457,7 +458,7 @@ namespace lwcli { namespace view
error_.reset();
if (std::get<0>(oa).empty())
error_ = ftxui::text(_("No XMR OpenAlias found for ") + std::get<1>(oa)->second);
error_ = ftxui::text(_("No WOW OpenAlias found for ") + std::get<1>(oa)->second);
else if (!lwsf::addressValid(std::get<0>(oa), wal_->nettype()))
error_ = ftxui::text(_("OpenAlias record is invalid for ") + std::get<1>(oa)->second);
else if (!closing_)
@@ -526,7 +527,7 @@ namespace lwcli { namespace view
ftxui::Elements row;
row.reserve(6);
row.push_back(std::get<0>(e)->Render() | min_amount_size);
row.push_back(ftxui::text(" XMR to "));
row.push_back(ftxui::text(" WOW to "));
row.push_back(std::get<1>(e)->Render());
if (!animate)
{