Skip to content

Commit 36efb5f

Browse files
authored
Merge pull request #2 from bsv-blockchain/wip
Add TSTN
2 parents e4a1c3a + d72302c commit 36efb5f

File tree

13 files changed

+110
-94
lines changed

13 files changed

+110
-94
lines changed

Makefile

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
BINARY_NAME=teranode-p2p-poc
33
FRONTEND_DIR=frontend-react
44
BUILD_DIR=build
5+
REACT_PORT?=30001
56

67
# Default target
78
.PHONY: all
@@ -22,6 +23,9 @@ help:
2223
@echo " docker-build - Build Docker image"
2324
@echo " docker-run - Run Docker container"
2425
@echo " help - Show this help message"
26+
@echo ""
27+
@echo "Environment variables:"
28+
@echo " REACT_PORT - Port for React dev server (default: 30001)"
2529

2630
# Install React dependencies
2731
.PHONY: install-frontend
@@ -59,13 +63,13 @@ run: build
5963
.PHONY: dev
6064
dev: install-frontend
6165
@echo "Starting development servers..."
62-
@echo "Go server will run on :8080, React dev server on :3000"
63-
@echo "Open http://localhost:3000 for development or http://localhost:8080 for production build"
66+
@echo "Go server will run on :8080, React dev server on :$(REACT_PORT)"
67+
@echo "Open http://localhost:$(REACT_PORT) for development or http://localhost:8080 for production build"
6468
@if [ ! -f config.yaml ]; then \
6569
echo "Warning: config.yaml not found. Make sure to create it before running."; \
6670
fi
6771
@trap 'kill %1 %2' EXIT; \
68-
(cd $(FRONTEND_DIR) && npm start) & \
72+
(cd $(FRONTEND_DIR) && PORT=$(REACT_PORT) npm start) & \
6973
go run cmd/main.go & \
7074
wait
7175

