diff --git a/frontend/src/components/SentPayment/SentPayment.js b/frontend/src/components/SentPayment/SentPayment.js
index 6837b59d..f27a612c 100644
--- a/frontend/src/components/SentPayment/SentPayment.js
+++ b/frontend/src/components/SentPayment/SentPayment.js
@@ -31,6 +31,10 @@ export default function SentPayment({
const history = useHistory();
+ const peerName = sentPayment.getPeerName();
+ const peerId = sentPayment.getPeerId();
+ const peerDisplay = peerName ? peerName : peerId;
+
const goToSqueakPage = (hash) => {
history.push("/app/squeak/" + hash);
};
@@ -132,7 +136,7 @@ export default function SentPayment({
- {sentPayment.getPeerId()}
+ {peerDisplay}
diff --git a/proto/squeak_admin.proto b/proto/squeak_admin.proto
index 779f1794..27a96483 100644
--- a/proto/squeak_admin.proto
+++ b/proto/squeak_admin.proto
@@ -585,26 +585,29 @@ message SentPayment {
/// The peer id
int32 peer_id = 3;
+ /// The peer name
+ string peer_name = 4;
+
/// The squeak hash
- string squeak_hash = 4;
+ string squeak_hash = 5;
/// The preimage hash
- string preimage_hash = 5;
+ string preimage_hash = 6;
/// The preimage
- string preimage = 6;
+ string preimage = 7;
/// The price_msat
- int64 price_msat = 7;
+ int64 price_msat = 8;
/// The seller node pubkey
- string node_pubkey = 8;
+ string node_pubkey = 9;
/// Valid preimage
- bool preimage_is_valid = 9;
+ bool preimage_is_valid = 10;
/// time_ms
- int64 time_ms = 10;
+ int64 time_ms = 11;
}
message SyncSqueakRequest {
diff --git a/squeaknode/admin/squeak_admin_server_handler.py b/squeaknode/admin/squeak_admin_server_handler.py
index 6ca0aed1..ce513ce1 100644
--- a/squeaknode/admin/squeak_admin_server_handler.py
+++ b/squeaknode/admin/squeak_admin_server_handler.py
@@ -8,7 +8,7 @@ from squeaknode.admin.util import squeak_entry_to_message
from squeaknode.admin.util import squeak_peer_to_message
from squeaknode.admin.util import squeak_profile_to_message
from squeaknode.admin.util import offer_entry_to_message
-from squeaknode.admin.util import sent_payment_to_message
+from squeaknode.admin.util import sent_payment_with_peer_to_message
from squeaknode.admin.util import sync_result_to_message
from squeaknode.admin.util import squeak_entry_to_detail_message
@@ -391,7 +391,7 @@ class SqueakAdminServerHandler(object):
def handle_get_sent_payments(self, request):
logger.info("Handle get sent payments")
sent_payments = self.squeak_node.get_sent_payments()
- sent_payment_msgs = [sent_payment_to_message(sent_payment) for sent_payment in sent_payments]
+ sent_payment_msgs = [sent_payment_with_peer_to_message(sent_payment) for sent_payment in sent_payments]
return squeak_admin_pb2.GetSentPaymentsReply(
sent_payments=sent_payment_msgs,
)
@@ -400,7 +400,7 @@ class SqueakAdminServerHandler(object):
sent_payment_id = request.sent_payment_id
logger.info("Handle get sent payment with id: {}".format(sent_payment_id))
sent_payment = self.squeak_node.get_sent_payment(sent_payment_id)
- sent_payment_msg = sent_payment_to_message(sent_payment)
+ sent_payment_msg = sent_payment_with_peer_to_message(sent_payment)
return squeak_admin_pb2.GetSentPaymentReply(
sent_payment=sent_payment_msg,
)
diff --git a/squeaknode/admin/util.py b/squeaknode/admin/util.py
index 55d64f35..4f09ba5a 100644
--- a/squeaknode/admin/util.py
+++ b/squeaknode/admin/util.py
@@ -73,13 +73,16 @@ def offer_entry_to_message(offer_entry):
invoice_expiry=offer.invoice_expiry,
)
-def sent_payment_to_message(sent_payment):
- if sent_payment is None:
+def sent_payment_with_peer_to_message(sent_payment_with_peer):
+ if sent_payment_with_peer is None:
return None
+ sent_payment = sent_payment_with_peer.sent_payment
+ peer = sent_payment_with_peer.peer
return squeak_admin_pb2.SentPayment(
sent_payment_id=sent_payment.sent_payment_id,
offer_id=sent_payment.offer_id,
peer_id=sent_payment.peer_id,
+ peer_name=peer.peer_name,
squeak_hash=sent_payment.squeak_hash,
preimage_hash=sent_payment.preimage_hash,
preimage=sent_payment.preimage,
diff --git a/squeaknode/core/sent_payment_with_peer.py b/squeaknode/core/sent_payment_with_peer.py
new file mode 100644
index 00000000..4c9598c8
--- /dev/null
+++ b/squeaknode/core/sent_payment_with_peer.py
@@ -0,0 +1,9 @@
+from collections import namedtuple
+
+SentPaymentWithPeer = namedtuple(
+ "SentPaymentWithPeer",
+ [
+ "sent_payment",
+ "peer",
+ ],
+)
diff --git a/squeaknode/db/squeak_db.py b/squeaknode/db/squeak_db.py
index 1e4089ea..3a6db120 100644
--- a/squeaknode/db/squeak_db.py
+++ b/squeaknode/db/squeak_db.py
@@ -22,6 +22,7 @@ from squeak.core import CSqueak
from squeaknode.blockchain.util import parse_block_header
from squeaknode.core.offer import Offer
from squeaknode.core.offer_with_peer import OfferWithPeer
+from squeaknode.core.sent_payment_with_peer import SentPaymentWithPeer
from squeaknode.core.squeak_entry import SqueakEntry
from squeaknode.core.squeak_entry_with_profile import SqueakEntryWithProfile
from squeaknode.server.squeak_peer import SqueakPeer
@@ -900,7 +901,13 @@ class SqueakDb:
def get_sent_payments(self):
""" Get all sent payments. """
s = (
- select([self.sent_payments])
+ select([self.sent_payments, self.peers])
+ .select_from(
+ self.offers.outerjoin(
+ self.peers,
+ self.peers.c.id == self.sent_payments.c.peer_id,
+ )
+ )
.order_by(
self.sent_payments.c.created.desc(),
)
@@ -908,16 +915,25 @@ class SqueakDb:
with self.get_connection() as connection:
result = connection.execute(s)
rows = result.fetchall()
- sent_payments = [self._parse_sent_payment(row) for row in rows]
+ sent_payments = [self._parse_sent_payment_with_peer(row) for row in rows]
return sent_payments
def get_sent_payment(self, sent_payment_id):
""" Get sent payment by id. """
- s = select([self.sent_payments]).where(self.sent_payments.c.sent_payment_id == sent_payment_id)
+ s = (
+ select([self.sent_payments, self.peers])
+ .select_from(
+ self.offers.outerjoin(
+ self.peers,
+ self.peers.c.id == self.sent_payments.c.peer_id,
+ )
+ )
+ .where(self.sent_payments.c.sent_payment_id == sent_payment_id)
+ )
with self.get_connection() as connection:
result = connection.execute(s)
row = result.fetchone()
- return self._parse_sent_payment(row)
+ return self._parse_sent_payment_with_peer(row)
def _parse_squeak_entry(self, row):
if row is None:
@@ -1030,5 +1046,15 @@ class SqueakDb:
price_msat=row["price_msat"],
node_pubkey=row["node_pubkey"],
preimage_is_valid=row["preimage_is_valid"],
- time_ms=row["created"],
+ time_ms=row[self.sent_payments.c.created],
+ )
+
+ def _parse_sent_payment_with_peer(self, row):
+ if row is None:
+ return None
+ sent_payment = self._parse_sent_payment(row)
+ peer = self._parse_squeak_peer(row)
+ return SentPaymentWithPeer(
+ sent_payment=sent_payment,
+ peer=peer,
)