Let’s create a routing LND node, part 8 - Fees

Series: Let’s create a routing LND node

Supporting this series

If you want to support this series, you can:

  • Use tippin.me to send me a tip.
  • Use Tootmoney to ask for a Lightning invoice. On Mastodon, just send a toot like ‘@OpinionatedGeek #TootMoney #send 10000’ to have it reply with an invoice QR code.
  • Send bitcoin to this address: bc1qsaampnjm5ykcpd40pstcewt75xrtfy5cxpnpdf

Fees

Now I want to spend some time looking at the fees I charge for routing. Up to now I haven’t changed any fees from the default.

I want my node to be ‘good value’ but I don’t want to undercharge.

BitMEX have a great article on routing fees.

Unfortunately they’re traders and talk about basis points so I’ll have to try to translate from what they say to the actual values lncli expects.

To help me translate, they say:

Base Fee
This is expressed in thousandths of a Satoshi.

For example a base fee of 1,000 is 1 satoshi per transaction.

and:

Fee Rate
This is expressed in millionths of a Satoshi transferred.

For example a fee rate of 1,000 is, 1,000/1,000,000, which is 0.1% of the value
transferred through the channel. Equivalent to 10bps.

As for optimal values they say:

The base fee was 0 across the period

and:

The daily fee income appears to quickly accelerate as one increases the fee rate from 0 till around 0.1 bps. Once the fee is increased above this rate, average daily fee income appears to gradually decline. Therefore, based on this experiment, it appears as if the revenue maximising fee rate is around 0.1 bps...

To translate that, if 10bps is 1,000 then a fee rate of 0.1bps is 10, i.e. 10/1,000,000. lncli expects this in sats, not millionths-of-sats, so 10/1,000,000 is 0.00001.

A base fee of 0 seems a bit scary to me, given that channels open with a base fee of 1000 by default. I can see why it would simplify the research for BitMEX but is it a good practical idea? I honestly don’t know. (I note that the channel I opened with them has a base fee of 1 though, rather than 0.)

So I’ll give it a go. Let’s try setting a base fee of 0, a fee rate of 10 and no change to CLTV delta, for all my channels:

$ lncli updatechanpolicy --base_fee_msat 0 --fee_rate 0.00001 --time_lock_delta 40

Just to verify things, here’s how my channel with BitMEX looks now:

$ lncli getchaninfo 631655136611991552

{

"channel_id": "631655136611991552",

"chan_point": "c8fbb6e78f26bd5f63419c172384b79a1209478dd30184b68711c6d1f916b1be:0",

"last_update": 1557311519,

"node1_pub": "023c5b5667b16cd7fcca5591a8c0f47beb76c9405e16a4f2d6b42c7b9904a7f0e6",

"node2_pub": "0395033b252c6f40e3756984162d68174e2bd8060a129c0d3462a9370471c6d28f",

"capacity": "1000000",

"node1_policy": {

"time_lock_delta": 40,

"min_htlc": "1000",

"fee_base_msat": "0",

"fee_rate_milli_msat": "10",

"disabled": false,

"max_htlc_msat": "990000000"

},

"node2_policy": {

"time_lock_delta": 40,

"min_htlc": "1000",

"fee_base_msat": "1",

"fee_rate_milli_msat": "10",

"disabled": false,

"max_htlc_msat": "990000000"

}

}

So the settings look as I intended. Whether or not they’re useful remains to be seen.

I intend to have a ‘default’ set of fees for channels, with other fees used to encourage or discourage behaviour. For instance, if I have a large unbalanced channel to a ‘destination’ node, I may lower the fees (or even make it free) in order to encourage its use until it’s more balanced.

Rebalancing

One of the payments I routed unbalanced one of my channels, and that gives me the opportunity to rebalance it from one of my over-full channels.

Here’s the before state - rompert is getting a little low, and Saggitarius is still full from when I opened it:

✅ 👪 rompert.com🔵: 631590265456623616 (Last update: 04:20 UTC on Tuesday, 7 May 2019)

Pubkey: 02ad6fb8d693dc1e4569bcedefadf5f72a931ae027dc0f0c544b34c1c6f3b9a02b

Fees: 1,000+1/40 / 0+1/144

Balances: [🥝🥝🥕🥕🥕🥕🥕🥕🥕🥕] 291,688 / 697,082 [capacity: 1,000,000]

