How cyberpokemon/packetpay works
PacketPay is a secure offline-payment relay simulation: a sender creates a payment on a node, which either sends it directly to the Bank or encrypts and relays it over multicast for later delivery. The Bank is the financial authority, handling account checks, payment execution, transaction history, expiry and idempotency. The README documents the main flows and relay behaviors; sampled source confirms the Bank payment controller’s decrypt-then-process calls and the UDP listener’s event dispatch, but does not expose all service wiring.
Main entry points: service/PaymentServiceImpl.java Payment service · service/PaymentServiceImpl.java Payment processing · UdpMulticastNetworkService.java UDP multicast · PaymentController.java Bank payment API
Components 24
Sender Node
- Node GUI
frontend/node_gui.py - Node payment API
node/src/main/java/com/cyberpokemon/PacketPay/node/node/payment/controller/NodePaymentController.java - Payment service
node/src/main/java/com/cyberpokemon/PacketPay/node/node/payment/service/PaymentServiceImpl.java - Connectivity state
node/src/main/java/com/cyberpokemon/PacketPay/node/node/connectivity/service/ConnectivityServiceImpl.java - Node identity
node/src/main/java/com/cyberpokemon/PacketPay/node/node/identity/service/IdentityServiceImpl.java - Identity store
node/src/main/java/com/cyberpokemon/PacketPay/node/node/identity/store/InMemoryIdentityStore.java - Bank client
node/src/main/java/com/cyberpokemon/PacketPay/node/node/client/BankClientImpl.java
Relay Network
- Relay service
node/src/main/java/com/cyberpokemon/PacketPay/node/node/relay/service/RelayServiceImpl.java - Relay decision
node/src/main/java/com/cyberpokemon/PacketPay/node/node/relay/service/RelayDecisionEngineImpl.java - UDP multicast
node/src/main/java/com/cyberpokemon/PacketPay/node/node/relay/network/UdpMulticastNetworkService.java - Packet event
Bank Services
- Bank payment API
bank/src/main/java/com/cyberpokemon/PacketPay/bank/bank/payment/controller/PaymentController.java - Payment processing
bank/src/main/java/com/cyberpokemon/PacketPay/bank/bank/payment/service/PaymentServiceImpl.java - Idempotency
bank/src/main/java/com/cyberpokemon/PacketPay/bank/bank/idempotency/service/IdempotencyServiceImpl.java - Account services
- Account store
bank/src/main/java/com/cyberpokemon/PacketPay/bank/bank/account/repository/AccountRepository.java - Payment store
bank/src/main/java/com/cyberpokemon/PacketPay/bank/bank/payment/repository/PaymentRepository.java - Transaction state
bank/src/main/java/com/cyberpokemon/PacketPay/bank/bank/idempotency/repository/ProcessedTransactionRepository.java - Bank GUI
frontend/bank_gui.py
Cryptography
- Node encryption
node/src/main/java/com/cyberpokemon/PacketPay/node/node/crypto/CryptoServiceImpl.java - Bank decryption
bank/src/main/java/com/cyberpokemon/PacketPay/bank/bank/crypto/service/CryptoServiceImpl.java - Bank key pair
bank/src/main/java/com/cyberpokemon/PacketPay/bank/bank/crypto/service/KeyPairServiceImpl.java
Other components
- Payment user
- Peer nodes
Connections 24
- Payment user → Node GUI: initiates payment
- Node GUI → Node payment API: submits request
- Node payment API → Payment service: handles payment
- Payment service → Connectivity state: checks status
- Payment service → Node encryption: encrypts request
- Payment service → Bank client: sends directly
- Payment service → Relay service: relays offline
- Payment service → Node identity: uses identity
- Node identity → Identity store: reads and writes
- Bank client → Bank payment API: calls Bank
- Relay service → Relay decision: chooses action
- Relay service → UDP multicast: dispatches packet
- UDP multicast → Peer nodes: multicasts packet
- Peer nodes → UDP multicast: forwards packet
- UDP multicast → Packet event: publishes event
- Bank payment API → Bank decryption: decrypts request
- Bank payment API → Payment processing: processes payment
- Bank decryption → Bank key pair: uses private key
- Payment processing → Idempotency: tracks transaction
- Payment processing → Account services: verifies and updates
- Payment processing → Payment store: stores payment
- Idempotency → Transaction state: stores status
- Account services → Account store: reads and writes
- Bank GUI → Bank payment API: uses Bank API