‘Readable Southern Crime Drama’

Score: 4/5

This was fun to read. It’s a well-paced thriller with a lot of action. Nice.

Tags: 4 Word Book Reviews
Created by on Logo15659OpinionatedGeek Ltd.Logo15659

‘Culture-Specific Sports Stuff?’

Score: 3/5

There’s a lot of sports stuff in this book. Maybe I’m supposed to know that already - maybe I’m supposed to recognise the names of the authors? I didn’t, so I ended up with productivity coaching that uses a lot of sports stories.

That might otherwise be fine, but these stories are so brief they’re cut off. Like ‘Person A developed this into his routine for Team B in 1986’ with the implied you-know-how-they-did-in-1987. But I don’t know. I don’t even know what sport Team B played. I’m assuming what Person A did was useful to the team, but when so many stories are cut off like this I feel like I’m not getting a lot of benefit from the half of the book I can understand.

Tags: 4 Word Book Reviews
Created by on Logo15659OpinionatedGeek Ltd.Logo15659

‘Really Very Bad Swearing’

Score: 2/5

This is not a good book. That’s such a shame because I really wanted to like it. I’d seen some of the TV series and what I saw was OK. That made the disappointment in this book harder.

Maybe I was misled by David Jason playing an affable man-of-the-people kind of detective. The D.I. Frost of this book isn’t a wisecracking copper with a heart of gold so much as a cheeky gobshite. He says the sort of things he finds funny but others don’t. The kind of thing people get punched for.

Which is all fair enough. There are indeed people like that.

What really wound me up though was the swearing.

It’s bad.

It’s really bad.

It’s not that it’s stuff that would make a sailor blush. It’s the opposite. It’s that all these hard-bitten peelers say such tame things. It’s suspension-of-disbelief-breaking bad.

For example, from page 115, here’s Frost getting some bad news:

Frost shook his head. ‘It’s too flaming late. He’ll be miles away by now.’ He buried his face in his hands. ‘It’s not my bleeding night.’

It’s all so ridiculously PG-13 for a multiple-murder inquiry.

I get that some people don’t like swearing. If that’s you, then you may have found a nice series of detective novels for yourself.

If, on the other hand, you’ve ever met one of the boys in blue, you might find it all a bit too unrealistic.

Tags: 4 Word Book Reviews
Created by on Logo15659OpinionatedGeek Ltd.Logo15659

‘I Learned A Lot’

Score: 5/5

The main thing I learned from this book: it’s all very complicated.

It’s incredible how complicated genetics is, and how little we still know about it all. Your genes are not your destiny, but your genes do seem to be involved in many, many processes, some of which we previously didn’t think had any gene involvement.

We’re at the stage where we can see some genes having some involvement in appetite, weight, fat stores etc. And we can sometimes see the direction, and sometimes even the rough extent, of the impact a particular gene has. But that still gives such an incomplete picture.

We’re only getting better at that kind of thing though, which may be wonderful, or may be a bit terrifying. Or both.

Tags: 4 Word Book Reviews
Created by on Logo15659OpinionatedGeek Ltd.Logo15659

‘Smart Person Is Dumb’

Score: 4/5

This felt quite short, or I raced through it somehow. Nice and readable, but still fairly light. (Yeah, I still miss Iain M. Banks and The Culture.)

It did feel a bit of a daft premise though. We have researchers now dedicating their lives to figuring out the problem of alignment of godlike AIs (even though we don’t have such godlike AIs yet), we have myths and legends of genies, we have fables of people getting their comeuppance by getting exactly what they asked for... Do people in the future not have these things, or do they just not think things through? People who are otherwise smart being really dumb tends to break my suspension of disbelief.

Tags: 4 Word Book Reviews
Created by on Logo15659OpinionatedGeek Ltd.Logo15659

‘What’s Not To Love?’

Score: 4/5

Another romp with the Moscow Watch. Some enemies become allies, some new enemies appear, and some nice bits to keep you guessing. What’s not to love?

Tags: 4 Word Book Reviews
Created by on Logo15659OpinionatedGeek Ltd.Logo15659

‘More Of The Same’

Score: 3/5

I think I've run out of steam with this series. There's only so many times we can do the 'sergeant outsmarts hyperintelligent AI' before it gets repetitive and predictable. The author tried to shake things up this time with different perspectives for some chapters, but it didn't really work for me. Ah well.

Tags: 4 Word Book Reviews
Created by on Logo15659OpinionatedGeek Ltd.Logo15659

I’ve been playing around with Serum Swap pools since they were launched a couple of days ago.

The idea is simple - like Uniswap on Ethereum, Swap maintains two pools of tokens and you can ‘buy’ some tokens from one pool by paying tokens to the other pool. The ratio of tokens in the two pools is fixed, which allows you to calculate how much of one token to ‘pay’ for the other token.

