• If you are citizen of an European Union member nation, you may not use this service unless you are at least 16 years old.

  • Work with all your cloud files (Drive, Dropbox, and Slack and Gmail attachments) and documents (Google Docs, Sheets, and Notion) in one place. Try Dokkio (from the makers of PBworks) for free. Now available on the web, Mac, Windows, and as a Chrome extension!



Page history last edited by rsb 5 years, 10 months ago


Class Notes:


Pre-course task:


Send .5 BTC to the following address: 1PNabKGjkXMNqsAmZgg9nDf9izoMwBM6mh, entering the resultant transaction ID into the following page: https://docs.google.com/forms/d/1aAV2_PasltFiidCehncRlEO_U66liJ3xwHHBTIFSuHQ/viewform


Starting with a valid wallet.dat with coins in it:


Download bitcoin core, compile, run bitcoind, put a valid wallet in the default wallet dir, let bitcoind catch up with the blockchain ( bitcoin-cli getblockcount - wait until it matches latest count on blockchain.info)







./bitcoin-cli listaccounts

./bitcoin-cli sendfrom "accountname" "1PNabKGjkXMNqsAmZgg9nDf9izoMwBM6mh" 0.5 


and a transaction ID is returned.  done!


1st day class notes and references:


Missed first day due to unforseen circumstances but went through this :( ! :( !


Slides: https://docs.google.com/presentation/d/1xkVlGuEw2U_yfPTS8udfO7nHheWCRTv1ibwIuTR9PlI

Group: https://groups.google.com/forum/#!topic/blockchainu

Reddit: http://www.reddit.com/r/blockchainu/

Video: https://www.youtube.com/watch?v=3c9Dl3EZyhw

Oreilly mastering bitcoin book: https://github.com/aantonop/bitcoinbook

Math behind bitcoin: http://blog.chain.com/post/95218566791/the-math-behind-bitcoin

Code example: https://gist.github.com/ryandotsmith/90ac5c626e1c3e52b9b9




Use a simple blockchain API.

Try to find out if a transactions outputs have been spent.

Probably also get that code example running that was given and see what it does.

Unsure if that's all.  This may be a list of ideas for homework: https://github.com/BlockIo/blockgarage/blob/master/onsite_projects.txt


Useful refs for homework:


Node command line: http://shapeshed.com/command-line-utilities-with-nodejs/

Bitcoinjs-lib tests: https://github.com/bitcoinjs/bitcoinjs-lib/tree/master/test

Chain site, whose API is used in example: https://chain.com/

Get testnet coins from the testnet faucet: https://tpfaucet.appspot.com/

Block.io - http://block.io

Testing bitcoin apps: https://bitcoin.org/en/developer-examples#testing-applications


Day 4 Class notes and references




Start with the wiki: https://github.com/ethereum/wiki/wiki

Install with homebrew the devel version: https://github.com/ethereum/homebrew-ethereum

Read through the entire tutorial: https://github.com/ethereum/wiki/wiki/Ethereum-Development-Tutorial


Homework is to get Ethereum devel version running, write a contract that accepts both investors and speculators in shares of itself.


Stuff from lunch:

Deangelo has nice simple laymans explanations: https://www.youtube.com/channel/UCgo7FCCPuylVk4luP3JAgVw

Art of the problem also: https://www.youtube.com/user/ArtOfTheProblem

Very fun site: http://www.black-holes.org/


Day 5 Class Notes 


Augur: P2P prediction market.

  Should be used to pick startups.


Interesting apps out there:





Homework: Requirement to use distributed toolkit:

   filesystem, smart contract, notarization, tokenization



  Very interesting presentation on a wrapper to all blockchains - plugins for ethereum, IPFS, bitcoin, etc. 

  Legal Markdown - write contracts, render pdf contracts, etc. ( https://lmd.io/ ) - also see ( http://commonaccord.org/ )


Day 6 Class Notes


IPFS Class



  Permanent web

  Impressive as a distributed unix-like file system 

  Graph structure - similar to git - one way of using IPFS is as a permanent web graph database -

        API is a db driver - you can build your own database drivers that do post processing on IPFS.

  You can post entire package managers and filesystems, and just bring things into your local node when they need to run 

  The goal is to get to the point when you don't deliver applications, and you don't care what they are written in, people just have ipfs and they can run any app written in any language based on the libraries and signatures and code that exists in ipfs.  Want someone to run javascript, you can point them at a copy of V8 on ipfs to run it.  Or, maybe, you could have an IPFS node and net stack in firmware, and you boot to load that, and no other OS needed, or your OS is a homepage.  I asked the IPFS guy about doing this on a chromebook afterward, and - oh, yeah, that's coming.


Install go (better to install from source and really take time to learn about the go path stuff, naming of which is all f'd up, nice language, horrible install)


Install IPFS



  Share some files

  Build a data structure together


Cool diagnostics:

     ipfs net --help is awesome.  generate a graph of the network, etc.


Bitcore labs preso:

     Nice javascript library and service for wallets

     Strong testing culture

     goal is a full node that is npm installable - right now javascript api

     implementation of payment channels - almost like a pre-confirmed transaction


     insight api  

     copay.io - multisig wallet service - a service right now, but open source - uses bitcore - you can build on it



Day 7 class notes:


OKTurtles - non-profit (speaker)

* Supporting beneficial decentralization technologies (these guys are kind of awesome)

* DNSChain

* Blockchain ID - json format


Used to be: Human readable - Secure - Decentralized (pick 2)

Now with blockchain tech we can have it all


Namecoin - dns implementation on the blockchain


OneName - blockstore identity service


Really good explanation of the variety of systems that need to be trusted for TLS to work (mostly all the registrars and such) and the various compromises they are subject to.  Would make a good statistics problem to figure that out fairly accurately.  In any case, the answer is scary enough that TLS is mostly meaningless for nation states.


Day 8 class notes:


Consensus Blockchains:


Tendermint - Consensus Network


Bockchain consensus system.


Gossim network - no point to point - hard to identify the next proposer.




FLP impossibility result - impossible to come to consensus if even one node in a network is faulty.


Byzantine nodes - can be faulty


What is consensus? All good nodes come to the same agreement.


HyperLedger - byzantine consensus algorithm.


Completely Asynchronous - No assumption of time


Internet - partially synchronous - latency in messages


People point to FLP result and say that proof of stake is impossible - but that's not the case.


Consensus in the presence of partial synchrony (1988) shows how proof of stake is possible.


State machine:


Height: blockchain you all agree on.


Round: how many proposal stages have failed.


Proposer state:


A lot of proof of stake protocols choose a proposer arbitrarily.


Tendermint dterministically chooses a proposer.


Proposing blocks out of turn (two blocks or more in a round) is punishable.


For all validators, given a height and round, a single proposer is chosen.


Prevote stage:


After 20 seconds, move to the prevote stage.  Everyone prevotes for a block.

For height H, round R, you sign a block hash.


Precommit stage:


After 20 seconds, move to precommit stage.  Each node - if you see 2/3 or more prevotes for a block, you precommit for that block.


Commit stage:


After 20 seconds, move to commit stage.  If you see 2/3 or more precommit signatures for a block, you commit for that block.


Two-phase commit - similar to DLS algorithm.




No two correct nodes disagree (the blockchain never forks)




The system doesn't deadlock (blocks are eventually committed)


Validator locking on a block means that the validator saw 2/3 or more prevotes/precommits/commits for a block.


If 1/3 of the the validators or more are locked, then we are screwed.


Each time you propose a block, if you have seen a 2/3 majority of signatures in a previous round, you share the signatures you saw in that previous round and you propose the block that you saw with those signatures.  When everyone sees that, they will be able to verify that 2/3 majority exists for that block, and every non-byzantine node that sees that will then vote for that proposed block.


Not enough nodes:


If there are not enough nodes to gain consensus, the network stops.  It should.  You don't want to make bad decisions, and if the network is not healthy, it dies.


Where to: Will use the ethereum EVM to add an optional proof-of-stake sidechain.





Videos and other stuff:


Updated Blockchain U Class Videos



Crypto Economicon Event Video



Crypto Economicon 15 second clip to post onto instagram or vine accounts



Blockchain U and Conference photo album



In general, this is the youtube link:




Notes on oreilly blockchain summit:




MidTerm Project Ideas:


Idea 1: MagicRecyclingMachine


Novel combination of an art auction site with donation recycling.  Makes use of two very common things to create a positive feedback mechanism: an art purchase (as donation to charity) followed by a voluntary gift of art (generated as thanksgiving for a donation).  The anticipation is that a donation can produce multiple pieces of art, the auction of which will create more donations than are required to replace the art via the same mechanism.


This is a project that I describe in one of my short stories.  An auction site that accepts bitcoins for kids art obtained from kids charities, and returns all proceeds to the kids charities to obtain more art.  Can be generalized.


To do this, I need to find charities like donors choose (one donation can produce more than one piece of art), and get them to accept bitcoins for art, or convert the bitcoins to cash, then donate the cash.  Donors choose is the ideal candidate, but there  are a lot of other charities: http://bitcoin100.org/charities/



  • The whole thing, of course, is a money-losing idea.  People chasing money hate this idea - something I really like about it.  
  • Sort of wedging bitcoin into an idea that is good without bitcoin.  For charities that don't accept bitcoin, we would accept payments to a wallet, then convert via some API to cash, then donate.   It might be marginally better with bitcoin, but that's not a key feature.
  • There is a lot of manual work involved.  You have to receive the art, take a picture or two, post it, say something about it, and then when the money rolls in, ship it.  After that, you have to find a good place to donate the receipts, and make the donation.  I see two ways to solve this.  
    1. Perhaps after proving that this is helpful and fun to me, the work could be pushed onto the user, making this site a resource for people who want to do this.  Users would go to the site and do the work of uploading a picture and a description of the art, defining the kind of packaging required to ship it.  The donations would come in when the auction closed, the user would ship the art (perhaps recieving a pre-paid shipping label from the proceeds of the auction).  Once shipped, the user could pick from a selection of charities to donate the remaining proceeds to, and the donation would be recycled.
    2. Find charities through which you can receive digital art.  
    3. Work with charities.  Provide donors choose and every other kids charity with a login to the system, so that they can post "art producing kids" via an API, and receive funds via an API.  Also provide them with a web interface by which they can do that manually.  But either way, the whole thing is automated from the side of the magicrecyclingmachine. 


Idea 2: ReviewBounty


Utilizes a smart contract to solve the problem of not having a good editor and finding/sourcing good edits from people for your work.

Works for coding or creative writing or anything benefits from an editor.  


Something like this surely exists for coding in the form of a "bug bounty" system, but nothing like this exists for creative writers, and nothing I can find like this uses a smart contract.


The "Author" pushes something to github.  Github post commit hook that says: These bitcoins go out to anyone who edits or reviews my work such that it passes the "I like your review" test (of course the reviewer needs to understand git and have a bitcoin receiving address - a solid filter).  A server process watches the repo for edits, and emails you when someone submits an edit via git.  The email has a web form with "like", "don't like", "ban", and comments.


No website is required.  The whole thing could be done manually, without any aid from code.  The idea is to automate some work.  The minimum amount of code to provide a reasonable aid to the author is a post-commit script and a listener process.


A website could simplify the life of the author in transfer of bitcoins into the network, setup of the post-commit hook, and configuring and hosting the server process.  If non-technical editors are desired, then the website could provide a wrapper to both bitcoin and git for them, even allowing them to make edits on the site, and potentially creating a wallet for them, or converting coins to paypal.  Finally, a website can highlight the work available to editors - a single source for aggregating lots of interesting editing work.  



  • Not sure how the expression of "liking a review" is detected by the smart contract - must be some way to do that - need to look at examples of this.  The smart contract is a key feature of this system.  Would be interesting to learn about it.


Final Project Ideas 


Expanding my midterm is my final project for cohort1 - it's a meteor app - https://github.com/richbodo/multibounty 


However, my follow on side-project is a classifier for smart contracts - https://github.com/richbodo/ddaorg


And I am taking up the magic recycling machine idea as a regular web app to expand on my meteor knowledge - https://github.com/richbodo/magicrecyclingmachine




Comments (0)

You don't have permission to comment on this page.