module Blockchain.Data.Peer ( Peer(..) ) where import Data.ByteString.Internal import Data.Word import Blockchain.Format import Blockchain.Data.RLP --import Debug.Trace --instance Show Block where -- show x = "" data IPAddr = IPAddr Word8 Word8 Word8 Word8 deriving (Show) instance Format IPAddr where format (IPAddr v1 v2 v3 v4) = show v1 ++ "." ++ show v2 ++ "." ++ show v3 ++ "." ++ show v4 data Peer = Peer { ipAddr::IPAddr, peerPort::Word16, uniqueId::String } deriving (Show) instance Format Peer where format peer = format (ipAddr peer) ++ ":" ++ show (peerPort peer) instance RLPSerializable Peer where rlpDecode (RLPArray [RLPString [c1,c2,c3,c4], port, RLPString uid]) = Peer { ipAddr = IPAddr (c2w c1) (c2w c2) (c2w c3) (c2w c4), peerPort = fromInteger $ rlpDecode port, uniqueId = uid } rlpDecode x = error ("rlp2Peer called on non block object: " ++ show x) rlpEncode = error "rlpEncode undefined for Peer"