It’s hard finding much documentation on how to query the pools, but they’re on a blockchain with a public API so I figured I’d have a go. After a few false starts and some answers from the dev discussion forum, here’s a basic script that reports the pool balances and total supply of pool tokens for each swap.

#! /usr/bin/env node
/* eslint-disable no-empty, no-console, no-await-in-loop, no-magic-numbers, max-lines-per-function, max-statements */

"use strict";

const BN = require("bn.js");
const BufferLayout = require("buffer-layout");
const serum = require("@project-serum/serum");
const solana = require("@solana/web3.js");
const MAINNET_API = "https://api.mainnet-beta.solana.com"; const ROOT_POOL_ADDRESS = "9qvG1zUp8xF1Bi4m6UdRNby1BAAuaDrUxSpv4CmRRMjL"; const PUBLIC_KEY_LENGTH = 32; const INT_LENGTH = 8; const PADDING_LENGTH = 16;
const TokenSwapLayout = BufferLayout.struct([ BufferLayout.u8("isInitialized"), BufferLayout.u8("nonce"), BufferLayout.blob(PUBLIC_KEY_LENGTH, "tokenProgramId"), BufferLayout.blob(PUBLIC_KEY_LENGTH, "tokenAccountA"), BufferLayout.blob(PUBLIC_KEY_LENGTH, "tokenAccountB"), BufferLayout.blob(PUBLIC_KEY_LENGTH, "tokenPool"), BufferLayout.blob(PUBLIC_KEY_LENGTH, "mintA"), BufferLayout.blob(PUBLIC_KEY_LENGTH, "mintB"), BufferLayout.blob(PUBLIC_KEY_LENGTH, "feeAccount"), BufferLayout.u8("curveType"), BufferLayout.blob(INT_LENGTH, "tradeFeeNumerator"), BufferLayout.blob(INT_LENGTH, "tradeFeeDenominator"), BufferLayout.blob(INT_LENGTH, "ownerTradeFeeNumerator"), BufferLayout.blob(INT_LENGTH, "ownerTradeFeeDenominator"), BufferLayout.blob(INT_LENGTH, "ownerWithdrawFeeNumerator"), BufferLayout.blob(INT_LENGTH, "ownerWithdrawFeeDenominator"), BufferLayout.blob(PADDING_LENGTH, "padding") ]); function bnFromBuffer(buffer) { return new BN( [...buffer] .reverse() .map((value) => `00${value.toString(16)}`.slice(-2)) .join(""), 16 ); } function expandTokenSwapMetadata(initial) { const expanded = {}; expanded.isInitialized = initial.isInitialized; expanded.nonce = initial.nonce; expanded.curveType = initial.curveType; expanded.tokenProgramId = new solana.PublicKey(initial.tokenProgramId); expanded.tokenAccountA = new solana.PublicKey(initial.tokenAccountA); expanded.tokenAccountB = new solana.PublicKey(initial.tokenAccountB); expanded.tokenPool = new solana.PublicKey(initial.tokenPool); expanded.mintA = new solana.PublicKey(initial.mintA); expanded.mintB = new solana.PublicKey(initial.mintB); expanded.feeAccount = new solana.PublicKey(initial.feeAccount); expanded.tradeFeeNumerator = bnFromBuffer(initial.tradeFeeNumerator); expanded.tradeFeeDenominator = bnFromBuffer(initial.tradeFeeDenominator); expanded.ownerTradeFeeNumerator = bnFromBuffer(initial.ownerTradeFeeNumerator); expanded.ownerTradeFeeDenominator = bnFromBuffer(initial.ownerTradeFeeDenominator); expanded.ownerWithdrawFeeNumerator = bnFromBuffer(initial.ownerWithdrawFeeNumerator); expanded.ownerWithdrawFeeDenominator = bnFromBuffer(initial.ownerWithdrawFeeDenominator); return expanded; } async function fetchBalanceAndMetadata(connection, mint, source) { const tokenMetadata = serum.TOKEN_MINTS.find((tok) => tok.address.equals(mint)); const balance = await connection.getTokenAccountBalance(source); return { balance: balance.value.uiAmount, name: tokenMetadata?.name ?? "«Unknown»", mint, source }; } function decribePool(tokenPool, supply, tokenA, tokenB) { return ` ${tokenA.name}/${tokenB.name} «${tokenPool.toString().padEnd(44)}» Total Pool Token Supply: ${supply.value.uiAmount.toString().padStart(16)} «${tokenA.source.toString().padEnd(44)}» [${tokenA.name.padEnd(9)}] Balance: ${tokenA.balance.toString().padStart(20)} «${tokenB.source.toString().padEnd(44)}» [${tokenB.name.padEnd(9)}] Balance: ${tokenB.balance.toString().padStart(20)} `; } async function main() { const connection = new solana.Connection(MAINNET_API); const poolProgramId = new solana.PublicKey(ROOT_POOL_ADDRESS); const pools = await connection.getProgramAccounts(poolProgramId); for (const pool of pools) { const {data} = pool.account; if (data.length === TokenSwapLayout.span) { const decoded = TokenSwapLayout.decode(data); const tokenSwap = expandTokenSwapMetadata(decoded); const supply = await connection.getTokenSupply(tokenSwap.tokenPool); const tokenA = await fetchBalanceAndMetadata(connection, tokenSwap.mintA, tokenSwap.tokenAccountA); const tokenB = await fetchBalanceAndMetadata(connection, tokenSwap.mintB, tokenSwap.tokenAccountB); console.log(decribePool(tokenSwap.tokenPool, supply, tokenA, tokenB)); } else { console.log(`Unknown token swap layout for PublicKey: ${pool.pubkey}`); } } } main().catch((ex) => console.error(ex));