✅ 👪 Sagittarius A: 632050960773152769 (Last update: 11:15 UTC on Tuesday, 7 May 2019)

Pubkey: 03a503d8e30f2ff407096d235b5db63b4fcf3f89a653acb6f43d3fc492a7674019

Fees: 1,000+1/40 / 1,000+1/40

Balances: [🥝🥝🥝🥝🥝🥝🥝🥝🥝🥝] 988,771 / 0 [capacity: 1,000,000]

Too many carrots in rompert, too many kiwis in Sagittarius! (I do love those glyphs!)

Now let’s run this command to move 300,000 from the Sagittarius channel to the rompert channel:

$ lntoolkit move-balance --from 632050960773152769 --to 631590265456623616 --amount 300000

And here’s the result:

2019/05/07 14:58:46 📄 Payment path[0]:

Current block height: 575003

Move: 300000000 msat

From channel: 632050960773152769 - Balances: 988771 / 0

To channel: 631590265456623616 - Balances: 291688 / 697082

Cost: 1900 msat

Route:

⚡ OpinionatedGeek ⚡ (19 channels)

Channel ID: 632050960773152769 Capacity: 1000000 Cost: 1300 msat

Src: 023c5b5667b16cd7fcca5591a8c0f47beb76c9405e16a4f2d6b42c7b9904a7f0e6 -

Dst: 03a503d8e30f2ff407096d235b5db63b4fcf3f89a653acb6f43d3fc492a7674019

⚡ Sagittarius A (670 channels)

Channel ID: 603416379436040193 Capacity: 800000 Cost: 300 msat

Src: 03a503d8e30f2ff407096d235b5db63b4fcf3f89a653acb6f43d3fc492a7674019 -

Dst: 02b0172bb38617fa3afdb69664468b492d5a21062a4fa8b47284b0cc320e6e7420

⚡ starkness (85 channels)

Channel ID: 606258616975163392 Capacity: 800000 Cost: 300 msat

Src: 02b0172bb38617fa3afdb69664468b492d5a21062a4fa8b47284b0cc320e6e7420 -

Dst: 02ad6fb8d693dc1e4569bcedefadf5f72a931ae027dc0f0c544b34c1c6f3b9a02b

⚡ rompert.com🔵 (1099 channels)

Channel ID: 631590265456623616 Capacity: 1000000 Cost: 0 msat

Src: 02ad6fb8d693dc1e4569bcedefadf5f72a931ae027dc0f0c544b34c1c6f3b9a02b -

Dst: 023c5b5667b16cd7fcca5591a8c0f47beb76c9405e16a4f2d6b42c7b9904a7f0e6

⚡ OpinionatedGeek ⚡ (19 channels)

2019/05/07 14:58:52 📄 Payment successful.

2019/05/07 14:58:52 📄 Successfully moved 300000 from '632050960773152769' to '631590265456623616'

2019/05/07 14:58:52 📄 Balance moved successfully! 😄

2019/05/07 14:58:52 📄 No tip to send. That's OK, I still love you! 🥰

After that rebalancing, here is the state of those two channels:

✅ 👪 rompert.com🔵: 631590265456623616 (Last update: 13:57 UTC on Tuesday, 7 May 2019)

Pubkey: 02ad6fb8d693dc1e4569bcedefadf5f72a931ae027dc0f0c544b34c1c6f3b9a02b

Fees: 1,000+1/40 / 0+1/144

Balances: [🥝🥝🥝🥝🥝🥕🥕🥕🥕🥕] 591,688 / 397,082 [capacity: 1,000,000]

✅ 👪 Sagittarius A: 632050960773152769 (Last update: 11:15 UTC on Tuesday, 7 May 2019)

Pubkey: 03a503d8e30f2ff407096d235b5db63b4fcf3f89a653acb6f43d3fc492a7674019

Fees: 1,000+1/40 / 1,000+1/40

Balances: [🥝🥝🥝🥝🥝🥝🥕🥕🥕🥕] 688,769 / 300,001 [capacity: 1,000,000]

The balance of kiwis to carrots looks a lot healthier now!

Mystery node

Now let’s go back to that mystery node that opened a private channel with me.

