Block chain - Block chain is a database - Bespoke data structure "Not crpyto" General Purpose block chain: Why? - Data in block is immutable - Don't edit or remove, you append - traceability (Auditing / logging) - Verifiability (Data must be fully valid) - reproducibility - decentralisation - Trust-less (Removes need for trust) - transparency How? - What type? - public - will be hacked - shared - shared ledger - private - Cryptography - pub/rivate keys - sign information - verifablity - Elliptic Curves - openssl ecparam -list_curves - Addressing - can shorten public keys massively - Hash algorithm - Integrity - 2x sha256 (sha256(sha256($data))) - 4B version, 32B hash of last Block, 32B hash of data block, 4B timestamp, 4B difficulty, 4B nonce - Merkle tree - binary hash tree - Merkle path - list of hashes through the tree - Genesis block - First block in the chain - Special as it's first - Prevents exploitation by being hardcoded - consensus - Confidence - chain forking needs resolution - bitcoin users longest chain wins - proof of work / proof of stake - difficulty is no of zeros that need to be at the start of the hash - others (proof of burn, proof of time, proof of ....) - Smart contracts - Programs that are included in the chain - e.g. A loan paid by the chain - Lighting network (drawback off blockhain is it focuses on integrity not perf) - Off chain transactions with on-chain settlement - Not all blockchains are chains - IOTA Tangle - Challenges - Fault tolerance - You lose control of public/shared blockchains - Now way to enforce software updates - Conflict resolution - Integration with current systems - Security - Cryptography is first and last line of defence - Not perfect for: - scalability - performance - throughput - Incentives - Mining in currencies - Power for money - Privacy - Protect data - Hard forks - 51% attacks - Right solution for the right kind of problem - Event sourcing on steroids QUESTIONS - Any php recommendations? - No. - security? - Store data not values somewhere else - Encrypt - Why private blocks? - Can give public list of hashes for verification - keep data private