You’re on your own if you try to run this basic node script, but it should be obvious what packages you need.

It shows how to decode the layout of the returned data, and converts some of it to more appropriate types. It then queries the supply and balances.

Here’s the output as of 16:15 on 2020-10-29:

LINK/USDC
«7Dpa38bfdsGPmoWYkxCwRv48DczK35Go7KAdC9J7gzy3» Total Pool Token Supply: 10.00018873
«6myJHLHQPJrdrZaABXAouGGnyWMbGVYa8RE4ttgfKwtr» [LINK ] Balance: 8444.936758
«DQHyB8iMJbk2Ac3qCV1v22MoU7kiQCQ396xSqBrjLt7N» [USDC ] Balance: 97737.557302

SRM/UNI
«Ap9qKcpUN4a4gArf8i7XC9Qnvduujj7cqJRV4oVEhzZK» Total Pool Token Supply: 0
«3gLPoXA2SE8anTf9xL5LiofpYsFGFrPCmGJkJN9xQSVv» [SRM ] Balance: 0
«AJXmcezaT8CfY7S6twaGY5nPD7KPpEy7ep2C8MXuViWG» [UNI ] Balance: 0

SOL/BTC
«9R3t7ZXPCEe7z9U3kgKgxiD7uSV1KzKHpMB78SmnZezu» Total Pool Token Supply: 10.00000489
«D5HfT6yELuMt9Ljx9XfLkkVzheyQ6GLgGyoZjcU6YNaY» [SOL ] Balance: 0.0501
«t3vB7bLSJ9sbvpFsuS7Uh46pFXDWUhVyV1217ukPtxx » [BTC ] Balance: 0.000007

SRM/«Unknown»
«8g9JvkTs4xdVWY54uG8pVeZ8wf1UMQK13FxATxR1jTYo» Total Pool Token Supply: 0
«5NeFGFkbM2ePpMbeQQgvRA7xkMchXCAi4MqnymX4y964» [SRM ] Balance: 0
«A6AapjxXigbJH1tN4Wzadj8tTJmS83uPqV1STgiFZyzQ» [«Unknown»] Balance: 0

ALEPH/SOL
«3XSibQKankpsa4AdxAKmM2WbZCES91wDZDz3YfjrgqWP» Total Pool Token Supply: 0
«Dj6wSHiCDewWRvcuTdB6b4fUx29Qwb3WsHzPuGKCq9Rk» [ALEPH ] Balance: 0
«GnvfEjtzvLphYr5XRqGUQBTUcKpgPYs6ybRsoumcyqBy» [SOL ] Balance: 0

SOL/USDC
«Htr2t746VeshhkTxd1Kyv1ictR9hPZ9811Wg8rAXhinK» Total Pool Token Supply: 441854.49203689
«3sRavwSu5dmCjXnu66Y1Phe93MXwUC1Q8Kqi2eh9dWnL» [SOL ] Balance: 47646.542348491
«5t9sxN488df2SbCJen3YBV3koLfPJSkdhbGBEK8MSZXo» [USDC ] Balance: 73793.88432

SRM/LINK
«Gjp8DQoZSCnAbUGRpLUwe1Tgg4iKG6Hjan2EW4ZPoddo» Total Pool Token Supply: 20.06073856
«E3QcD6KX5FmFNiWn4D4pQdw97F9MBLVzMh2VdpfZDKpm» [SRM ] Balance: 202468.453948
«9be2S66Xw4HrJfjsWaZNiKztA4AXPZfuWfS93x4HcbS7» [LINK ] Balance: 17647.548355

SRM/«Unknown»
«6b44fKL4RSSr194kBwhKt6DC5cjHBi2q744o6SjBy4bf» Total Pool Token Supply: 10
«7aJCVuEQSbtAhzkcq376KDXCSqMaVZvd67PgsUqyAjdq» [SRM ] Balance: 0.01
«FL9kB2NdjxfkAk27gDSvfFGB6yScvN8TiFv219JKWbct» [«Unknown»] Balance: 0.0001