I’ve updated lntoolkit to cope with private channels as a source or destination now, although I worry it’s a bit of a hack. Programming question: if I have an actual Channel object, how can I best get a ChannelEdge object. This is what I have but it seems quite hackish:

&lnrpc.ChannelEdge{

Capacity: channel.Capacity,

ChanPoint: channel.ChannelPoint,

ChannelId: channel.ChanId,

LastUpdate: 0,

Node1Pub: cef.MyPubKey,

Node1Policy: &lnrpc.RoutingPolicy{

Disabled: false,

FeeBaseMsat: 0,

FeeRateMilliMsat: 0,

MinHtlc: 0,

TimeLockDelta: 0,

},

Node2Pub: channel.RemotePubkey,

Node2Policy: &lnrpc.RoutingPolicy{

Disabled: false,

FeeBaseMsat: channel.CommitFee,

FeeRateMilliMsat: channel.FeePerKw,

MinHtlc: 1,

TimeLockDelta: channel.CsvDelay,

},

}

Anyone have any better ideas?

Anyway, I thought I’d try running auto-balance on that mystery channel to try to fill it a bit. auto-balance should try to fill the --to channel to 50% from all the currently full channels:

$ lntoolkit auto-balance --to 631605658598703105 --amount 500000cd src/lntoolkit && /Applications/Xcode.app/Contents/Developer/usr/bin/make install

2019/05/07 18:34:59 📄 Have 5 possible 'from' channels and 1 possible 'to' channels:

From:

631655136611991552: 988773 / 0

632050960802447360: 988771 / 0

632050960761552897: 988771 / 0

632050960770990080: 988771 / 0

632113632926957568: 988760 / 0

To:

631605658598703105: 96416 / 1036619

2019/05/07 18:35:01 🚨 Error with move attempt from 631655136611991552 to 631605658598703105: no more routes to try

2019/05/07 18:35:01 🚨 Error with move attempt from 632050960802447360 to 631605658598703105: no more routes to try

2019/05/07 18:35:01 🚨 Error with move attempt from 632050960761552897 to 631605658598703105: no more routes to try

2019/05/07 18:35:01 🚨 Error with move attempt from 632050960770990080 to 631605658598703105: no more routes to try

2019/05/07 18:35:01 🚨 Error with move attempt from 632113632926957568 to 631605658598703105: no more routes to try

2019/05/07 18:35:01 📄 Auto balance complete - 0 successful move(s), 5 unsuccessful move(s).

2019/05/07 18:35:01 📄 No tip to send. That's OK, I still love you! 🥰

So, it didn’t work. It seems none of my full channels can route anything to it.

Is it worth keeping it around if it can’t route? That’s a good question. One of the things I’m trying to do here is put together my own rules of thumb for what to do in these situations (or learn from others!) In absence of anything else, I’ll leave it open a while longer - it has already routed some funds from them, so it’s not the most useless channel I have.

Finally, here’s the current report:

OpinionatedGeek ⚡ - synced: ✅

Total Balance: 49,537,395 satoshi, Wallet: 32,346,645 satoshi (32,346,645 satoshi/0 satoshi)

Fees: 4 this month, 4 this week, 0 today

Channels: 19 active, 0 inactive, 0 pending, containing: 17,190,750 satoshi

Version: 0.6.0-beta commit=v0.6-beta-dirty

URI: 023c5b5667b16cd7fcca5591a8c0f47beb76c9405e16a4f2d6b42c7b9904a7f0e6@95.179.191.59:9735

Pending:

None.

Unbalanced - High:

✅ 👪 VIX18: 632187300238983168 (Last update: 09:11 BST on Saturday, 4 May 2019)

Pubkey: 03f8ab9b7496be92ce370e0224661d5d2de80bca8f505d66f1226d0e6002007d2a

Fees: 0+10/40 / 1,000+100/144

Balances: [🥝🥝🥝🥝🥝🥝🥝🥝🥝🥝] 987,063 / 0 [capacity: 1,000,000]

✅ 👪 ln.BitSoapBox.com: 632113632926957568 (Last update: 01:10 BST on Wednesday, 8 May 2019)

Pubkey: 021607cfce19a4c5e7e6e738663dfafbbbac262e4ff76c2c9b30dbeefc35c00643

Fees: 0+10/40 / 220+20/144

Balances: [🥝🥝🥝🥝🥝🥝🥝🥝🥝🥝] 985,722 / 0 [capacity: 1,000,000]