frontend-react/src/components/Dashboard.tsx

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import PaginationComponent from './Pagination';
1010
import WebSocketStatusComponent from './WebSocketStatus';
1111
import {
1212
BlockCard,
13-
MiningCard,
13+
// MiningCard, // Temporarily disabled
1414
SubtreeCard,
1515
HandshakeCard,
1616
RejectedTxCard
@@ -89,7 +89,9 @@ export const Dashboard: React.FC = () => {
8989
ApiService.getMessageTypes(),
9090
ApiService.getMessageStats()
9191
]);
92-
setNetworks(networksData);
92+
// Only show mainnet, testnet, and teratestnet
93+
const selectedNetworks: Network[] = ['mainnet', 'testnet', 'teratestnet'];
94+
setNetworks(selectedNetworks);
9395
setMessageTypes(messageTypesData);
9496
setStats({
9597
totalMessages: statsData.totalMessages || 0,
@@ -172,8 +174,9 @@ export const Dashboard: React.FC = () => {
172174
switch (messageType) {
173175
case 'block':
174176
return <BlockCard key={item.ID || index} block={item as Block} isNew={isNew} />;
175-
case 'miningon':
176-
return <MiningCard key={item.ID || index} mining={item as MiningOn} isNew={isNew} />;
177+
// Temporarily disabling miningon message type
178+
// case 'miningon':
179+
// return <MiningCard key={item.ID || index} mining={item as MiningOn} isNew={isNew} />;
177180
case 'subtree':
178181
return <SubtreeCard key={item.ID || index} subtree={item as Subtree} isNew={isNew} />;
179182
case 'handshake':

frontend-react/src/components/MessageCards.tsx

Lines changed: 51 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -167,60 +167,61 @@ export const BlockCard: React.FC<BlockCardProps> = ({ block, isNew }) => (
167167
</MessageCardBase>
168168
);
169169

170-
interface MiningCardProps {
171-
mining: MiningOn;
172-
isNew?: boolean;
173-
}
170+
// Temporarily commenting out MiningCard component
171+
// interface MiningCardProps {
172+
// mining: MiningOn;
173+
// isNew?: boolean;
174+
// }
174175

175-
export const MiningCard: React.FC<MiningCardProps> = ({ mining, isNew }) => (
176-
<MessageCardBase
177-
icon="⛏️"
178-
title="Mining Activity"
179-
network={mining.Network}
180-
receivedAt={mining.ReceivedAt}
181-
isNew={isNew}
182-
sentFromPeer={mining.sentFromPeer}
183-
peerID={mining.PeerID}
184-
>
185-
<div className="grid grid-cols-1 sm:grid-cols-2 gap-3 sm:gap-4">
186-
<div>
187-
<span className="text-xs sm:text-sm font-medium text-gray-500">Block Hash</span>
188-
<p className="font-mono text-xs sm:text-sm text-gray-900 truncate" title={mining.Hash}>
189-
{mining.Hash}
190-
</p>
191-
</div>
192-
<div>
193-
<span className="text-xs sm:text-sm font-medium text-gray-500">Height</span>
194-
<p className="text-xs sm:text-sm text-gray-900">{mining.Height?.toLocaleString() || 'N/A'}</p>
195-
</div>
196-
</div>
176+
// export const MiningCard: React.FC<MiningCardProps> = ({ mining, isNew }) => (
177+
// <MessageCardBase
178+
// icon="⛏️"
179+
// title="Mining Activity"
180+
// network={mining.Network}
181+
// receivedAt={mining.ReceivedAt}
182+
// isNew={isNew}
183+
// sentFromPeer={mining.sentFromPeer}
184+
// peerID={mining.PeerID}
185+
// >
186+
// <div className="grid grid-cols-1 sm:grid-cols-2 gap-3 sm:gap-4">
187+
// <div>
188+
// <span className="text-xs sm:text-sm font-medium text-gray-500">Block Hash</span>
189+
// <p className="font-mono text-xs sm:text-sm text-gray-900 truncate" title={mining.Hash}>
190+
// {mining.Hash}
191+
// </p>
192+
// </div>
193+
// <div>
194+
// <span className="text-xs sm:text-sm font-medium text-gray-500">Height</span>
195+
// <p className="text-xs sm:text-sm text-gray-900">{mining.Height?.toLocaleString() || 'N/A'}</p>
196+
// </div>
197+
// </div>
197198

198-
<div className="grid grid-cols-1 sm:grid-cols-2 gap-3 sm:gap-4">
199-
<div>
200-
<span className="text-xs sm:text-sm font-medium text-gray-500">Size</span>
201-
<p className="text-xs sm:text-sm text-gray-900">{mining.SizeInBytes ? (mining.SizeInBytes / 1024).toFixed(1) + ' KB' : 'N/A'}</p>
202-
</div>
203-
<div>
204-
<span className="text-xs sm:text-sm font-medium text-gray-500">TX Count</span>
205-
<p className="text-xs sm:text-sm text-gray-900">{mining.TxCount?.toLocaleString() || 'N/A'}</p>
206-
</div>
207-
</div>
199+
// <div className="grid grid-cols-1 sm:grid-cols-2 gap-3 sm:gap-4">
200+
// <div>
201+
// <span className="text-xs sm:text-sm font-medium text-gray-500">Size</span>
202+
// <p className="text-xs sm:text-sm text-gray-900">{mining.SizeInBytes ? (mining.SizeInBytes / 1024).toFixed(1) + ' KB' : 'N/A'}</p>
203+
// </div>
204+
// <div>
205+
// <span className="text-xs sm:text-sm font-medium text-gray-500">TX Count</span>
206+
// <p className="text-xs sm:text-sm text-gray-900">{mining.TxCount?.toLocaleString() || 'N/A'}</p>
207+
// </div>
208+
// </div>
208209

209-
<div>
210-
<span className="text-sm font-medium text-gray-500">Miner</span>
211-
<p className="font-mono text-sm text-gray-900 truncate" title={mining.Miner}>
212-
{mining.Miner || 'Unknown'}
213-
</p>
214-
</div>
210+
// <div>
211+
// <span className="text-sm font-medium text-gray-500">Miner</span>
212+
// <p className="font-mono text-sm text-gray-900 truncate" title={mining.Miner}>
213+
// {mining.Miner || 'Unknown'}
214+
// </p>
215+
// </div>
215216

216-
<div>
217-
<span className="text-sm font-medium text-gray-500">Previous Hash</span>
218-
<p className="font-mono text-sm text-gray-900 truncate" title={mining.PreviousHash}>
219-
{mining.PreviousHash}
220-
</p>
221-
</div>
222-
</MessageCardBase>
223-
);
217+
// <div>
218+
// <span className="text-sm font-medium text-gray-500">Previous Hash</span>
219+
// <p className="font-mono text-sm text-gray-900 truncate" title={mining.PreviousHash}>
220+
// {mining.PreviousHash}
221+
// </p>
222+
// </div>
223+
// </MessageCardBase>
224+
// );
224225

225226
interface SubtreeCardProps {
226227
subtree: Subtree;

frontend-react/src/components/MessageListSection.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import React, { useState, useEffect } from 'react';
22
import { Message, ApiResponse, Block, MiningOn, Subtree, Handshake, RejectedTx } from '../types/Message';
33
import { ApiService } from '../services/api';
44
import { MessageParser } from '../utils/messageParser';
5-
import { BlockCard, MiningCard, SubtreeCard, HandshakeCard, RejectedTxCard } from './MessageCards';
5+
import { BlockCard, /* MiningCard, */ SubtreeCard, HandshakeCard, RejectedTxCard } from './MessageCards';
66
import Pagination from './Pagination';
77

88
interface MessageListSectionProps {
@@ -125,8 +125,9 @@ export const MessageListSection: React.FC<MessageListSectionProps> = ({ peerID,
125125
switch (messageType) {
126126
case 'block':
127127
return <BlockCard key={message.ID} block={parsedMessage as Block} isNew={false} />;
128-
case 'miningon':
129-
return <MiningCard key={message.ID} mining={parsedMessage as MiningOn} isNew={false} />;
128+
// Temporarily disabled miningon messages
129+
// case 'miningon':
130+
// return <MiningCard key={message.ID} mining={parsedMessage as MiningOn} isNew={false} />;
130131
case 'subtree':
131132
return <SubtreeCard key={message.ID} subtree={parsedMessage as Subtree} isNew={false} />;
132133
case 'handshake':

frontend-react/src/components/MessageTypeFilter.tsx

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,12 @@ const typeInfo: Record<MessageType | 'all', { label: string; icon: string; descr
1818
icon: '📦',
1919
description: 'New block announcements'
2020
},
21-
miningon: {
22-
label: 'Mining',
23-
icon: '⛏️',
24-
description: 'Mining activity notifications'
25-
},
21+
// Temporarily hiding miningon message type
22+
// miningon: {
23+
// label: 'Mining',
24+
// icon: '⛏️',
25+
// description: 'Mining activity notifications'
26+
// },
2627
subtree: {
2728
label: 'Subtrees',
2829
icon: '🌳',

frontend-react/src/components/PeerDetail.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ const PeerDetail: React.FC = () => {
122122
const getMessageTypeIcon = (type: string) => {
123123
const icons: Record<string, string> = {
124124
block: '📦',
125-
miningon: '⛏️',
125+
// miningon: '⛏️', // Temporarily disabled
126126
subtree: '🌳',
127127
handshake: '🤝',
128128
rejected_tx: '❌',

frontend-react/src/components/Peers.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ const Peers: React.FC = () => {
7474
const getMessageTypeIcon = (type: string) => {
7575
switch (type) {
7676
case 'block': return '🔲';
77-
case 'miningon': return '⛏️';
77+
// case 'miningon': return '⛏️'; // Temporarily disabled
7878
case 'subtree': return '🌳';
7979
case 'handshake': return '🤝';
8080
case 'rejected_tx': return '❌';

frontend-react/src/components/Stats.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ const Stats: React.FC = () => {
6363
const getMessageTypeIcon = (type: string) => {
6464
switch (type) {
6565
case 'block': return '🔲';
66-
case 'miningon': return '⛏️';
66+
// case 'miningon': return '⛏️'; // Temporarily disabled
6767
case 'subtree': return '🌳';
6868
case 'handshake': return '🤝';
6969
case 'rejected_tx': return '❌';

frontend-react/src/services/api.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,8 @@ export class ApiService {
7777
return await response.json();
7878
} catch (error) {
7979
console.error('Error fetching networks:', error);
80-
// Temporarily only showing mainnet and testnet for mobile UI
81-
return ['mainnet', 'testnet'];
82-
// Full list: ['mainnet', 'testnet', 'regtest', 'stn', 'teratestnet', 'tstn'];
80+
// Return selected networks as fallback
81+
return ['mainnet', 'testnet', 'teratestnet'];
8382
}
8483
}
8584

@@ -92,7 +91,9 @@ export class ApiService {
9291
return await response.json();
9392
} catch (error) {
9493
console.error('Error fetching message types:', error);
95-
return ['block', 'miningon', 'subtree', 'handshake', 'rejected_tx'];
94+
// Temporarily removing 'miningon' from visible message types
95+
// return ['block', 'miningon', 'subtree', 'handshake', 'rejected_tx'];
96+
return ['block', 'subtree', 'handshake', 'rejected_tx'];
9697
}
9798
}
9899

@@ -232,8 +233,9 @@ export class ApiService {
232233
switch (filters.messageType) {
233234
case 'block':
234235
return await this.getBlocks(filters);
235-
case 'miningon':
236-
return await this.getMiningMessages(filters);
236+
// Temporarily disabling miningon message type
237+
// case 'miningon':
238+
// return await this.getMiningMessages(filters);
237239
case 'subtree':
238240
return await this.getSubtrees(filters);
239241
case 'handshake':

frontend-react/src/services/messageAggregator.ts

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,17 @@ export class MessageAggregatorService {
2323

2424
try {
2525
// Fetch from all specialized endpoints in parallel
26-
const [blocks, mining, subtrees, handshakes, rejectedTx] = await Promise.all([
26+
const [blocks, /* mining, */ subtrees, handshakes, rejectedTx] = await Promise.all([
2727
this.fetchWithErrorHandling(() => ApiService.getBlocks({ ...filters, limit: 100, page: 1 })),
28-
this.fetchWithErrorHandling(() => ApiService.getMiningMessages({ ...filters, limit: 100, page: 1 })),
28+
// this.fetchWithErrorHandling(() => ApiService.getMiningMessages({ ...filters, limit: 100, page: 1 })), // Temporarily disabled
2929
this.fetchWithErrorHandling(() => ApiService.getSubtrees({ ...filters, limit: 100, page: 1 })),
3030
this.fetchWithErrorHandling(() => ApiService.getHandshakes({ ...filters, limit: 100, page: 1 })),
3131
this.fetchWithErrorHandling(() => ApiService.getRejectedTransactions({ ...filters, limit: 100, page: 1 }))
3232
]);
3333

3434
console.log('Fetched data from specialized endpoints:', {
3535
blocks: blocks?.data?.length || 0,
36-
mining: mining?.data?.length || 0,
36+
// mining: mining?.data?.length || 0, // Temporarily disabled
3737
subtrees: subtrees?.data?.length || 0,
3838
handshakes: handshakes?.data?.length || 0,
3939
rejectedTx: rejectedTx?.data?.length || 0
@@ -54,16 +54,16 @@ export class MessageAggregatorService {
5454
});
5555
}
5656

57-
// Add mining messages
58-
if (mining?.data) {
59-
mining.data.forEach((miningMsg: MiningOn) => {
60-
aggregatedMessages.push({
61-
data: miningMsg,
62-
type: 'miningon',
63-
sortKey: miningMsg.ReceivedAt
64-
});
65-
});
66-
}
57+
// Temporarily disabled mining messages
58+
// if (mining?.data) {
59+
// mining.data.forEach((miningMsg: MiningOn) => {
60+
// aggregatedMessages.push({
61+
// data: miningMsg,
62+
// type: 'miningon',
63+
// sortKey: miningMsg.ReceivedAt
64+
// });
65+
// });
66+
// }
6767

6868
// Add subtrees
6969
if (subtrees?.data) {

0 commit comments

Comments
 (0)