SRM/USDC
«GfnWGHHfVqvGAF9ovNfqTn9PgV1XL33YSFXjTCZbJS97» Total Pool Token Supply: 23.83954159
«i3D9kpwMznhtiN4TMzLv3rvzsNHEcuZAjkURjq5L44G » [SRM ] Balance: 236454.306723
«2fQLHivdMZ8FxhFjFVMTMjGikXkz6tqu4KskDvY2kr8k» [USDC ] Balance: 238658.199691

SRM/«Unknown»
«5iHZX7VJQEXLiLZDGb1NgpVJoPiNhbG49UcZxSRd4cZt» Total Pool Token Supply: 10
«AGezWEZyRbnc5kXVkYXaQ2Mw9p96zKfB2QTKjNuhGWK8» [SRM ] Balance: 0.01
«GG2ZFbbUMPWBGsu6gDyMMs79CmHQ3RJsd3ysasfHKpzY» [«Unknown»] Balance: 0.0001

SRM/«Unknown»
«71BUm3dJgoC2T7xc8H5Ks3H28zs6SYDZFNVacYZYG7ak» Total Pool Token Supply: 10
«FWfK4zytK4w1mohyJwwSaHuMjXjP8CJupY5g2z5TCzDs» [SRM ] Balance: 0.01
«GP21Jtqagbt1qRc8FCXkVu9zG94ekTb5vdyQjcix6Dx3» [«Unknown»] Balance: 0.0001

SRM/«Unknown»
«F6eM7Ev75s4CLye7WGkAB36BS57yuobsr7pvf4a5MXWJ» Total Pool Token Supply: 0.00250013
«2hGA15ayh9KV1fzf9MtzaK4wQpTEetuonXfoSnePPVDW» [SRM ] Balance: 0.000013
«5DgXmSjdtdrocpUzy5KuuNqRptiKgVGxnZWdxc5J6zJM» [«Unknown»] Balance: 1e-8

YFI/USDC
«CHvaneMkSXZfaaaGZMM3ruZQq3inGoRsnixou9Q9syQA» Total Pool Token Supply: 97.50310531
«B9MEr7KGwk3CTJY4GXceNhAuFBWNM7H8sB3CehyA4xuN» [YFI ] Balance: 6.402354
«6GbReMURbDeMLxgszxZHGpCbuqo2rGi5aA7kPcJo8Gi4» [USDC ] Balance: 74865.921496

SRM/«Unknown»
«8taioaE2is8CP3mrYKBYdVUEphBJwHMejSFN5qEPEAEU» Total Pool Token Supply: 10
«3LpVGfWrdo5euNoYcvWSpkwaJeA6UvQ3kED8b8DRKiok» [SRM ] Balance: 0.01
«EJWMn2kPwviM27h9xj5ec7mC7z3q5nXmK9hUzeoMhKdL» [«Unknown»] Balance: 0.0001

SRM/«Unknown»
«12WxCZn2auqmNBjqJEJ7bNXNa3bo5Euo8MWnwGmThKgp» Total Pool Token Supply: 10
«37DcVXLY3kA8DhbCXqd45i454Sdk2xNt7NvPgdbDh6NF» [SRM ] Balance: 0.01
«9iGomE1dmTtc3McUTTjjA33Zv7rg2fa7pAVHSxyi5j6C» [«Unknown»] Balance: 0.0001

YFI/USDT
«39r7YcuxpZqqnFHcCiZJXvawwpKtpgmNpMiGrVGRyXfM» Total Pool Token Supply: 10.00044485
«9h4pFa6DRY739aFQTFx6nWAeuA2mU5vD2yfFPDaXSiLG» [YFI ] Balance: 7.664951
«9w5gUTSLhoxbDurc6NwwvacVr7tJoDUTZw1BSSY8MJTt» [USDT ] Balance: 89420.303842

SOL/«Unknown»
«D2pLz3BByUxYf2DswnCmHEfzMCLztKbhZxPJBkdzroZd» Total Pool Token Supply: 10
«6FS8X2n3mbha17Dmu24S2ub9nFxeuDeG8RAzkyaguDHr» [SOL ] Balance: 15
«Dbide56YVmmRdMJSzfjA1VCoFjgmiXh6BcjDUcQipCPL» [«Unknown»] Balance: 0.00025

FRONT/USDT
«EcbxwA89NXmvV3Po5t4radmtTAA8yvpcvXWMBMZ1uXhX» Total Pool Token Supply: 10.00029778
«8vzxKpYS82RQNc96gr8Pew9tSymnVWGbNV6KoBW1FnVF» [FRONT ] Balance: 328451.296768
«G3mdL6wmx26GXzpf8rYTdowk6faemqRW6eYLWBvWZfWr» [USDT ] Balance: 97614.116654