✅ 👪 1ML.com node ALPHA: 632050960770990080 (Last update: 01:11 BST on Wednesday, 8 May 2019)

Pubkey: 0217890e3aad8d35bc054f43acc00084b25229ecff0ab68debd82883ad65ee8266

Fees: 0+10/40 / 1,000+1/144

Balances: [🥝🥝🥝🥝🥝🥝🥝🥝🥝🥝] 985,721 / 0 [capacity: 1,000,000]

✅ 👪 BitMEXResearch: 631655136611991552 (Last update: 15:44 BST on Tuesday, 7 May 2019)

Pubkey: 0395033b252c6f40e3756984162d68174e2bd8060a129c0d3462a9370471c6d28f

Fees: 0+10/40 / 1+10/40

Balances: [🥝🥝🥝🥝🥝🥝🥝🥝🥝🥝] 985,719 / 0 [capacity: 1,000,000]

✅ 👪 ln.taborsky.cz: 632189499363622912 (Last update: 12:43 BST on Tuesday, 7 May 2019)

Pubkey: 0265fae305778b7cb157365f70cf3a2047d2cad5c1ccc5f550c6d8a033084a8ea5

Fees: 0+10/40 / 1,000+1/40

Balances: [🥝🥝🥝🥝🥝🥝🥝🥝🥝🥝] 985,719 / 0 [capacity: 1,000,000]

✅ 👪 LightningTo.Me: 632050960802447360 (Last update: 23:32 BST on Tuesday, 7 May 2019)

Pubkey: 03bb88ccc444534da7b5b64b4f7b15e1eccb18e102db0e400d4b9cfe93763aa26d

Fees: 0+10/40 / 1,000+1/40

Balances: [🥝🥝🥝🥝🥝🥝🥝🥝🥝🥝] 985,717 / 0 [capacity: 1,000,000]

✅ 👪 hirish-ln: 632189499363557376 (Last update: 12:43 BST on Tuesday, 7 May 2019)

Pubkey: 036d81bb87af589f949dec53af1b3121c84048d0913eb56945cbbb62c5cb4fcb6f

Fees: 0+10/40 / 1,000+1/40

Balances: [🥝🥝🥝🥝🥝🥝🥝🥝🥝🥝] 985,717 / 0 [capacity: 1,000,000]

✅ 👪 SLL: 632187300239048704 (Last update: 16:49 BST on Tuesday, 7 May 2019)

Pubkey: 039401f72bc0d40efb58b01de15527a2a5ae1943d7c29067b725a1467a93c7e66f

Fees: 0+10/40 / 1,000+1/40

Balances: [🥝🥝🥝🥝🥝🥝🥝🥝🥝🥝] 985,715 / 0 [capacity: 1,000,000]

✅ 👪 ACINQ: 632050960761552897 (Last update: 10:11 BST on Monday, 29 April 2019)

Pubkey: 03864ef025fde8fb587d989186ce6a4a186895ee44a926bfc370e2c366597a3f8f

Fees: 0+10/40 / 1,000+100/144

Balances: [🥝🥝🥝🥝🥝🥝🥝🥝🥝🥝] 985,715 / 0 [capacity: 1,000,000]

✅ 👪 blackgold: 632112533487681536 (Last update: 23:29 BST on Monday, 6 May 2019)

Pubkey: 02f40890af885da4673f0ee9725ee74bb2c66d6491cc4334056a2701057993e61d

Fees: 0+10/40 / 250+10/40

Balances: [🥝🥝🥝🥝🥝🥝🥝🥝🥝🥝] 985,715 / 0 [capacity: 1,000,000]

Unbalanced - Low:

✅ 🚶 03f175627ecd2b736fdd: 631605658598703105 (Last update: 15:20 BST on Friday, 3 May 2019)

Pubkey: 03f175627ecd2b736fdd29f40414c02169716f884b4b45762483142ed81834141c

Fees: 0+10/40 / 1,000+1/40

Balances: [🥕🥕🥕🥕🥕🥕🥕🥕🥕🥕] 96,416 / 1,033,565 [capacity: 1,144,265]

All Channels:

✅ 👪 VIX18: 632187300238983168 (Last update: 09:11 BST on Saturday, 4 May 2019)

