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

  • Stop wasting time looking for files and revisions! Dokkio, a new product from the PBworks team, integrates and organizes your Drive, Dropbox, Box, Slack and Gmail files. Sign up for free.

View
 

Blockchainu

Page history last edited by rsb 4 years, 2 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)

 

Refs: 

https://github.com/bitcoin/bitcoin/blob/master/doc/build-osx.md

https://en.bitcoin.it/wiki/Running_Bitcoin

https://en.bitcoin.it/wiki/Data_directory#Mac

 

./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

 

Homework:

 

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

 

Ethereum:

 

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:

 

IPFS

ZeroNet

 

Homework: Requirement to use distributed toolkit:

   filesystem, smart contract, notarization, tokenization

 

Eris: 

  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

 

Intro

  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

 

Exercises:

  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

     impulse.is

     insight api  

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

          https://github.com/bitpay/copay

          

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.

 

Background:

 

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.

 

Safety:

 

No two correct nodes disagree (the blockchain never forks)

 

Liveness:

 

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.

 

Jae@tendermint.com

 

 

Videos and other stuff:

 

Updated Blockchain U Class Videos

https://www.youtube.com/playlist?list=PLb68nxJHvj10JvS-lebOb-FHHeWUMpwKO

 

Crypto Economicon Event Video

https://www.youtube.com/watch?v=wy0KqAQxzRs

 

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

https://www.youtube.com/watch?v=4pdzMLhm3Lk

 

Blockchain U and Conference photo album

https://plus.google.com/photos/113660745564407704152/albums/6110524979042201505

 

In general, this is the youtube link:

 

https://www.youtube.com/channel/UCJ5uHx90mZGlK0lC-GSmtzw

 

Notes on oreilly blockchain summit:

 

oreilly_bc_summit2014

 

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/

 

Issues:

  • 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.  

 

Issues:

  • 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.