SRM/USDT
«2gJPRt8a9PNfjU4vFGtq4aH3ud1XY44tk9HvQVyF4eio» Total Pool Token Supply: 36.44822367
«8yrvkCJJTkLP4qhJXoeLysFxkTwPubNjCsEsXdaNGP9a» [SRM ] Balance: 359238.947811
«9wbVUfPPctfZCFwewVFmnzqVWtsk4abUSKeo99xzjL2b» [USDT ] Balance: 364985.889448

SRM/«Unknown»
«qvnuvx5h5oesykDksRB6Mee6cADTQfRYSJBGJhXgu2F » Total Pool Token Supply: 10
«BPnK3bvmWvwy2yCjQLVHhXbepvjgTatf22YUQNno4hA7» [SRM ] Balance: 0.01
«BU22istVhyB9R2HqNjGoazpLbLmLaVZa2wcZoY9shuB4» [«Unknown»] Balance: 0.0001

SRM/FTT
«AVqsLVPtzNDZyDi2aV5n6tXitQM1wYZu5NDfAHJ9gDwW» Total Pool Token Supply: 27.19360162
«5jYpJTdpLcHAnVti58bFsMiVEPAoboroAs5MwWJRnn3r» [SRM ] Balance: 278067.775197
«C5C2jDTKNywQ46mjU1WoSVy3CnPfh116ENe1x1YfoYG4» [FTT ] Balance: 70715.411586

SRM/«Unknown»
«FT15wBUtCngpfA1T4s7ApTigzRJ9SN33yA2VcrKhP2bY» Total Pool Token Supply: 10
«CHYyUmtfH9UCmvfLTU6TJeahwLmvn5UFFRe4upsPAAgi» [SRM ] Balance: 0.01
«5tjbs15ND4DqSCALrsV8uW34AswnBVtrWgMYragzJi2K» [«Unknown»] Balance: 0.0001

BTC/USDT
«2yCRA4Jfm88GAL19VAjb27V8mwhBgCr4D2aaNGHYcWnL» Total Pool Token Supply: 56212.18089591
«EwU3AQe2GVFARcbAnYQ9s87UprbEJ8FhigQiRNFysymB» [BTC ] Balance: 5.560369
«7EbKnBXxoWe7hAtz8gkx6dHtUbwDqUj4GFJDP58eXuYn» [USDT ] Balance: 74059.554235

FTT/USDT
«DYuUeHBYHY6F362m62whYzTg1SjMTEaNcugJydLt71kH» Total Pool Token Supply: 10.00065326
«4yrqm3TxE83CRtLXyovZzy2rgaQYgM2mmDer8ZM3AGtK» [FTT ] Balance: 25164.292183
«6qmdkXg6wi57zncThsHoUvWndgCBbL1zW7xMHMijSKe5» [USDT ] Balance: 98854.841821

BTC/USDC
«8SXu9YmNeoME4LW2USj6NQ47ZPYDrdz7Ki9JCVLc2D3g» Total Pool Token Supply: 56071.11492827
«4HyFLkX6SX4331VR6tNbzqphZiNBYwdPeJcVeKet6E3E» [BTC ] Balance: 5.536755
«7TgGoeagnBsswQo5wytvkEFW2nnUXzTKSj2q1LDJaNWQ» [USDC ] Balance: 73926.855013

FTT/USDC
«7UB1EcGcKaZDvrxTaU95nQ3yErVtyUMfX75V4FfxaSiJ» Total Pool Token Supply: 10.00046077
«D2DSex6FmzyvjFxZePLt7wSfwUXas8dhatJnPCNLdPZy» [FTT ] Balance: 25086.078061
«GniTz6gAQ9KX7E6YJ4gY9RZsWKGZzgRPY7yMHZokvMst» [USDC ] Balance: 98962.320674

UNI/SRM
«JAWWSHKSvypkPP9oSBJ4XpqNhCFJshjyiZTVEn94Yj2B» Total Pool Token Supply: 125.16297104
«2X7HkDNGasJchQup4omsvXj2JWii9txD74oJnRCEaLRA» [UNI ] Balance: 80.49194
«GJjqAxpbohfGJ6ww6baTW6Z75rPxpC1oJv7PvQMugiMt» [SRM ] Balance: 222.028524

SRM/«Unknown»
«GMqrWo9ixSCNhW7CzyRbbuaehRhCbpoULeGg8cmLXFKo» Total Pool Token Supply: 0
«3ASSeHgbQhSaKE2cukSJzmxSgesRyKCXCvZY5dmfEhvi» [SRM ] Balance: 0
«7zJQRWP8NzxNsg3RPWx9pvdkXqPojxWhN3b7f7meMY3X» [«Unknown»] Balance: 0

SRM/«Unknown»
«eJHLj4cphT3jgZbkwr8iBzwSNctLjfYt7w74Zs7sC1e » Total Pool Token Supply: 10
«DWH1jkBfMeCERYB7eEN4jovwYT6FBFF8j8AXUg9eBZUu» [SRM ] Balance: 0.01
«FvAQcUqg3R6nEEErEH2JpYcLYrgV7shbFJgYVtbnHwwz» [«Unknown»] Balance: 0.0001