Pubkey: 03f8ab9b7496be92ce370e0224661d5d2de80bca8f505d66f1226d0e6002007d2a

Fees: 0+10/40 / 1,000+100/144

Balances: [🥝🥝🥝🥝🥝🥝🥝🥝🥝🥝] 987,063 / 0 [capacity: 1,000,000]

✅ 👪 ln.BitSoapBox.com: 632113632926957568 (Last update: 01:10 BST on Wednesday, 8 May 2019)

Pubkey: 021607cfce19a4c5e7e6e738663dfafbbbac262e4ff76c2c9b30dbeefc35c00643

Fees: 0+10/40 / 220+20/144

Balances: [🥝🥝🥝🥝🥝🥝🥝🥝🥝🥝] 985,722 / 0 [capacity: 1,000,000]

✅ 👪 1ML.com node ALPHA: 632050960770990080 (Last update: 01:11 BST on Wednesday, 8 May 2019)

Pubkey: 0217890e3aad8d35bc054f43acc00084b25229ecff0ab68debd82883ad65ee8266

Fees: 0+10/40 / 1,000+1/144

Balances: [🥝🥝🥝🥝🥝🥝🥝🥝🥝🥝] 985,721 / 0 [capacity: 1,000,000]

✅ 👪 BitMEXResearch: 631655136611991552 (Last update: 15:44 BST on Tuesday, 7 May 2019)

Pubkey: 0395033b252c6f40e3756984162d68174e2bd8060a129c0d3462a9370471c6d28f

Fees: 0+10/40 / 1+10/40

Balances: [🥝🥝🥝🥝🥝🥝🥝🥝🥝🥝] 985,719 / 0 [capacity: 1,000,000]

✅ 👪 ln.taborsky.cz: 632189499363622912 (Last update: 12:43 BST on Tuesday, 7 May 2019)

Pubkey: 0265fae305778b7cb157365f70cf3a2047d2cad5c1ccc5f550c6d8a033084a8ea5

Fees: 0+10/40 / 1,000+1/40

Balances: [🥝🥝🥝🥝🥝🥝🥝🥝🥝🥝] 985,719 / 0 [capacity: 1,000,000]

✅ 👪 LightningTo.Me: 632050960802447360 (Last update: 23:32 BST on Tuesday, 7 May 2019)

Pubkey: 03bb88ccc444534da7b5b64b4f7b15e1eccb18e102db0e400d4b9cfe93763aa26d

Fees: 0+10/40 / 1,000+1/40

Balances: [🥝🥝🥝🥝🥝🥝🥝🥝🥝🥝] 985,717 / 0 [capacity: 1,000,000]

✅ 👪 hirish-ln: 632189499363557376 (Last update: 12:43 BST on Tuesday, 7 May 2019)

Pubkey: 036d81bb87af589f949dec53af1b3121c84048d0913eb56945cbbb62c5cb4fcb6f

Fees: 0+10/40 / 1,000+1/40

Balances: [🥝🥝🥝🥝🥝🥝🥝🥝🥝🥝] 985,717 / 0 [capacity: 1,000,000]

✅ 👪 SLL: 632187300239048704 (Last update: 16:49 BST on Tuesday, 7 May 2019)

Pubkey: 039401f72bc0d40efb58b01de15527a2a5ae1943d7c29067b725a1467a93c7e66f

Fees: 0+10/40 / 1,000+1/40

Balances: [🥝🥝🥝🥝🥝🥝🥝🥝🥝🥝] 985,715 / 0 [capacity: 1,000,000]

✅ 👪 ACINQ: 632050960761552897 (Last update: 10:11 BST on Monday, 29 April 2019)

Pubkey: 03864ef025fde8fb587d989186ce6a4a186895ee44a926bfc370e2c366597a3f8f

Fees: 0+10/40 / 1,000+100/144

Balances: [🥝🥝🥝🥝🥝🥝🥝🥝🥝🥝] 985,715 / 0 [capacity: 1,000,000]

✅ 👪 blackgold: 632112533487681536 (Last update: 23:29 BST on Monday, 6 May 2019)

Pubkey: 02f40890af885da4673f0ee9725ee74bb2c66d6491cc4334056a2701057993e61d

Fees: 0+10/40 / 250+10/40

Balances: [🥝🥝🥝🥝🥝🥝🥝🥝🥝🥝] 985,715 / 0 [capacity: 1,000,000]

