From 6a7fd241eb696f1c970cd4cde0e5e99d43f04ea3 Mon Sep 17 00:00:00 2001
From: j-berman <justinberman@protonmail.com>
Date: Mon, 21 Feb 2022 08:17:30 -0500
Subject: [PATCH 1/4] per_kb_fee -> per_byte_fee (#25)

---
 src/rest_server.cpp      | 10 +++++-----
 src/rpc/light_wallet.cpp |  2 +-
 src/rpc/light_wallet.h   |  2 +-
 3 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/src/rest_server.cpp b/src/rest_server.cpp
index e5ad1c5..834569c 100644
--- a/src/rest_server.cpp
+++ b/src/rest_server.cpp
@@ -540,12 +540,12 @@ namespace lws
         if (resp->size_scale == 0 || 1024 < resp->size_scale || resp->fee_mask == 0)
           return {lws::error::bad_daemon_response};
 
-        const std::uint64_t per_kb_fee =
-          resp->estimated_base_fee * (1024 / resp->size_scale);
-        const std::uint64_t per_kb_fee_masked =
-          ((per_kb_fee + (resp->fee_mask - 1)) / resp->fee_mask) * resp->fee_mask;
+        const std::uint64_t per_byte_fee =
+          resp->estimated_base_fee / resp->size_scale;
+        const std::uint64_t per_byte_fee_masked =
+          ((per_byte_fee + (resp->fee_mask - 1)) / resp->fee_mask) * resp->fee_mask;
 
-        return response{per_kb_fee_masked, resp->fee_mask, rpc::safe_uint64(received), std::move(unspent), std::move(req.creds.key)};
+        return response{per_byte_fee_masked, resp->fee_mask, rpc::safe_uint64(received), std::move(unspent), std::move(req.creds.key)};
       }
     };
 
diff --git a/src/rpc/light_wallet.cpp b/src/rpc/light_wallet.cpp
index c0fa33e..1007136 100644
--- a/src/rpc/light_wallet.cpp
+++ b/src/rpc/light_wallet.cpp
@@ -294,7 +294,7 @@ namespace lws
       return expand_outputs{src, self.user_key};
     };
     wire::object(dest,
-      WIRE_FIELD_COPY(per_kb_fee),
+      WIRE_FIELD_COPY(per_byte_fee),
       WIRE_FIELD_COPY(fee_mask),
       WIRE_FIELD_COPY(amount),
       wire::field("outputs", wire::as_array(std::cref(self.outputs), expand))
diff --git a/src/rpc/light_wallet.h b/src/rpc/light_wallet.h
index 21468b0..c38a6f7 100644
--- a/src/rpc/light_wallet.h
+++ b/src/rpc/light_wallet.h
@@ -155,7 +155,7 @@ namespace rpc
   struct get_unspent_outs_response
   {
     get_unspent_outs_response() = delete;
-    std::uint64_t per_kb_fee;
+    std::uint64_t per_byte_fee;
     std::uint64_t fee_mask;
     safe_uint64 amount;
     std::vector<std::pair<db::output, std::vector<crypto::key_image>>> outputs;

From 1e326561521eb8460d03aed49883d9a3bf7785dd Mon Sep 17 00:00:00 2001
From: j-berman <justinberman@protonmail.com>
Date: Mon, 21 Feb 2022 20:12:25 -0500
Subject: [PATCH 2/4] keep old usage of per_kb_fee functional

---
 src/rest_server.cpp      | 12 ++++++------
 src/rpc/light_wallet.cpp |  2 +-
 src/rpc/light_wallet.h   |  3 ++-
 3 files changed, 9 insertions(+), 8 deletions(-)

diff --git a/src/rest_server.cpp b/src/rest_server.cpp
index 834569c..2bae619 100644
--- a/src/rest_server.cpp
+++ b/src/rest_server.cpp
@@ -537,15 +537,15 @@ namespace lws
         if (!resp)
           return resp.error();
 
-        if (resp->size_scale == 0 || 1024 < resp->size_scale || resp->fee_mask == 0)
+        if ((resp->size_scale != 1 && resp->size_scale != 1024) || resp->fee_mask == 0)
           return {lws::error::bad_daemon_response};
 
-        const std::uint64_t per_byte_fee =
-          resp->estimated_base_fee / resp->size_scale;
-        const std::uint64_t per_byte_fee_masked =
-          ((per_byte_fee + (resp->fee_mask - 1)) / resp->fee_mask) * resp->fee_mask;
+        const bool use_per_byte_fee = resp->size_scale == 1;
+        const std::uint64_t base_fee = resp->estimated_base_fee;
+        const std::uint64_t base_fee_masked =
+          ((base_fee + (resp->fee_mask - 1)) / resp->fee_mask) * resp->fee_mask;
 
-        return response{per_byte_fee_masked, resp->fee_mask, rpc::safe_uint64(received), std::move(unspent), std::move(req.creds.key)};
+        return response{base_fee_masked, resp->fee_mask, rpc::safe_uint64(received), std::move(unspent), std::move(req.creds.key), use_per_byte_fee};
       }
     };
 