ETH/USDT
«DefGE7phGrB4MvKYAp6LPZrSN7YHRDEJFE67UE6Wt1jG» Total Pool Token Supply: 10.00145228
«FHPvn9agBx3jKwjM7v8y6X3SzvwiSEJCVRJAEwfoH6X7» [ETH ] Balance: 249.873256
«HxpqChZS1Lbj7Tz9a9i4Z2X2zuT74etq61XtW7NBotbd» [USDT ] Balance: 97439.19187

SRM/«Unknown»
«7cyF31BLFYFr46guLTrkFpbcW21fpmrdzYBRLHYycECi» Total Pool Token Supply: 30.38017541
«HfNNRDi6sqDmxTe473C6v5GMfP5rGjdy8jXVEztR8afC» [SRM ] Balance: 89.778522
«D4LpktWyH3yZLw4Qmdo6qBW4ZrVCiCxcmMZSiZwb5CEs» [«Unknown»] Balance: 0.000944

LINK/USDT
«CeGr4m2pSDmWnp3V5xiqpGJ53b1q975tjmXHLejEsAhH» Total Pool Token Supply: 10.00034163
«9yu9j53H8kkyJvKbXhqFTWb8CyRY6zSKGFadRNF8ty7s» [LINK ] Balance: 8415.380063
«CzqrJHFEuumipSQHznLrgPVGqivWr2vF9rEkznsjXbXL» [USDT ] Balance: 98134.552709

SRM/FRONT
«ALNzhDhhB1VRuCk5ieofHqdk2wtLGjMfDjaP5t3LGCpv» Total Pool Token Supply: 10.88690287
«HkqYNBKup7EXXRmxNBQCaqdLJMxN5HQRXKyurRoQwyWa» [SRM ] Balance: 112440.128193
«EnK36DUFKpt6wBNemC7c6PpZb8MXvgKBNhrxy1tRD5af» [FRONT ] Balance: 378169.404141

SRM/SUSHI
«BrMQFZkL1ffHBsiURjmBTd4JDz4ddbTSVi7qfYCkYkNi» Total Pool Token Supply: 15.67603579
«6GkXtNTL8vn6drSysiyVg7RMptHvLjePfV9n6Xcisw4R» [SRM ] Balance: 159664.147627
«CS1bwaym3TT1KKAyMPRyMA8Gr7UfTBKVtm4vjmoEtbyy» [SUSHI ] Balance: 247123.848731

SRM/SOL
«tSiGXxfdHisArSPCf3zDRaQGGixYbeUojeNAVQmP1gg » Total Pool Token Supply: 26.70599252
«91G2AmdvD7ffpgq6FYj4qoSMYg9MF7t9FpqVUYv2aSCL» [SRM ] Balance: 259273.806586
«9MkmSbuZpxh2pvGWa3FjSaA7Kv2b99wrCJY4AdphpQ7o» [SOL ] Balance: 172166.224036944

SUSHI/USDT
«Av7UTnwMMHuzmANGykar4aYfbajRDcYs4rYV6HmQeEog» Total Pool Token Supply: 10.00121691
«3Y4iHxd7k3mmNSuFM1RKssZ4z4z8JYiYSp2nysrTkrHu» [SUSHI ] Balance: 144803.894776
«HKqPaH9XMouYf2NnmSSSLtU1Kx1GmJ1AMLWHDekuXdV4» [USDT ] Balance: 94198.988734

YFI/USDT
«3aFGuSFQcYbi4iVQJgR2W4C2Wfhwr7gBq5cYdCuAx9cQ» Total Pool Token Supply: 10.00009018
«9n5oY7QFF6PCq76p4u7thk2Lb9M2huYeQQZMRyRD57oZ» [YFI ] Balance: 7.27207
«96sZNoGRU2f2RrpjUPRkuRzpTxbCKvmiP9QCGMTDvnGq» [USDT ] Balance: 94209.82055

SRM/«Unknown»
«DMEbPnHYenmZJ9bGkQwsBXctbT6416xBdHQ1ZCgQS6ZL» Total Pool Token Supply: 10
«H3tJdnK6Jub3e96eo5xxrZd2VNFTX4iMWaEsScU2Ktip» [SRM ] Balance: 0.01
«A2XdccnDzkuHUdTiz44Zaa77vXU1QNHp3g6npHbqQv78» [«Unknown»] Balance: 0.0001

ETH/SOL
«4UXz9Wnhny7pEHnLyiSEtzK2qDxBM4Hkn4cMZUpbxzJu» Total Pool Token Supply: 10
«2giPtzzESTmVzjeNJsYMjJGDWsMsh5vwChVzCutdUY66» [ETH ] Balance: 0.000041
«5R41hyVu9yCa7Ce3Pq5GKFNjQQU1iazaGHtmHifki9My» [SOL ] Balance: 0.003

