Bitexplorer Bitcoin Transaction Visualizer: Jeff Lee Lintao Ma Narayan Timsina December 11, 2017
Bitexplorer Bitcoin Transaction Visualizer: Jeff Lee Lintao Ma Narayan Timsina December 11, 2017
Jeff Lee
Lintao Ma
Narayan Timsina
1 Daily Activities 2
1.1 November 6th . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 November 8th . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 November 10th . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.4 November 13th . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.5 November 15th . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.6 November 17th . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.7 November 20th . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.8 Nomember 24th . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.9 November 26th . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2 Burndown Chart 5
3 Product Backlog 6
4 UML Diagram 7
5 User Manual 8
5.1 Start Screen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
5.2 Explorer Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
5.3 Traveler Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1
Chapter 1
Daily Activities
2
• Each new transaction is put in a Queue to be added.
• Queue is flushed and new balls are added to a list, appear in screen with
random motion and size proportional to transaction value.
Transaction Graph
• Graph groups of transactions in bar form, displays what size transactions
are most popular
3
• Saves total transaction volume, biggest transaction, parent block hash,
and more.
• Displays simple text on screen to show the information.
Blockchain Travelling
• Utilizes Blockchain linked-list style structure to allow the parent block or
child block to be quickly loaded.
• Each block has a parent block address, parentBlock object, and childBlock
object
• If the parent has not been loaded, we fetch the info
• If the parent has been loaded, it is saved in parentBlock.
• childBlock is set on creation, as every block must have a child.
• Latest Block is noted to user, does not have a child.
4
Chapter 2
Burndown Chart
5
Chapter 3
Product Backlog
6
Chapter 4
UML Diagram
src
Ball
- isSelected : boolean
BitExplorer - value : double
- MINSPEED : float = 2.5 Button
- isConnected, isPaused, hasStarted,
- MAXSPEED : INT = 10
showKey : boolean = false - xPos, yPos, height, width,
- diameter, xPos, yPos, ySpd, xSpd : float
- screenWidth : int = 800 normalColorm highlightedColor : int
- fAddress, tAddress : String
- screenHeight : int = 600 - mouseIsOver : boolean = false
- xDirection : int = 1
- ltPointOne, ltOne, ltFive : int = 0 - name : String
- yDirection : int = 1
- currencyTimer : int = 0
- r, g, b : int + Button(xCoordinate : int, yCoordinate : int,
- numTX : int = 0
- randGen : Random = new Random() width : int, height : int, text : String)
- sessionTotalBTC : double = 0.00
- newBallQueue : ArrayDeque<Double> + overButton(mouseX : int, mouseY : int)
+ Ball(val : double, from : String, to : String)
- existingBalls : ArrayList<Ball> + getxPos() : int
+ move(screenWidth : int, screenHieht : width)
- streamButtons : ArrayList<Button> + getyPos() : int
+ getDiameter() : double
- exploreButtons : ArrayList<Button> + getHeight() : int
+ getRed() : int
- startButtons : ArrayList<Buttons> + getWidth() : int
+ getGreen() : int
- currentBlock : Block + setRectColor(rectColor : int)
+ getBlue() : int
- pauseButton, clearButton, modeButton, + getHighlightedColor() : int
+ getxPosition() : float
parentButton, childButton : Button + mouseIsOver() : boolean
+ getYPosition() : float
- streamButton, exploreButton, refreshButton, + setMouseIsOver(mouseIsOver : boolean)
+ getValueBTC() : double
keyButton : Button + getButtonColor() : String
+ getFromAddress() : String
- bitFont, typeFont, sansFont : PFont + getButtonText() : String
+ getToAddress() : String
- bg : PImage + setButtonText(newName : String)
+ setDirection()
- currentPriceUSD : String + getTextColor() : int
+ setVariablesFromValue()
- modeString : String + mouseIsOver(mX : int, mY : int) Block
- streamString : String = "Transaction Visualizer" + setSpeed()
- explorerString : String = "Blockchain Traveler" + getIsSelected() - hash, parentBlockHash,
- tStrean : TransactionStream maxSentAddress : String
- childBlock, parentBlock : Block
+ settings() - blockNumber, numTX : int
+ setup() - storageSize, totalVolumeBTC, reward TransactionStream
+ draw() feesCollected : double
+ drawSessionTotal() - maxTX : int = 0 - numTX : int = 0
+ drawNumTransactions() - jsonList : ArrayList<String> - app : BitExplorer
+ drawCurrentExchange() - APISTRING : String
+ drawGraph() + TransactionStream(serverURI : URI)
= "https ://blockchain.info/rawblock/"
+ drawBlockInfo() + TransactionStream(serverURI : URI,
+ drawMenuDar() + Block(bHash : String, child : Block) app : BitExplorer)
+ drawButtons() + parseData() + onClose(arg0 : int, closeString :
+ drawBalls() + fetchJSONData() String, arg2 : boolean)
+ drawStartScreen() + getBlockNumber() : int + onError(ex : Exception)
+ drawColorKey() + getFeesCollected() : double + onMessage(message : String )
+ mousePressed() + getNumTxs() : int + onOpen(arg0 : ServerHandshake)
+ manageWSConnection() + getStorageSizeInMB() : double + startStream()
+ pauseVisualizer() + getReward() : double + stopStream()
+ fetchCurrenctBlock() + getBiggestTx() : double + parseMessage(message : String) : String
+ fetchParentBlock() + getTotalBTC() : double + printTx(from : String, to : String, val : double,
+ flushQueue() + getParentBlockHash() : String numberTrans : int)
+ clearBalls() + getChildBlock() : Block
+ addBall(from : String, to : String, + setParentBlock(p : Block)
value : double) + getParentBlock() : Block
+ getMaxAddress() : String
+ isFirstBlock() : boolean
+ printBlock()
7
Chapter 5
User Manual
When BitExplorer is launched, a simple title screen appears that allows the user
to boot into a specific mode: Explorer or Traveler.
8
5.2 Explorer Mode
If Explorer is selected, the frame is updated to show a live stream of all new in-
coming transactions. Each new ball is generated from the center with a random
speed and direction, and a color and size correlated to its transaction value.
9
If the stream becomes to fast to process any information or if more details about
a transaction are desired, the user can pause the visualization which halts any
new transactions from being processed. While paused, a transaction ball can
be hovered over to reveal the sender’s and receiver’s respective addresses. Addi-
tionally, a color key can be shown in the top right to easily see an approximate
value of each transaction.
10
5.3 Traveler Mode
If the user boots into Traveler mode, the most recent block is fetched from the
Blockchain API and the relevant information is displayed onscreen. Addition-
ally, the user can use the mode button in the top right to toggle between modes
after booting. The Traveler mode displays the most relevant information for
each block, and can access each successive or previous block with the child and
parent buttons below the display.
11