diff --git a/src/rpc/light_wallet.cpp b/src/rpc/light_wallet.cpp
index 1007136..a410cf9 100644
--- a/src/rpc/light_wallet.cpp
+++ b/src/rpc/light_wallet.cpp
@@ -294,7 +294,7 @@ namespace lws
       return expand_outputs{src, self.user_key};
     };
     wire::object(dest,
-      WIRE_FIELD_COPY(per_byte_fee),
+      wire::field(self.use_per_byte_fee ? "per_byte_fee" : "per_kb_fee", self.base_fee),
       WIRE_FIELD_COPY(fee_mask),
       WIRE_FIELD_COPY(amount),
       wire::field("outputs", wire::as_array(std::cref(self.outputs), expand))
diff --git a/src/rpc/light_wallet.h b/src/rpc/light_wallet.h
index c38a6f7..06961d6 100644
--- a/src/rpc/light_wallet.h
+++ b/src/rpc/light_wallet.h
@@ -155,11 +155,12 @@ namespace rpc
   struct get_unspent_outs_response
   {
     get_unspent_outs_response() = delete;
-    std::uint64_t per_byte_fee;
+    std::uint64_t base_fee; // either per_byte_fee or per_kb_fee
     std::uint64_t fee_mask;
     safe_uint64 amount;
     std::vector<std::pair<db::output, std::vector<crypto::key_image>>> outputs;
     crypto::secret_key user_key;
+    bool use_per_byte_fee;
   };
   void write_bytes(wire::json_writer&, const get_unspent_outs_response&);
 

From e007e6f5057d6e1cc544a25650079fac863a2d5a Mon Sep 17 00:00:00 2001
From: j-berman <justinberman@protonmail.com>
Date: Tue, 22 Feb 2022 02:03:14 -0500
Subject: [PATCH 3/4] Remove server-side masking

---
 src/rest_server.cpp | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/src/rest_server.cpp b/src/rest_server.cpp
index 2bae619..2030ef5 100644
--- a/src/rest_server.cpp
+++ b/src/rest_server.cpp
@@ -541,11 +541,8 @@ namespace lws
           return {lws::error::bad_daemon_response};
 
         const bool use_per_byte_fee = resp->size_scale == 1;
-        const std::uint64_t base_fee = resp->estimated_base_fee;
-        const std::uint64_t base_fee_masked =
-          ((base_fee + (resp->fee_mask - 1)) / resp->fee_mask) * resp->fee_mask;
 
-        return response{base_fee_masked, resp->fee_mask, rpc::safe_uint64(received), std::move(unspent), std::move(req.creds.key), use_per_byte_fee};
+        return response{resp->estimated_base_fee, resp->fee_mask, rpc::safe_uint64(received), std::move(unspent), std::move(req.creds.key), use_per_byte_fee};
       }
     };
 

From 1f3265b541a6b3b27b5a0e423174ef6e1ea09549 Mon Sep 17 00:00:00 2001
From: j-berman <justinberman@protonmail.com>
Date: Sat, 28 May 2022 18:56:26 -0700
Subject: [PATCH 4/4] remove per_kb_fee

---
 src/rest_server.cpp      | 7 ++++---
 src/rpc/light_wallet.cpp | 2 +-
 src/rpc/light_wallet.h   | 3 +--
 3 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/rest_server.cpp b/src/rest_server.cpp
index 2030ef5..ea197f2 100644
--- a/src/rest_server.cpp
+++ b/src/rest_server.cpp
@@ -537,12 +537,13 @@ namespace lws
         if (!resp)
           return resp.error();
 
-        if ((resp->size_scale != 1 && resp->size_scale != 1024) || resp->fee_mask == 0)
+        if (resp->size_scale == 0 || 1024 < resp->size_scale || resp->fee_mask == 0)
           return {lws::error::bad_daemon_response};
 
-        const bool use_per_byte_fee = resp->size_scale == 1;
+        const std::uint64_t per_byte_fee =
+          resp->estimated_base_fee / resp->size_scale;
 
-        return response{resp->estimated_base_fee, resp->fee_mask, rpc::safe_uint64(received), std::move(unspent), std::move(req.creds.key), use_per_byte_fee};
+        return response{per_byte_fee, resp->fee_mask, rpc::safe_uint64(received), std::move(unspent), std::move(req.creds.key)};
       }
     };
 
diff --git a/src/rpc/light_wallet.cpp b/src/rpc/light_wallet.cpp
index a410cf9..1007136 100644
--- a/src/rpc/light_wallet.cpp
+++ b/src/rpc/light_wallet.cpp
@@ -294,7 +294,7 @@ namespace lws
       return expand_outputs{src, self.user_key};
     };
     wire::object(dest,
-      wire::field(self.use_per_byte_fee ? "per_byte_fee" : "per_kb_fee", self.base_fee),
+      WIRE_FIELD_COPY(per_byte_fee),
       WIRE_FIELD_COPY(fee_mask),
       WIRE_FIELD_COPY(amount),
       wire::field("outputs", wire::as_array(std::cref(self.outputs), expand))
diff --git a/src/rpc/light_wallet.h b/src/rpc/light_wallet.h
index 06961d6..c38a6f7 100644
--- a/src/rpc/light_wallet.h
+++ b/src/rpc/light_wallet.h
@@ -155,12 +155,11 @@ namespace rpc
   struct get_unspent_outs_response
   {
     get_unspent_outs_response() = delete;
-    std::uint64_t base_fee; // either per_byte_fee or per_kb_fee
+    std::uint64_t per_byte_fee;
     std::uint64_t fee_mask;
     safe_uint64 amount;
     std::vector<std::pair<db::output, std::vector<crypto::key_image>>> outputs;
     crypto::secret_key user_key;
-    bool use_per_byte_fee;
   };
   void write_bytes(wire::json_writer&, const get_unspent_outs_response&);