USDC/USDT
«8geAdxAKuSWJzAnUAUofuo5LBdqrCbBo7jzS1yb53qHL» Total Pool Token Supply: 10.00199756
«FVN4QvcPyxYtEcnGQ46fqNdGCbis4opzjkpNE1N7UBsp» [USDC ] Balance: 29959.804439
«8LkNu3gWQ4HdTg9qyMw4WsXZbHABQR22Xgn46QHx6wJ8» [USDT ] Balance: 30106.506702

SRM/«Unknown»
«9q1DLmrGKzSyNrbpdrg2GhT7vhAocggpsoFD7ZkbP92T» Total Pool Token Supply: 10
«8dYnXVHTnBqmfViND456FCQqdQoAqGoNsBZb3HKnkUTg» [SRM ] Balance: 0.01
«G1XQzcN8rtvkiat36QDFQ55PcsApYQHUZDjxNAxFRUTu» [«Unknown»] Balance: 0.0001

SRM/YFI
«6P5wDE2KjzTPu9RE2jZKWLxviqfMkVcnMBv6tQFaf4oB» Total Pool Token Supply: 18.59523468
«5xKLdnpCFxbDVN1K6FyUY74k2DeFDRP9i6Ko11wRbSPK» [SRM ] Balance: 176599.397807
«8hzpnXj2nVVvNo9zSNqDB3oRAYXodHxftMuQfJPjcbFU» [YFI ] Balance: 15.289859

LINK/ETH
«9eFYDob2bBP7ACBR2PHwawdYjG25MwtVPaL5QjstbMSt» Total Pool Token Supply: 10
«2tgrjLv3oLyUrHf9mUVfEgcvS87obLVyrvpYreu6FgPw» [LINK ] Balance: 0.1
«WicUeUmWwkBd7QzPTdSYv7aPT2EPSq3iJEi2qNAsP3w » [ETH ] Balance: 0.1

SRM/«Unknown»
«DaX8iTrkeFokeKVEDrQSbASCkzrbct1zfxzC5RWD5kD5» Total Pool Token Supply: 10
«FY8uoCQV1nzgaeGYYdY2XsZKe5tU3xDC7ntbb5zgU14Q» [SRM ] Balance: 0.01
«4mKiJNQeSaKCKHpf3j1DsZoAuXH3vRVkEUnygkBJ1C62» [«Unknown»] Balance: 0.0001

SRM/ETH
«CibFicoaEmw6CLocb1iDA9Vo6uMDwt75P1rAvUky2dq6» Total Pool Token Supply: 30.56930162
«6qFBMpkkUmvWnTezwTL3ni2UJHi9xaVbtr97kb8LkMx9» [SRM ] Balance: 308054.529929
«s6PZygqBbiqmRxJgg4DyDBg1pb5owiDPLCXtV3c3Sgc » [ETH ] Balance: 794.994354

«Unknown»/USDT
«DRsPiTSLRvRRv3KYyttrC413idYkRN9ygiouVDkCQsWp» Total Pool Token Supply: 33.12749447
«8UBQ6e5Q11LkgtM3VtMb7eRSo5WLuEqgcrtequMCFia1» [«Unknown»] Balance: 0.003797
«2BCUn6nwej6Hc8rfdox6EqKgVqA3psEzin5SBtdgTsSz» [USDT ] Balance: 117.869921

FRONT/USDC
«HqbAFQLKGpFNVPYzUCQvfytqVBoDmsK9UJNW28eZ6bvb» Total Pool Token Supply: 10.00012258
«8sgDkgKvoAMYef1TtyWRdTJWovbvNX6mXPFqvT7s5Yoj» [FRONT ] Balance: 336592.9478
«57jkMQGDbBWsjUR7ZRAYfqiW9wMc1HGrZ2vFDiQ1e6UB» [USDC ] Balance: 95164.882076

SRM/BTC
«CWuypwJdDi8pxNZ1k4HMUVzk8rtkrBnzqfnmc6y1pci3» Total Pool Token Supply: 27.99751075
«52sRWB9WF4TguC5brbJPPnmwL5tr3HwfcMw6BL7hPScr» [SRM ] Balance: 288718.534976
«HgWgW4aiN5AVMJeQ3EivdUk1FR2DYbd6GSxnMni1ECFQ» [BTC ] Balance: 21.733127

SOL/ETH
«HNrsjrtw4xGGb5KcXPBTzZYjuB1WKAhDDGUg8kRMQZA1» Total Pool Token Supply: 0
«H2Y7uY4WWYx1L43ULvHBG5H1fQa3mcLqWxsycvXSsjZ5» [SOL ] Balance: 0
«Hhrtg7uMhXECDRSWjHMjee6mtGb97aTG9c51cHkqbhDE» [ETH ] Balance: 0

