decred.org/dcrdex@v1.0.5/docs/release-notes/release-notes-0.2.0.md (about) 1 # DCRDEX v0.2.0 (beta) 2 3 May 7, 2021 4 5 For a high level introduction to DCRDEX, please read the [0.1.0 release notes](release-notes-0.1.0.md). 6 7 ## Highlights 8 9 This release includes a large number of improvements to the UI, the 10 communications protocol, and software design. 11 12 The most notable new features are: 13 14 - Numerous UI and usability enhancements including responsive design and depth 15 chart interactivity 16 - Support client control by the Decrediton GUI wallet and use of its accounts 17 - Experimental Bitcoin Cash (BCH) support 18 - Initial changes to support SPV (light) wallets in the next release 19 - Account import/export 20 21 The latest 1.6 release of dcrd and dcrwallet is required for this release of 22 DCRDEX. At the time of release, this corresponds to the v1.6.2 releases. 23 Bitcoin Core 0.20 and 0.21 are both supported. 24 25 ## Important Notices 26 27 Although DCRDEX looks and feels like a regular exchange, the "decentralized" 28 aspect brings an expanded role to the client. Please take the time to read and 29 understand the following: 30 31 - Ensure your nodes (and wallets) are fully **synchronized with the blockchain 32 network before placing orders**. 33 - **Never shutdown your wallets with dexc running**. When shutting down, always 34 stop dexc before stopping your wallets. 35 - If you have to restart dexc with active orders or swaps, you must 36 **immediately login again with your app password when dexc starts up**. 37 - There is an "inaction timeout" when it becomes your client's turn to broadcast 38 a transaction, so be sure not to stop dexc or lose connectivity for longer 39 than that or you risk having your active orders and swaps/matches revoked. If 40 you do have to restart dexc, remember to login as soon as you start it up 41 again. 42 - Only one dexc (client) process should be running for a given user account at 43 any time. For example, if you have identical dexc configurations on two 44 computers and you run dexc and login on both, neither dexc instance will be 45 adequately connected to successfully negotiate swaps. Also note that order 46 history is not synchronized between different installations. 47 - Your DEX server accounts exist inside the dexc.db file, the location of which 48 depends on operating system, but is typically in ~/.dexc/mainnet/dexc.db or 49 %HOMEPATH%\Local\Dexc\mainnet\dexc.db. Do not delete this file. 50 - If you use a non-default bitcoin wallet name, don't forget to set it in 51 bitcoin.conf with a `wallet=wallet_name_here` line so that bitcoind 52 will load it each time it starts. Otherwise, dexc will give you a "wallet not 53 found" error on startup and login. 54 - bitcoind's "smart" fee estimation needs plenty of time to warm up or it is not 55 so smart. When possible, keep your bitcoind running for at least 6 blocks, 56 especially if had not been running for more than an hour, or ensure that the 57 value returned from a bitcoin-cli call to `estimatesmartfee 1` returns a 58 `"feerate"` close to what <https://mempool.space/> reports as "High priority". 59 60 ## Client (dexc) 61 62 ### Features and Improvements 63 64 - Experimental support for Bitcoin Cash (BCH). 65 ([542ed9b](https://github.com/decred/dcrdex/commit/542ed9ba9ef8db3d8f5d3e36b3078c9fa3d5888f)) 66 - Show confirmations for swaps transactions on the Order page when a swap has 67 not yet reached the required number of confirmations. 68 ([ecbfebd](https://github.com/decred/dcrdex/commit/ecbfebdd6f3184b51d6f72011b488edd73e3c5cb)) 69 - Open dialogs can be closed by hitting the "Escape" key. 70 ([7c978cd](https://github.com/decred/dcrdex/commit/7c978cd8436c3fab9e90a80d1a17502e945e76f8)) 71 - Allow changing the dex client "application password". 72 ([8d7163c](https://github.com/decred/dcrdex/commit/8d7163cb9022f9f19ef706f33251a32d228d1c02)) 73 - Responsive browser UI design. 74 ([c91bde4](https://github.com/decred/dcrdex/commit/c91bde4446a5d3e6c3db20a805da380d4c6bf835)) 75 - Differentiate between buy/sell orders in confirmation modal dialog. 76 ([2bdf81f](https://github.com/decred/dcrdex/commit/2bdf81f94262c34a345c84daf4def921e41c7107)) 77 - Clearer revocation notifications. 78 ([c8c9729](https://github.com/decred/dcrdex/commit/c8c9729ba6adb5a1803a8a7e9de30e8aaa81c942)) 79 - Raw transaction data is now transmitted to counterparties in the `'audit'` and 80 `'match_status'` requests. This is a prerequisite for SPV clients. 81 ([3704513](https://github.com/decred/dcrdex/commit/3704513bc63facc234edabf742ec1f87ef80b35d)) 82 - More chart interactivity. (a) Indicators on the depth chart for the user's 83 orders. When the mouse hovers near the indicator, the order is highlighted in 84 the "Your Orders" table. Conversely, when the mouse hovers over a row in the 85 "Your Orders" table, the indicator is highlighted on the chart. (b) Move the 86 legend and hover info to the top. (c) When a rate is entered in the order form 87 for a limit order, display a line indicator at that rate on the depth chart. 88 (d) When the user hovers over an order in the buy/sell tables, display an 89 indicator at that rate on the depth chart. (e) Last zoom level is saved across 90 markets and reloads. (f) Display the total buy/sell volume. 91 ([fb6f3ea](https://github.com/decred/dcrdex/commit/fb6f3eaa7dae7d043aae8ceb5771638554dd5d1c), 92 [08ec4ac](https://github.com/decred/dcrdex/commit/08ec4ac99f06aa23d654cd3855c62c13945b2a2e)) 93 - Multiple authorized browser sessions are now permitted. This refers to logging 94 in to dexc from two different browsers that do not share a cookie store. This 95 is now permitted, however, signing *out* of one session signs out of all 96 sessions. 97 ([030173b](https://github.com/decred/dcrdex/commit/030173b828fabb0cb4b2c9884bbeaa91b1ce7f11)) 98 - A wallet's connection settings and private passphrase can be changed at the 99 same time. Developers should see the `ReconfigureWallet` change. 100 ([761e3e1](https://github.com/decred/dcrdex/commit/761e3e13981a9595623718036913fe54a2c2d764)) 101 - Add account import/export functions. 102 ([1a38c4d](https://github.com/decred/dcrdex/commit/1a38c4decea6c0c02370edf4ed4eee833afbe8c8)) 103 - Add account disable function. 104 ([f414a87](https://github.com/decred/dcrdex/commit/f414a87a3991d8abbdd8347dc46fe350c96d9981)) 105 - Starting dexc when a configured DEX server is unreachable starts a reconnect 106 attempt loop. Previously it was necessary to restart dexc later and hope the 107 server was back. 108 ([c782ffb](https://github.com/decred/dcrdex/commit/c782ffb0a8e4b8dd11360c8a6394a6b64c91cd3e)) 109 - Account-based DCR wallet locking support. With dcrwallet 1.6, accounts may be 110 individually encrypted, with a unique password, in contrast to whole-wallet 111 locking. This allows working with such accounts by using the `accountunlocked` 112 dcrwallet RPC to determine the locking scheme for an account, and the 113 `unlockaccount`/`lockaccount` RPCs instead of `walletpassphrase`/`walletlock`. 114 The "beta" simnet DCR harness now uses an individually-encrypted "default" 115 account. 116 ([ff4e76c](https://github.com/decred/dcrdex/commit/ff4e76cc509e0019f1239316db9e8c7639faf38f), 117 [37cdc9e](https://github.com/decred/dcrdex/commit/37cdc9e640e032ec9b0f0f2da12be637e0f696ea)) 118 - Handling of new server-provided fee rates. This will support SPV clients, and 119 helps ensure that both redeem and order funding transactions are not created 120 with low fee rates when the client's wallet/node is not providing good 121 estimates. 122 ([79a1cb0](https://github.com/decred/dcrdex/commit/79a1cb016f8d08354610767e890c78a9bd3470b4)) 123 - Network-specific loopback IPs for the webserver and RPC server listen 124 addresses. Now by default, dexc listens on 127.0.0.1 for mainnet, 127.0.0.2 125 for testnet, and 127.0.0.3 for simnet. Users are still be able to specify 126 custom addresses with `webaddr` and `rpcaddr`. 127 ([08ec4ac](https://github.com/decred/dcrdex/commit/08ec4ac99f06aa23d654cd3855c62c13945b2a2e)) 128 - Maximum order size estimates on order dialog. Get maximum order estimates 129 based on wallet balances and, in the case of buy orders, the rate in the rate 130 input field. The data is shown in the UI as a small message above the rate 131 field. When you click on the label, the quantity fields are pre-populated with 132 the max order. 133 ([920d1ac](https://github.com/decred/dcrdex/commit/920d1ac50b748ea17c177fe5cad2259300361fef)) 134 - dexcctl / RPC server: Add a matches list to the `myorders` response. 135 ([3bef6ba](https://github.com/decred/dcrdex/commit/3bef6ba8ff8df2af7a8c37fd1c43e6119a1af32f)) 136 - When orders are placed, the client remembers the expected maximum fee rate, 137 and verifies that the rate provided by the server at match time does not 138 exceed this amount. 139 ([2123f10](https://github.com/decred/dcrdex/commit/2123f10a509bbf26ba3e74d3a7583b6524ba9191)) 140 - Add a "fee rate limit" setting to each wallet that is checked against the max 141 fee rate set by the server's config. Orders are blocked by the client if the 142 server specifies a max fee rate that exceeds the client's limit. 143 ([414ffcc](https://github.com/decred/dcrdex/commit/414ffccd83972718d9c3058526101ab745eb36d2)) 144 - On shutdown, the active orders are logged, and inactive trades have their 145 coins released to the wallet if they were not already. 146 ([41749a8](https://github.com/decred/dcrdex/commit/41749a83afb9f234c3f5c5755367df3beb77d8f1)) 147 - Add sample config files. (also server) 148 ([792602b](https://github.com/decred/dcrdex/commit/792602bdab53f2b933f51142df79432fada378e8)) 149 - The `'init'` and `'redeem'` requests are now run asynchronously so most other 150 actions are not blocked while waiting for a response. This is generally an 151 internal change, but it may improve the overall responsiveness of the dexc 152 application. 153 ([a0538bb](https://github.com/decred/dcrdex/commit/a0538bbef5460dd08342b8c99851bc6076faea73)) 154 - Preimage request handling is reworked to prevent blocking for a long period 155 given an incoming preimage request for an unknown order. 156 ([1b66492](https://github.com/decred/dcrdex/commit/1b66492b1ef53670f32c19b484e7366fab977993)) 157 - Add a custom webserver "site" directory argument. 158 ([4506406](https://github.com/decred/dcrdex/commit/4506406d974aaa8463a2e924ccdf1147d8078c45)) 159 - Favor confirmed UTXOs in BTC order funding. This is primarily an internal 160 change, but it can defend against swaps that take too long to confirm. 161 ([3f6e429](https://github.com/decred/dcrdex/commit/3f6e4299c81751558891bcc209cd50825e10183c)) 162 - "Long" execution times (more than 250ms) for incoming message handling and 163 track ticks are now logged. 164 ([529cb0d](https://github.com/decred/dcrdex/commit/529cb0d17154f3a8a391848fa8eb2ff65453ed9c)) 165 166 ### Developer 167 168 - When `Core` is shut down, wallets are locked when the `Run` method returns. 169 Previously, wallets were only locked if the consumer used `PromptShutdown`. 170 ([8976d8d](https://github.com/decred/dcrdex/commit/8976d8d166706ba626cee437d8765fa3ca3794e4)) 171 This change was in 0.1.5, but it is reiterated here as it is an significant 172 change in behavior that Go consumers should note. 173 - Updates to the `User` struct returned by the `User` and `Exchanges` methods of 174 `client/core.Core`. The `client/core.Market` has replaced the 175 `{Base,Quote}{Order,Contract}Locked` fields with methods. 176 ([167efd4](https://github.com/decred/dcrdex/commit/167efd491eb5eed4c1980995be6b48ea5a780f2a)) 177 - When specifying TLS certificates, allow either a filename or the contents of 178 the certificate file. This applies to the `Register`, `GetFee`, and 179 `GetDEXConfig` methods of `client/core.Core`. 180 ([44a3363](https://github.com/decred/dcrdex/commit/44a33633e40bee15e70b700b982c69833317692f)) 181 - Notification subjects are now package-level constants. 182 ([3aef72d](https://github.com/decred/dcrdex/commit/3aef72d00790b2d8b0354efaf844a8fd08f3bdc6)) 183 - `ReconfigureWallet` has a new pass input (`nil` indicates no password change). 184 ([761e3e1](https://github.com/decred/dcrdex/commit/761e3e13981a9595623718036913fe54a2c2d764)) 185 - New order fee estimate API. See the new `(*Core).PreOrder` method and the new 186 returned `OrderEstimate` type. Also see the `PreSwap` and `PreRedeem` methods 187 of `client/asset.Wallet`, and the new types of the same name. 188 ([5394cea](https://github.com/decred/dcrdex/commit/5394ceaa2a0e69518cabb2a3ae4fdb2164a6a08e)) 189 - New `isinitialized` http API endpoint and `Core` method. 190 ([b767a23](https://github.com/decred/dcrdex/commit/b767a23f0c89ec54a1f60e61c9bd21d05daba906)) 191 - Add the `(*Core).GetDEXConfig` method and a corresponding http API endpoint 192 `getdexinfo` the functions similar to `getfee` by making a temporary 193 connection to a DEX with *no existing account*, except that it returns the 194 server's entire config. 195 ([d85f6bc](https://github.com/decred/dcrdex/commit/d85f6bc34d74773a56500089ff4d12e0e3d3380e)) 196 - Check the server's API version and each asset's version that are now returned 197 in the server's `'config'` response. 198 ([e59b47f](https://github.com/decred/dcrdex/commit/e59b47fe777ba94741a38da62b06edd317101873), 199 [205e802](https://github.com/decred/dcrdex/commit/205e8022adcaf8e7a5bda026e80d43edc3c07497), 200 [1bc0cc9](https://github.com/decred/dcrdex/commit/1bc0cc9e9c1ffab8b6ed37dcad96cc136bbcf33f)) 201 - Only active orders are listed by the `User` and `Exchanges` methods of `Core`. 202 Completed orders that are pending retirement are excluded. 203 ([6358d97](https://github.com/decred/dcrdex/commit/6358d97fe1a1977c363519a98c15273c0612a6b2)) 204 - Add profiling switches to dcrdex. A CPU profile file may be specified with 205 `--cpuprofile`. The http profiler may be started with `--httpprof`. 206 ([c17baf9](https://github.com/decred/dcrdex/commit/c17baf93a76f6803af1d354bf0d9d7a51332e475)) 207 - (internal) DCR asset backends now use `rpcclient/v6`, which provide cancelable requests. 208 ([312397a](https://github.com/decred/dcrdex/commit/312397a56d307f71c12696bcaae126f4629c7aea), 209 [9d65d55](https://github.com/decred/dcrdex/commit/9d65d55c8f3b0ca613fb3a7d401346706d65d7e7)) 210 - (internal) BTC's asset backend now uses Decred's `rpcclient` package for 211 cancellation capability. All request now use `RawRequest`. 212 ([cefe6a5](https://github.com/decred/dcrdex/commit/cefe6a5ced3cce460311d3b50dffdfd4ce9aa22f)) 213 - (internal) All incoming response and notification message handlers are wrapped 214 for panic recovery. 215 ([829a661](https://github.com/decred/dcrdex/commit/829a661a4c134ad575f9fdbac67b812c73a53589)) 216 - (internal) Message unmarshalling is now more robust with respect to null 217 payloads. 218 ([9bf1a3e](https://github.com/decred/dcrdex/commit/9bf1a3eeacb86247e8b33067aabcf7fc0cf59f8a)) 219 - Many third party Go dependency updates. 220 ([go.mod diff](https://github.com/decred/dcrdex/compare/4517832...release-v0.2#diff-33ef32bf6c23acb95f5902d7097b7a1d5128ca061167ec0716715b0b9eeaa5f6)) 221 - Update site build system to Webpack 5, and update most other deps. 222 ([a8e76ea](https://github.com/decred/dcrdex/commit/a8e76eacdecf4e30d96248a885c13a27f81a867e)) 223 - Add an ETH simnet harness for support of upcoming ETH support. 224 ([ea10f5a](https://github.com/decred/dcrdex/commit/ea10f5a032ddc365f6982de2f0956e560a26dc2e)) 225 - The simnet harnesses now listen on all interfaces. 226 ([4e246cf](https://github.com/decred/dcrdex/commit/4e246cfbef547f41fee5bad2ab397ab80d89dc2a)) 227 - The Decred wallet harnesses now start dcrwallet with http profiling enabled. 228 ([b96f546](https://github.com/decred/dcrdex/commit/b96f546f3ff67c3fed3f013023c395daab115fc0)) 229 - Rework the `db.MetaMatch` struct. 230 ([db3df62](https://github.com/decred/dcrdex/commit/db3df625eb736442a464dcc3aea424e8a8491a78)) 231 232 ### Fixes 233 234 In addition to numerous fixes that were also in the 0.1.x releases, the 235 most notable fixes are: 236 237 - No longer show the Register dialog if the server for the only registered DEX 238 happens to be down at the time. 239 ([b6ea0ea](https://github.com/decred/dcrdex/commit/b6ea0eaccd92f0c1fe8058a943013217cbf38b0e)) 240 - Correct handling of IPv6 listen addresses. (also on server) 241 ([f0ef965](https://github.com/decred/dcrdex/commit/f0ef965103e035052c5034d0486b44881a0c1067)) 242 - Update the browser UI when orders are placed via dexcctl. 243 ([8cc1502](https://github.com/decred/dcrdex/commit/8cc1502b0bb511513c0cf70117cbc29b0952f8db)) 244 - Better error reporting on the DEX registration dialog. 245 ([2617d75](https://github.com/decred/dcrdex/commit/2617d750f5207d52dfb7afab82634253a99b514c)) 246 - More robust recovery for orders that become unfunded (e.g. user spends coins 247 that were reserved for an order). 248 ([122277e](https://github.com/decred/dcrdex/commit/122277ec0eca5e5cb8151536aa2e2532d15d9af2)) 249 - No longer prematurely broadcast Decred refund transactions. 250 ([03cdf2d](https://github.com/decred/dcrdex/commit/03cdf2d473fc7546892112d78cfa3cfeb6a89605)) 251 - Commitment checksum handling in the presence of missed preimage is now handled 252 the same way as on the server by including the all epoch order commitments in 253 the csum computation, not just the ones with revealed preimages. 254 ([25e3679](https://github.com/decred/dcrdex/commit/25e3679e4e909adf5f0c34821ef14b34357fab42), 255 [7d71ffd](https://github.com/decred/dcrdex/commit/7d71ffd5221e0965aefd532e05d6520b17302a54)) 256 - Never show negative confirmations for swap transactions even before they have 257 been checked. 258 ([fb39b97](https://github.com/decred/dcrdex/commit/fb39b97f1d73e942f6dd79ef0cf0ae4e1a061fcc)) 259 - The mouse wheel only zooms when hovering over the depth chart, no longer 260 scrolling the page at the same time. 261 ([736b005](https://github.com/decred/dcrdex/commit/736b005151cf3501f0724e36f070e4b74ac365e5)) 262 263 ## Server (dcrdex) 264 265 - `Swapper` resumes on startup from DB rather than a state file. 266 ([a676e07](https://github.com/decred/dcrdex/commit/a676e074a6845a2b05b3597856d226a22f3c9234)) 267 - Market data API endpoints. `/spots` is the spot price and booked volume of all 268 markets. `/candles` is candlestick data, available in bin sizes of 24h, 1h, 269 15m, and per-epoch sticks. e.g. `/candles/dcr/btc/15m`. `/orderbook` is 270 already a WebSocket route, but is now also accessible by HTTP. An example URL 271 is `/orderbook/dcr/btc`. `/config` is another WebSocket route that is also now 272 available over HTTP too. 273 ([08afde3](https://github.com/decred/dcrdex/commit/08afde3f7bb5d9df5579621ed0e7ae9850424744)) 274 - Configurable trade limits with the new `--inittakerlotlimit` and 275 `--abstakerlotlimit` dcrdex switches, and `userBookedLotLimit` set in 276 markets.json. 277 ([5771186](https://github.com/decred/dcrdex/commit/5771186321eb7b969685fc722ffdb65d42a64539)) 278 - Provide API and asset versions in the `'config'` response. 279 ([e59b47f](https://github.com/decred/dcrdex/commit/e59b47fe777ba94741a38da62b06edd317101873), 280 [205e802](https://github.com/decred/dcrdex/commit/205e8022adcaf8e7a5bda026e80d43edc3c07497), 281 [1bc0cc9](https://github.com/decred/dcrdex/commit/1bc0cc9e9c1ffab8b6ed37dcad96cc136bbcf33f)) 282 - Begin sending `TxData` (raw tx) in audit and match_status requests to 283 counterparty. This will support SPV clients. 284 ([370451](https://github.com/decred/dcrdex/commit/3704513bc63facc234edabf742ec1f87ef80b35d)) 285 - Experimental Bitcoin Cash (BCH) support. 286 ([542ed9b](https://github.com/decred/dcrdex/commit/542ed9ba9ef8db3d8f5d3e36b3078c9fa3d5888f)) 287 - Version the DB scheme and implement initial updates to populate historical 288 market data in the `epoch_reports` table. 289 ([d000f19](https://github.com/decred/dcrdex/commit/d000f196923497122a71790e8c8f0c89503cfaaf)) 290 - The outgoing preimage request now includes the commitment for the preimage 291 being requested. 292 ([850e8a6](https://github.com/decred/dcrdex/commit/850e8a6779dd537ecb820974606a9f7294ca155a)) 293 - Provide fee rate estimates to the clients in certain messages: `orderbook`, 294 `epoch_report`, and the new `fee_rate` route. With this data provided to the 295 clients, minimum fee rates of zero-conf funding coins are enforced. 296 ([79a1cb0](https://github.com/decred/dcrdex/commit/79a1cb016f8d08354610767e890c78a9bd3470b4), 297 [9885bf1](https://github.com/decred/dcrdex/commit/9885bf1ed697bd82ba300ed33c98647c2413df8f)) 298 - Fix market suspension not purging the outgoing book router's orders list. The 299 actual book was purged, but clients would still pull a book snapshot listing 300 orders if they restarted after a purge. 301 ([a25d14e](https://github.com/decred/dcrdex/commit/a25d14e3a397268bae8a8e899b836d53e0219d79)) 302 - Order priority queue automatic reallocation and smaller initial capacity. 303 ([3750cce](https://github.com/decred/dcrdex/commit/3750cce2abeed01879d26b54483b85a2f78f9187)) 304 - New administrative endpoints: `orderbook`, `epochorders`, and `matches`. 305 ([0ce3ec7](https://github.com/decred/dcrdex/commit/0ce3ec70024f48fc21b9e9e8aee925e31e2ceb02)) 306 - Add order ID to cancel route error message. 307 ([0a7157b](https://github.com/decred/dcrdex/commit/0a7157bb2c2511ac85842e88bb7ead0e127a85ae)) 308 - Various test harness improvements. 309 ([ca9882d](https://github.com/decred/dcrdex/commit/ca9882d36463c94375c200ca09cf1a44740f6d1a)) 310 - Active order counts are logged when a user authenticates. 311 ([945cb4a](https://github.com/decred/dcrdex/commit/945cb4aa618990c9ab66ee09954d0357e479bc6c)) 312 - Drop the dependency on the deprecated golang.org/x/crypto/ssh/terminal 313 repository. 314 ([cae9f5a](https://github.com/decred/dcrdex/commit/cae9f5a12ef24c8f4f0d44a021768323b91aaa1f)) 315 - The /api/market/{marketID}/matches endpoint now returns decoded swap/redeem 316 coin IDs and an idiomatic JSON response. 317 ([a1fbdc0](https://github.com/decred/dcrdex/commit/a1fbdc023c2dfd95d89ab66d91594be5d98ce011)) 318 319 ## Build requirements 320 321 - Go 1.15 or 1.16 322 - Node 14 is the minimum supported version for building the site assets. 323 - dcrd and dcrwallet must *still* be built from their `release-v1.6` branches. 324 - The minimum required dcrwallet RPC server version is 8.5.0, which corresponds 325 to the v1.6.2 patch release of dcrwallet, but the latest `release-v1.6.x` tag 326 should be used. 327 328 ## Code Summary 329 330 166 commits, 287 files changed, 40,296 insertions(+), 18,072 deletions(-) 331 332 <https://github.com/decred/dcrdex/compare/4517832...release-v0.2> 333 334 9 contributors 335 336 - Amir Massarwa (@amassarwi) 337 - Brian Stafford (@buck54321) 338 - David Hill (@dajohi) 339 - Joe Gruffins (@JoeGruffins) 340 - Jonathan Chappelow (@chappjc) 341 - Kevin Wilde (@kevinstl) 342 - @peterzen 343 - Victor Oliveira (@vctt94) 344 - Wisdom Arerosuoghene (@itswisdomagain)