Sunday, April 14, 2019

Chaining the Blockchain to human memory

Human beings currently have no way to detect a counterfeit blockchain without a trusted source.  We connect our bitcoin software to peers and we get "blocks" of transactions that are cryptographically protected and require multiple gigawatts of power to create and protect.  We trust the source because the amount of work required for a 51% attack, we hope, is too much for any one organization to do.

I don't think we have much protection from "Sybil attacks" which is where our bitcoin software connects to a "bunch of random peers" that aren't random at all, but rather run by a single nefarious organization that will feed us a counterfeit blockchain in which they have control of some bitcoin to trick us into giving them some value in return for what will look like real bitcoin, but when we connect to the real world, those transactions will be invalid. I aim to provide relief from that problem.

If you think your bitcoin software is experiencing a "Sybil attack," you could check Ken Shirriff's blog post about stuff that should be in the blockchain that you downloaded.  The problem is that the attacker might have added all those "hidden surprises" just in case you, their victim, might check.  What they probably did not do (because it's the equivalent of doing all the work to make the blockchain about 4600 times) is ensure that their fake chain has exactly three block hashes for 12/13/13 that contain two occurrences of a double-e, and that one of the three has the smallest blockhash for that day (


). One of the other two happens to be in a chain of transactions (chained together by the ONE output (out of several) in each transaction that was spent) which put an image of Nelson Mandela into the blockchain (read Ken's post to learn more).

My interest, however, is in relieving you of the necessity to find any blog post.  I'm going to help you memorize aspects of the real blockchain so you can verify them without trusting anyone but your own memory.

My plan is that each day, I will look through the previous day's blocks as reported by blockchain.com, and run the Golly program I wrote using the merkle root on the block with the smallest block hash, and report the block height and post the image on which the program stabilizes.  For example, the smallest block hash for 4/12/19 was for block 571383,  which hash started with 0000000000000000000071, and if you use the merkle root from that block in my program, you get this image:
... in which the object in the lower left corner is called a "glider" because it will just keep moving (in this case, down and to the right).
If you do the work of visiting the block to get the merkle root, installing Golly and adding my script to it, and running that script against the merkle root, you'll see that it creates the image above.  Now you can choose a memorable image from the following list and try that one.  Once you've done it a few times, you'll know how, and if you remember what the end result looks like and the block height or the date, you'll have a very high bar for any Sybil attacker to pass using Bitcoin Core:
  1. Click Help | Debug Window
  2. Click the "Console" tab.
  3. Into the command entry box at the bottom, type "getblockhash " and then the blockheight I report below and hit enter.
  4. Copy the answer (a long hex string).
  5. Enter the command "getblock " and then paste that "hash" and hit enter.
  6. Scroll up to the top of the output and copy the "merkle root."
  7. Run Golly, run my script, and paste the merkle root in the input box.
  8. Verify that it produces the result you remember.
Let's say you can't find this post, but you remember the date and the image.  You need to get the block height.  So do this:
  1. Visit https://www.blockchain.com/explorer (Click "Data" from the front page).
  2. Scroll down to where blocks are reported and select "View More".
  3. Click the "Previous" link at the top.  This changes your browser URL to the format you need to look at blocks mined on other dates.
  4. Find the Unix Timestamp for the date you chose, and tack three digits on the end (blockchain.com uses milliseconds since epoch) and replace the number at the end of the URL from the previous step with this new number and hit enter.
  5. Search on the page for a long string of zeroes.  I use Firefox's search feature (CTRL-F), so as I type zeroes, it jumps to each successive hit.  At some point, I add one more zero and there are no hits.  Now I can use the next-hit and previous-hit buttons (after removing that extra zero) to figure out which one is the smallest.
  6. You'll see (perhaps even recognize) the block height you forgot there on the left, so you can just copy it and use that in the process above.
What if none of these images speak to me?  Then use a significant date.  You can run the procedure above right now using your birthday and, assuming you have an accurate blockchain, make the image and set it as your screen saver. Make a new one each year.  The series would be your birthdays, rendered in Life using the most-work (smallest hash) merkle roots from Bitcoin's blockchain.

4/14/19, block 571579, 0000000000000000000027
The left-most thing is a glider.
4/15/19 has not yet ended, so you'll have to wait.

Saturday, March 2, 2019

Healing Myself

Well, I went off Hydroxyurea (Hu) about two weeks ago.  A friend who is a doctor gave me a book on the connection between the mind and the body, called "The Power of Suggestion with Hypnosis" by Dr. E. Arthur Winkler.  This book solidified and verified my understanding of human consciousness and its power.  It seems likely that my own Essential Thrombocythemia (ET) is a result of my perception of the world as not working properly.  Platelets can be conceptualized as shields, so when threat levels (even metaphorical) are high, it makes sense (to a human body, which has limited ability to interpret the thoughts that its consciousness holds) to make more platelets.

In my case, it is the production of platelet factory cells ("megakaryocytes") that my body increased.  The medical establishment cannot distinguish between "abnormal" and "unhealthy," and in my case, I believe my abnormally high platelet count is not unhealthy.  Dr. Tefferi of the Mayo clinic recommended (I don't have time to look up the reference) NOT treating ET with Hu unless there are symptoms.  My health insurance company (Kaiser) has not yet assimilated this kind of thinking, so I and my friend Dr. Blanscet agreed to go ahead with my personal plan to stop taking Hu.  I am now working on teaching my body that the threat for which it is preparing by making extra platelet factories is not the kind of threat that extra platelets will help mitigate.  At the same time, I've stopped calling it "too many platelets," and started calling is "abnormally high platelets."  The rephrasing warms my spirit because my body has furnished me with extra protection, and my consciousness is now on the same page with it.

I remember reading something in high school (late 80s) about cancer patients envisioning cancer therapies working as designed and other patients not bothering to do that mental work.  The experiment suggested that the mental work improved the efficacy of the therapy.  This memory has been sitting in my mind for about 30 years.  It explains why I tend to be radically optimistic about things, if you really think about it for a while.  I read that article in Time or Newsweek for the Orange County Academic Decathlon all those years ago.

Sunday, January 27, 2019

⚡Lightning Network⚡

Simplifying as much as I can:

The lightning network ("LN") lets us use software to keep track of who owes whom, and how much, and in a way that allows the one owed to claim their money whenever they want.  Since it's safe, and it's fast, we can let the software update who owes whom in a way that implements a payment from any one of us to any one else.  This tracking of who owes whom how much is done without the blockchain and nearly immediately, which is what makes it so great.  The next few paragraphs will get into more complicated details, so consider skipping ahead if the mechanics of the LN don't interest you.


Details for nerds like me

These debts are represented by "channels." For example, I can open a "channel" to you and put as much money into it as I want.  I admit that opening a channel does use the blockchain.  The software will show that the channel owes ME all the money, but (without using the blockchain), the software can (very quickly) update the channel to show that some of the money in it belongs to you instead.  And if I had a channel open with someone else (E) into which they deposited some money, the software could updated that channel to show that the same amount of that money belongs to me, which makes it okay that some of the money in our channel now belongs to you.  Effectively, E would have paid you, by paying me.

That might seem trivial, but you could be Starbucks, and if my channel to you has enough money in it, E would be able to buy several coffees without filling up the blockchain, or having to wait ten minutes.  Furthermore, if you (Starbucks) pay your webmaster through lightning, and the webmaster has a channel open with me that I funded, you could pay him through me, and that would bring a lot of the money in our channel back to me.  It could cycle thousands of times without ever adding to the blockchain.

In the situations I've described, where I'm being a middleman, I will make (very tiny amounts of) bitcoin, a little for each payment that goes through me.  In fact I've earned about seven satoshi (a satoshi is 0.00000001 BTC) at this point, which covers a tiny fraction of the fees I paid to open my lightning channels.  The first five or ten channels I opened were set to charge fees that were kind of large.  The settings are in the eclair.conf file.  I adjusted the settings as shown at the bottom of this email in my eclair.conf file to lower my fees and attract what's called "relays," which is what it's called when you're the middleman.  "fee-base-msat" is the thousandths of a satoshi that you charge to relay a payment, and "fee-proportional-millionths" is the portion of the payment you're relaying that you charge to relay it.  Since they're millionths, 10000 (don't use commas in numbers in the conf file) would be 1%, which is VERY large.  Most people charge 0.0001% (1 millionth).  It may pay in these early days to charge high fees, but that's not a game I'm interested in exploring.

What if the other guy disappears?

If you have a channel open with someone and you want to take all your money out and he's not around, you can "force close" the channel.  This takes some time.  The time it takes is useful to prevent people from cheating.  If our channel NOW owes me less than it did before, I might try to force close it using an earlier balance.  If so, I'd have to wait, and while I'm waiting, your software would see that I'm trying to cheat and be able to take the full balance, thus punishing me for trying to cheat.

This is because there are two ways to empty the channel, and one of them has a waiting period for whoever is trying to close it unilaterally.  The other way is if we agree on the balance, and we both sign the closing transaction.  If I do try to close the channel unilaterally using an earlier balance, the resulting output allows your software to take all the money in the channel with no waiting period using an "anti-cheat" transaction.  With every balance update, one of these "anti-cheat" transactions is created for each of us, and our lightning software will watch for the unilateral close operation that allows it to take all the money.

How I set up my Lightning node:

I followed these instructions from Johnny Pham.  If you do that too, I invite you to open a channel to me (and let me know; I'll open one to you as well, for the same amount, up to $100).  You will need to know my "node URI" which is:

My custom setting from eclair.conf:
eclair.node-alias="Scotese Lightning node"

The last three settings here are in bold to indicate that I added them.  I added them so that my node is publicly available and I'm using non-default fees to attract business.

In my next newsletter, I'll be explaining what I know about BitcoinHEX, which looks like a really great idea to me.

Thursday, November 15, 2018

Don't Be an NPC

NPC means Non-Player-Character. In some online games, the game includes artificial intelligence to run characters that compete with human players.  The behavior of these NPCs is preprogrammed and therefore only reflects the programmers' thought.

I've noticed that sometimes I think something and the only reason I think it is because someone else thought it first and I was exposed to their view enough times. Sometimes, it's because I thought of it once in the context of something that suggested it, and since I encounter that context often, I might start thinking it's true. This is fertile ground for science. The thought is recognized as a hypothesis and then an experiment is designed that searches for a way to prove the hypothesis wrong. Yes, WRONG. Good science proves hypotheses wrong and forces scientists to revise those hypotheses. Hypotheses survive good science only if they are highly accurate.

I've noticed that I have become dependent on evidence. If someone said "I think..." then I'd ask why. This often pushes people away. I like people, so I tried letting go of my dependence on evidence. I found that I felt I didn't matter any more. My sense of self value dropped drastically. I'm good at analyzing evidence and I had cut myself off from it. So I revived my reliance on evidence. 

When someone asks you why you think what you think, you have the opportunity to serve yourself and that other person by searching for the answer until you find it. You matter. Your analysis matters. Take that opportunity and don't be an NPC!

Friday, June 29, 2018

As A Corrections Officer...

Dear former or current CO,

The webmaster for voluntaryist.com (that's me) is looking for people willing to consider that perhaps, all human interaction should be voluntary.  Many people who call themselves "voluntaryists" have gotten together in an Internet chat group and decided to offer prisoners a correspondence course in philosophy with the aim of reducing the damage that prison does to both prisoners and those employed to care for them.

We believe that Corrections Officers will benefit from an understanding of voluntaryism and that many prisoners may be able to interest COs in it through kindness and reading material.  However, we don't feel that we know enough people who are or have been in your position to know what kind of material might help.

We have discovered a book called "Newjack" by Ted Conover that might interest you or someone you know.  Either way, if you feel you may have some insight that would help us in our effort, please reply, either to the address from which this letter came, or via email to webmaster [at] voluntaryist.com.

Monday, May 21, 2018

Notes on Speed Reading

A friend of mine recently responded very favorably to my concern that I read pretty slow for someone who wants to do well on the LSAT.  He researched some speed reading apps and found one written by some people in Minsk.  He's been playing with it, his wife loves the exercises, and I've been playing around with it too.  With his help and some prodding from the app itself, I've discovered a few things about myself which I imagine are true for most people.

When we read, we have a tendency to pronounce the words we read in our heads, our "mind's ear" if you want, and that takes time - time we don't need to use that way.  If you successfully suppress that tendency, you can read faster.  I see two reasons behind this.  First, you're not waiting for the pattern of sounds in the word you just read to finish playing in your mind before playing the next one, and second, you're not using any mental energy to form those sounds in the first place.

There is an important third element to this that I have not heard of or read about anywhere.  This third element is actually forming the meaning of the word we just read in our mind.  Obviously, we have to do this, but I hadn't recognized it as a discreet step until I played with this app ("Speed Reader" by "Speed Reading Team").  Normally, we let the squiggles on the paper (letters) become sound patterns (words) and then the sound patterns give rise to the meaning.  The trick is to feel the meaning come without waiting for (or even allowing) the sound pattern to come.

It is difficult to ignore the meaning
of a few lines of text even if we don't
read them in a way that produces the
sounds of the words in our minds.

That is the insight that I had yesterday or today.  I have learned to pay more attention to the meaning that arises from seeing text without actually reading it (meaning, saying all the words to myself).  The brain is a pattern matching machine, and because we learned to read (translate squiggles into sound patterns), and we learned to communicate verbally (translate sounds patterns into meaning), the squiggles have consistently led to the meanings for us, but we have to actively suppress the sound patterns so that A) they don't take up our time, and B) they don't take up any mental energy.

Landmark likes to say that we are "meaning making machines" - and we are.  We can use that to our advantage when we want to read a lot of text quickly.  It takes practice.

Some of the insights in this post came from Graeme Blake, whose website is full of good info for getting smarter (all with the intent of getting readers higher scores on the LSAT, but smarter even if you never intend to take any test).

Friday, May 18, 2018

How Can I Make a Unit of Currency?

I wanted to identify a question anyone can ask when they hear about a new currency.  It is likely that the U.S. will create a new currency at some point, and if you ask how you can make one, the answer will be: You Can't. You're not allowed to make one.  That's the point.  It's also the point of cryptocurrencies: You Can.  You may need to buy hardware and get software and configure it, but there's nothing illegal about doing any of that.

If you want to make a Bitcoin, you can enlist the help of a Bitcoin Mining company.  If it's a good company and you have enough patience, you will help to create a bitcoin.  You'll probably be helping to create 12.5 bitcoins.  You don't have to use a Bitcoin mining company though.  You can create a bitcoin by purchasing bitcoin mining hardware and running the software yourself.  If you do that, then you will be working on creating a package of 12.5 bitcoins - by yourself.  That's about $100,000 worth of Bitcoin right now, so you can expect to spend about that much to get the job done.  Caveat! The process involves a lot of randomness, so it's possible to spend millions and never actually make any bitcoin.  This is why most people go through a bitcoin mining company, called a "mining pool."

A lot of the money you'll be spending to make your package of bitcoins will be spent on electricity to run the hardware.  What the hardware does is to create a fingerprint for a bunch of data that is strung together in a "block."  I say "fingerprint" but the technical term is "hash."  You may be familiar with the fact that when you enter 16 random digits into a field on a webpage that asks for a credit card number, it usually responds right away that the number is invalid.  You might also know that this is because the first fifteen digits determine what the 16th digit should be, so only one out of ten random 16-digit sequences can be a valid credit card number.  That last digit is a kind of "hash" or fingerprint of the first 15.

The data being strung together into a "block" is transaction data.  Everyone who wants to spend bitcoin has software they use to do it.  The software makes a little packet of data that indicates what bitcoin is being spent and what the new rule is to spend it next time.  That new rule is identified by the bitcoin address to which the bitcoin is being sent.  The bitcoin address is based on the secret key that the receiver has; their "bitcoin private key."  The sender uses their own bitcoin private key to cryptographically sign the packet of data (a "transaction") and then it goes public on the Internet where bitcoin miners can collect it and add it to their block.

Here's why the miners fingerprint those blocks: A fingerprint, or hash, of a block is a number with about 77 digits.  Let's consider that it's between 0 and 1.  So, for example the fingerprint might be 0.123456...77, where that last 7 is the 77th digit.  The actual result is a very large integer, but if we divide it by 2 raised to the 256th power, it will be a number between 0 and 1, and it will have more than 77 digits, but the digits after the 77th one aren't important.  In order to create bitcoins, the hash has to be very small.  For example, the hash I suggested, 0.123456...77, regardless of what digits are represented by the ellipsis, is way too big.  If it were 0.0000...12345677, and the ellipsis represented several more zeroes, then it would be small enough.  What do they do if the fingerprint is too big?  Well, they change the data and recompute it.

The block contains a bunch of transactions along with a piece of data called the "nonce."  It's just a number that starts at 0, and they add one to it each time they get a hash that is too big, and then they recompute.  The block also contains a timestamp, and the nonce only goes up to about four billion (2 raised to the 32nd power), so when the nonce gets to the highest value it can be, it rolls back to zero and the miner has to change something else.  There are many things they change, but usually it's the timestamp, and it's really the software that changes it automatically.  If they've received new transactions to add to the block, they can restart their nonce back at zero.

The very first transaction in each block currently specifies that 12.5 new bitcoins, plus all the "extra" bitcoin from all the included transactions (called "transaction fees") now belongs to the bitcoin address entered by the miner.  So if you do "mine bitcoin" you can create 12.5 bitcoins and also earn some transaction fees.  I hope you're curious about the transaction fee because here's an explanation: If I identify exactly one bitcoin and declare that 0.9999 goes to your bitcoin address, that leaves 0.0001 on the table.  That's the transaction fee.  If I specified that you get the whole 1.0, then miners wouldn't bother including my transaction in their blocks, so no permanent, globally accessible and cryptographically protected record of the payment would exist and you will never be able to spend it.

Way back before I (or anyone else alive today) was born, anyone could make a unit of currency.  That was before the advent of "legal tender" laws which barred courts from ruling that the stuff anyone can make (like gold coins) must be handed over in a lawsuit.  If you want, you can still get some gold or silver and make a unit of currency, but the government will most likely pretend that what you made looks like a unit of currency that only the government is allowed to make and prosecute you for it.  That's what happened to Bernard von Nothaus who created the "Liberty Dollar."  So people who want to be free went digital.

Banks and governments are now scrambling to make something they can say is based on "blockchain," because they crave control.  My aim with this post was to arm you with a question you can use to avoid being under that control.  Whatever currency they make, ask them how YOU can make a unit of their currency, and see if it requires licenses or permits or privileges or whatever, or if they just ignore your question.  That's what the IRS does when you ask the important questions.

When a currency exists that anyone can make, currency production is "decentralized" and thereby protects those who use it from the corruption inherent to power.  This is why I love cryptocurrency.