WebUITo access WebUI, just type
127.0.0.1:8833 or
localhost:8833 on your Browser. You'll see homepage of Gocoin which show some statistic about your node. Most parts is easy to understand if you already use Bitcoin Core with primary intention to run full node. I don't what SPB refers though.
"Transactions" tab shows your node mempool. Compared with Bitcoin Core, Gocoin show more detail information about your node mempool statistic. You can enable/disable memory pool and transaction relay here. You also can upload and broadcast transaction as well. I haven't test this feature
yet, so i don't know accepted transaction file format.
If you scroll down, you also can see list of transaction on your node mempool. It's quite detailed where it shows total signature operation and time to verify the transaction in milliseconds (ms). You also can choose how much transaction to be shown and how it's sorted.
"Blocks" tab show some newest blocks. It's quite interesting to see total signature operation of each block, which rarely shown on Bitcoin block explorer. The rest is something you can see on most block explorer.
"Miners" tab show statistic about miner during last 24 hours. I like how Gocoin show how much BTC earned by miner/pool from transaction fees.
"Counters" tab show lots of statistic about your node. Most of you won't find it's interesting, unless you're trying to analyze something.
TextUITextUI is available after you start Gocoin from terminal, load all UTXO/mempool to RAM and optionally start WebUI server. When you enter
help, there are 56 available commands. But i'll just show few command here. By the way, the TextUI doesn't support key up to show previous typed command.
Gocoin client version 1.10.1
Using config file gocoin.conf
Using modernc.org/memory package to skip GC for UTXO records
Public auth key: @2295tiTyJeYkL8aroquqbuA8EEt5YPYCGQouSfGu7t9Gv
Using libsecp256k1.a for ECVerify, SchnorrVerify & CheckPayToContact
Blockchain open in 1m16.1746388s. 5078 + 9374 MB of RAM used (6024)
Connect to bitcoin network via 127.0.0.1:8333
1404 transactions taking 990429 Bytes loaded from mempool.dmp
201 transactions use 212 memory inputs
Starting WebUI at 127.0.0.1:8833
ssl_cert/ca.crt not found
> help
The following 56 commands are supported:
allbal, ab - Show Allbalance statistics
balance, a - List balance of given bitcoin address (or raw public key)
ban - Ban a peer specified by IP
bchain, b - Display blockchain statistics
bip9 - Analyze current blockchain for BIP9 bits (add 'all' to see more)
cache - Show blocks cached in memory
configload, cl - Re-load settings from the common file
configsave, cs - Save current settings to a common file
configset, cfg - Set a specific common value - use JSON, omit top {}
conn - Connect to the given node (specify IP and optionally a port)
counters, c - Show all kind of debug counters
dlimit, dl - Set maximum download speed. The value is in KB/second - 0 for unlimited
drop - Disconenct from node with a given IP
friends - Show current friends settings
getmp, mpg - Send getmp message to the peer with the given ID
help, h, ? - Shows this help
info, i - Shows general info about the node
inv - Send inv message to all the peers - specify type & hash
kill - Kill the node. WARNING: not safe - use 'quit' instead
maxouts, o - Show addresses with highest number of outputs [0,1,2,3 or count]
mem - Show detailed memory stats (optionally free, gc or a numeric param)
mempool, mp - Show the mempool statistics
minerstat, m - Look for the miner ID in recent blocks (optionally specify number of hours)
net, n - Show network statistics. Specify ID to see its details.
newblock, nb - build a new block
nodestat, ns - Shows all known nodes version statistics
peeradd, pa - Add a peer to the database, mark it as alive
peerdel, pd - Delete peer from the DB
peers, p - Operation on pers database ('peers help' for help)
pend - Show pending blocks, to be fetched
purge - Purge all unspendable outputs from UTXO database
quit, q - Quit the node
rd - Show recently disconnected incoming connections
redo - Redo last block
richest, r - Show addresses with most coins [0,1,2,3 or count]
savebl - Saves a block with a given hash to a binary file
saveutxo, s - Save UTXO database now
trust, t - Assume all donwloaded blocks trusted (1) or un-trusted (0)
tx1send, stx1 - Broadcast transaction to a single random peer (identified by a given <txid>)
txcheck, txc - Verify consistency of mempool
txchild, ch - show all the children fo the given tx
txdecode, td - Decode a transaction from memory pool (identified by a given <txid>)
txdel, dtx - Remove a transaction from memory pool (identified by a given <txid>)
txlist, ltx - List all the transaction loaded into memory pool up to 1MB space <max_size>
txlistban, ltxb - List the transaction that we have rejected
txload, tx - Load transaction data from the given file, decode it and store in memory
txmpload, mpl - Load transaction from the given file (must be in mempool.dmp format)
txmpsave, mps - Save memory pool to disk
txsave - Save raw transaction from memory pool to disk
txsend, stx - Broadcast transaction from memory pool (identified by a given <txid>)
txsendall, stxa - Broadcast all the transactions (what you see after ltx)
ulimit, ul - Set maximum upload speed. The value is in KB/second - 0 for unlimited
unban - Unban a peer specified by IP[:port] (or 'unban all')
undo - Undo last block
utxo, u - Display UTXO-db statistics
wallet, w - Enable (on) or disable (off) wallet functionality
allbal or
ab shows Bitcoin distribution on each address. I just found out there are at least 11500 Bitcoin stored on Taproot address.
> ab
AllBalMinVal: 0.00100000 UseMapCnt: 100
AllBalancesP2KH: 9316080 records, 15769961 outputs, 8453062.37091608 BTC, 8065 maps
AllBalancesP2SH: 4880392 records, 8708172 outputs, 5060770.48319191 BTC, 4659 maps
AllBalancesP2WKH: 6008374 records, 9031904 outputs, 3097910.65303046 BTC, 2387 maps
AllBalancesP2WSH: 423467 records, 494987 outputs, 734667.71948642 BTC, 78 maps
AllBalancesP2TAP: 29907 records, 32859 outputs, 11509.20487519 BTC, 2 maps
Ready in 2.336s
balance or
a show balance of an address or raw public key. The result is quite detailed which show when and how much an address receive Bitcoin. I really like this feature since it's fast and not exist on Bitcoin. But i wonder why the developer chose
a as short hand option rather than
b,
bl or
bal.
> a bc1qu8ujv03v0g4h4dpvempm9snkrrmrue4m5dsmtf
bc1qu8ujv03v0g4h4dpvempm9snkrrmrue4m5dsmtf has 0.06024620 BTC in 4 records:
0.01468000 BTC 2760df3b1f0ca44b0f698a34017c7c70b631dfea2707c5ecdecacdb327b3494c-003 737049
0.01528000 BTC 601fedd571bdfc1d2a1942820b8a215989a4183178b4b3bb9f22ecd1ccdd2540-002 740308
0.01600750 BTC 4e3a91f58e2fb0669ab8430eb5c4271c75ad7d0be6f52b54fddebfff648791a1-004 744138
0.01427870 BTC f811c517cc2cf53cf37cde949b58e1176edf9406e06ee229ca23e5977cb2ffce-001 746595
Ready in 0.001s
richest or
r show Bitcoin address with most Bitcoin. It also can show richest Bitcoin addressed based on address type. I wouldn't use it much, but it's good this feature exist.
> richest help
Specify the address type or/and number of top records to display
Valid address types: 0-P2K, 1-P2SH, 2-P2WKH, 3-P2WSH, 4-P2TAP
Ready in 0.000s
> richest 1 5
Counting only addr type P2SH
5059253.17916417 BTC in 8708418 unspent recs from 4880479 P2SH addresses
Top addresses with at least 0.00000000 BTC: 4880479
1 34xp4vRoCGJym3xR7yCVPFHoCNxv4Twseo 252597.22065495 BTC in 141 inputs
2 3LYJfcfHPXYJreMsASk2jkn69LWEYKzexb 125351.13621699 BTC in 15 inputs
3 3M219KR5vEneNb47ewrPfWyb5jQ2DjxRP6 101266.00000000 BTC in 2 inputs
4 37XuVSEpWW4trkfmvWzegTHQt7BdktSKUs 94505.32948895 BTC in 11 inputs
5 3Kzh9qAqVWQhEsfQz7zEQL1EuSx5tyNLNS 66688.63295257 BTC in 157 inputs
Ready in 6.100s
> richest 4 20
Counting only addr type P2TAP
11509.27100655 BTC in 32859 unspent recs from 29907 P2TAP addresses
Top addresses with at least 0.00000000 BTC: 29907
1 bc1ptev79mgw2a8gva285qjx4waunsmwtscz86tv38wylggrvsrdtxdspyg8j7 2000.00089559 BTC in 2 inputs
2 bc1pgr6fsrurg8mz3rymkkfsagrl03dhaj5ep7da7kurhwftc433dynq6hn24l 675.00000000 BTC in 1 inputs
3 bc1pxt5ytk0x4zsx3mknaksy33wju537ry4j7gwnvv232lhgu7hthalqs5e9td 616.59237878 BTC in 1 inputs
4 bc1p6qspdmx9dl88udm8uw3g2m2sxnqcaz2u4jh8wujsz5766499w98qzm48yf 260.00000000 BTC in 1 inputs
5 bc1p6xvd3dkw05zm30ztwcmdlgc8cc5tg3umxr3spnrdfzaenyke9ezs4j6a27 212.71608460 BTC in 1 inputs
6 bc1pmxywlfzfwuucfy28udfgzu4nnm7kyakscvy80fyzzdggzxgvuw0s4g7897 210.92668965 BTC in 1 inputs
7 bc1p8v9752vmw730tc5hm05cuy62aegdngvrkes0qqfjjjrj2lt9s0yqhdv7ht 200.00000000 BTC in 1 inputs
8 bc1ppz5umrxdysczu7ks3q9u9rkhcctuvdamlcw8v88m6hw4vd3n6npqf9rrpj 178.12582122 BTC in 1 inputs
9 bc1pylqj8tcer64h2ampy00s8eq97vqmmkq0ecupe5rk4l8ulucc77xsqwpryg 169.33314128 BTC in 1 inputs
10 bc1ptw0jdnxmjyknrctlacvmgz0dkd28kfax3xq8rs7xm9ty3u0w9qls3hm9gf 150.00000000 BTC in 1 inputs
11 bc1pn7dm6hv05hmmkuqeqmw9a52rtlx9gqa6u746k2pqle0nua2psdasqdx6ww 139.70007253 BTC in 1 inputs
12 bc1pq9zdsct8ffh3nq9p2rwaj6jrrcpuydmnvrek3e0gjke0lnjpgjpq2h9tae 108.99998237 BTC in 1 inputs
13 bc1p2tv3e8qtksfas4xe7zpt8sya0tc4tm97mul3pv7p0psruf5t6npqe3und9 100.99825585 BTC in 1 inputs
14 bc1p5tx3jfy8yhmwqgh4y3j9uscy0vh24qxjpv0ey0pxqamsz7dn7f0qq3ggkn 100.10100000 BTC in 3 inputs
15 bc1pz25hq6hwp6fsgw2mkepu53q6tqqc57gyk0en45459727rhu7a35seeml2s 99.99999878 BTC in 1 inputs
16 bc1phf8s5phcur3tdf9684yxspz72vlqq99xy26lzw4fru0vvapkxjnqpy7q44 98.67490552 BTC in 2 inputs
17 bc1pa63l4zkwjhq54ucnxkgjwqga3ge7c4mzqqgc9d4s3va2s7e7ga7s2qdt5e 88.96373094 BTC in 1 inputs
18 bc1pk5rcyd308ld4e9dkd8yehd602tr5c5xrgh2ewmgj8y9fk44mnsnqcwp59l 85.02946910 BTC in 1 inputs
19 bc1pv6pe8wfp6yq2np6j6npqhfsavjpsdaemp4kv87usx9zw8lxssfmquhz525 81.39410000 BTC in 3 inputs
20 bc1pj66nqend9wsey6dd5q7cqvxq97y70pey7j0lswgmvwmwcnylynvsfsuaau 80.00174160 BTC in 1 inputs
Ready in 0.034s
Gocoin configurationAs i said earlier, Gocoin can be configured through
gocoin.conf file. But i just realized you can edit it from WebUI homepage. But what surprise me is there are few field which isn't mention on Gocoin config documentation[1] which are
RPC.,
TXPool.Debug and
Memory.FreeAtStart. The RPC is limited to experimentation mining API though[2], so it's not interesting feature for me.
Reducing RAMSince Gocoin RAM usage is quite high, i tried to reduce it's RAM consumption. Based on Gocoin documentation page[1,3]. there are few action i could do. First action is compressing UTXO records. With tools i compiled earlier, it only reduce
UTXO.db file from 8.5GB to 8.2GB
on the HDD. Second action is modifying gocoin.conf which involve memory, you can see my modification below.
{
...
"Memory": {
"GCPercTrshold": 20,
"UseGoHeap": false,
"MaxCachedBlks": 24,
"CacheOnDisk": true,
"PurgeUnspendableUTXO": true
},
...
}
I managed to reduce RAM consumption to ~14.9GB. IMO it's rather small reduction since Gocoin usually use 17-19GB RAM. But there's nothing much i could do since Gocoin still store all UTXO to RAM.
ConclusionAside from RAM usage, Gocoin appear to be decent Bitcoin full node implementation. It's very impressive single developer write Gocoin alone. I don't need instant access to UXO though, so Gocoin isn't suitable for me. But even if i do, the RPC currently limited to mining-related feature.
Some things i like,
* Minimum dependency with easy compilation process
* Lots of features on TextUI
* Neat WebUI, although some feature only available on TextUI
* Lots of external tools
* Fast sync time, which only hold back by my HDD
Some things i don't like,
* Load all UTXO to RAM
* Incomplete documentation
* RPC only support mining-related feature, even though many feature exist on TextUI
[1]
https://gocoin.pl/gocoin_manual_config.html[2]
https://gocoin.pl/gocoin_issues.html[3]
https://gocoin.pl/gocoin_tweaks.html