ETH/USDC
«52qB7roEPu9JFd2S9YG38iYwKKLZCRAZUHrDkkTzehiN» Total Pool Token Supply: 10.00041963
«BFhG6mNYQY4zRPXQYJGLjiD61wtbgMxLgFBBS5sXtvKE» [ETH ] Balance: 253.186418
«4MiqtYeZauGjTVwZy8F7qtFU5x4emV6kT9PA8SJzXrDL» [USDC ] Balance: 98001.017065

SUSHI/USDC
«BXHZf5RXGMEkP5EcbRbkg6LMikbSbRocjtGag97SjZo5» Total Pool Token Supply: 10.00037634
«8iQg2QkhjPQ1qSWsFZzHkBRA61VbjZ68DdW3nXRATXke» [SUSHI ] Balance: 149350.009187
«7Ne4Unp2CWyJBLjsGai5XJsDX61A5RpHAbPfrzffSkiS» [USDC ] Balance: 98520.66279

«Unknown»/«Unknown»
«7WseRxa7UVLUQei9fmmtC4xdC3vT7zNg4ezcz6AfFvHK» Total Pool Token Supply: 10
«21uus8X79UjKRYMi9mDDVyyQHzPs21dV6EFTA3MNUgrb» [«Unknown»] Balance: 0.00001
«GwTr3TJwogWdJkqimC6opP1beUQxrzC41XNQM8YTq7Gs» [«Unknown»] Balance: 0.0001

SRM/«Unknown»
«FWms6LNabrYp7XYCzCw4ZDXxtoPBwDQCaStikH9nTPdq» Total Pool Token Supply: 10
«FKZCvc7YfE36yVygypHbyF6VxARinmz2hHo8UU9C39eY» [SRM ] Balance: 0.01
«EN5RKFFJR38jau74bjCgpPSotkSAqLzsq95DGbWdRPhL» [«Unknown»] Balance: 0.0001

«Unknown»/LINK
«GWYuvizfKPt7Wu9yUQ674ghPKEBYoSbHxjcSHqQyZ7s5» Total Pool Token Supply: 10.0018619
«6yHYMXNTE4asUq9Pcs13WT5AMFRZ6cs45TkVftw4Bezt» [«Unknown»] Balance: 0.000162
«7qcve8b3Fbo9vkL8tf28ZXRZsy9GgKjpfPpHHT6UiURR» [LINK ] Balance: 4.172998

SRM/«Unknown»
«Dm6P1jkqvk7TQ1jZQC9jE2DFHVEWZ4HwQKFxe26jNjdL» Total Pool Token Supply: 10
«CteTbnBEHsaR82Px1ftewEMWVfPHjTbB2ucoTrdbST6c» [SRM ] Balance: 0.01
«7TC7xATjxn3N614Fjcsjwe7gBVgAg6yjHs14uDgUhuse» [«Unknown»] Balance: 0.0001

SOL/USDT
«H2mJpdQTBcsfGUJvVJjRpPd95RKf2stDadJnR3Mf2qq7» Total Pool Token Supply: 10.01901305
«BonNXQQvno7FeKkhzZnb9QJAJVNgve51yktA17Auww8f» [SOL ] Balance: 62713.766705187
«4b4GFnMRmjR961me733WnHCvD18DiB9vifzdNf9CXekq» [USDT ] Balance: 94600.502589

SOL/WUSDC
«HepGD6DPahG4vJnLwwYFpp8KajfJBknQyg95bJbjnoft» Total Pool Token Supply: 0.93873765
«5J5CuFt9btpK1MRZoSVYyTyx5EYQL5nM4y1SV9X7FLrD» [SOL ] Balance: 7.049442725
«7jn4cVt8vyfTuuy6q7GU4ubDPjteArPqh4bXzRQugh9r» [WUSDC ] Balance: 3.797033

I hope this saves someone some time.

Tags: Crypto
Created by on Logo15659OpinionatedGeek Ltd.Logo15659

‘I Miss The Culture’

Score: 4/5

It’s not that there’s anything wrong with this book - it’s a good book - but sentient spaceships with consciousness and their own motivations always makes me miss The Culture novels from Iain M. Banks.

This book is fun, but it’s not a Culture novel - and that’s not the author’s fault.

Tags: 4 Word Book Reviews
Created by on Logo15659OpinionatedGeek Ltd.Logo15659

‘You’re Doing It Wrong’

Score: 4/5

I love the books these days that delve into the everyday things we thought we knew, bringing in the latest science and investigations, and showing that what we thought we knew may not be true.

This book is very much in that vein. Given how much all of us breathe it’s surprising the differences between ‘accepted wisdom’ and new research results. It’ll be interesting to see what comes of some of the research mentioned here...

Tags: 4 Word Book Reviews
Created by on Logo15659OpinionatedGeek Ltd.Logo15659