✅ 👪 Bitrefill.com: 631589165900038144 (Last update: 06:39 BST on Wednesday, 8 May 2019)

Pubkey: 030c3f19d742ca294a55c00376b3b355c3c90d61c6b6b39554dbc7ac19b141c14f

Fees: 0+10/40 / 4,000+40/144

Balances: [🥝🥝🥝🥝🥝🥝🥝🥕🥕🥕] 2,993,649 / 992,071 [capacity: 4,000,000]

✅ 👪 Sagittarius A: 632050960773152769 (Last update: 12:15 BST on Tuesday, 7 May 2019)

Pubkey: 03a503d8e30f2ff407096d235b5db63b4fcf3f89a653acb6f43d3fc492a7674019

Fees: 0+10/40 / 1,000+1/40

Balances: [🥝🥝🥝🥝🥝🥝🥕🥕🥕🥕] 685,717 / 300,001 [capacity: 1,000,000]

✅ 👪 rompert.com🔵: 631590265456623616 (Last update: 11:25 BST on Wednesday, 8 May 2019)

Pubkey: 02ad6fb8d693dc1e4569bcedefadf5f72a931ae027dc0f0c544b34c1c6f3b9a02b

Fees: 0+10/40 / 0+1/144

Balances: [🥝🥝🥝🥝🥝🥕🥕🥕🥕🥕] 588,638 / 397,082 [capacity: 1,000,000]

✅ 👪 CoinGate: 631562777641943040 (Last update: 10:14 BST on Wednesday, 8 May 2019)

Pubkey: 0242a4ae0c5bef18048fbecf995094b74bfb0f7391418d71ed394784373f41e4f3

Fees: 0+10/40 / 1,000+1/40

Balances: [🥝🥝🥝🥝🥝🥕🥕🥕🥕🥕] 503,664 / 482,056 [capacity: 1,000,000]

✅ 👪 powernode.io: 631589165899972608 (Last update: 12:15 BST on Tuesday, 7 May 2019)

Pubkey: 02809e936f0e82dfce13bcc47c77112db068f569e1db29e7bf98bcdd68b838ee84

Fees: 0+10/40 / 0+100/40

Balances: [🥝🥝🥝🥝🥕🥕🥕🥕🥕🥕] 993,659 / 992,061 [capacity: 2,000,000]

✅ 👪 LightningPowerUsers.com: 631590265456689152 (Last update: 06:24 BST on Wednesday, 8 May 2019)

Pubkey: 0331f80652fb840239df8dc99205792bba2e559a05469915804c08420230e23c7c

Fees: 0+10/40 / 1,000+1/40

Balances: [🥝🥝🥝🥝🥕🥕🥕🥕🥕🥕] 493,660 / 492,060 [capacity: 1,000,000]

✅ 👪 ln1.satoshilabs.com: 631652937637363712 (Last update: 01:00 BST on Wednesday, 8 May 2019)

Pubkey: 0279c22ed7a068d10dc1a38ae66d2d6461e269226c60258c021b1ddcdfe4b00bc4

Fees: 0+10/40 / 0+1,000/144

Balances: [🥝🥝🥝🥝🥕🥕🥕🥕🥕🥕] 493,166 / 492,555 [capacity: 1,000,000]

✅ 👪 lightning-roulette.com: 631563877105729536 (Last update: 14:11 BST on Tuesday, 7 May 2019)

Pubkey: 031678745383bd273b4c3dbefc8ffbf4847d85c2f62d3407c0c980430b3257c403

Fees: 0+10/40 / 1,000+1/40

Balances: [🥝🥝🥝🥝🥕🥕🥕🥕🥕🥕] 483,658 / 502,058 [capacity: 1,000,000]

✅ 🚶 03f175627ecd2b736fdd: 631605658598703105 (Last update: 15:20 BST on Friday, 3 May 2019)

Pubkey: 03f175627ecd2b736fdd29f40414c02169716f884b4b45762483142ed81834141c

Fees: 0+10/40 / 1,000+1/40

Balances: [🥕🥕🥕🥕🥕🥕🥕🥕🥕🥕] 96,416 / 1,033,565 [capacity: 1,144,265]


Tags: Lightning
Created by on Logo15659OpinionatedGeek Ltd.Logo15659