0% found this document useful (0 votes)
284 views66 pages

(Eth Deep Dive) Ethereum & Smart Contracts - Enabling A Decentralized Future-Blockchain-Berkeley

The document provides an overview of Ethereum and smart contracts through Blockchain at Berkeley's educational offerings. It discusses the structure of Blockchain at Berkeley which includes an executive board, advisory board, and divisions for research & development, education, consulting, and events. The outline covers an Ethereum deep dive including introductions to Ethereum, smart contracts, the Ethereum Virtual Machine, use cases, and generalizations.

Uploaded by

kevin3210
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
284 views66 pages

(Eth Deep Dive) Ethereum & Smart Contracts - Enabling A Decentralized Future-Blockchain-Berkeley

The document provides an overview of Ethereum and smart contracts through Blockchain at Berkeley's educational offerings. It discusses the structure of Blockchain at Berkeley which includes an executive board, advisory board, and divisions for research & development, education, consulting, and events. The outline covers an Ethereum deep dive including introductions to Ethereum, smart contracts, the Ethereum Virtual Machine, use cases, and generalizations.

Uploaded by

kevin3210
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 66

1

ETHEREUM AND
SMART CONTRACTS:
ENABLING A
DECENTRALIZED FUTURE

Max Fang
2

OUR MISSION
BLOCKCHAIN AT BERKELEY

We seek to educate people about blockchain technology through a wide variety of educational
offerings, to expand blockchain integration by building everything from prototypes to full-fledged
solutions, and to foster innovation through original research and infrastructural contributions.

We're here to build people and build a blockchain community.


3

STRUCTURE
Blockchain at Berkeley

Executive Board Advisory Board

R&D Education Consulting

Events/ Project Fundamentals Ethereum Education Internal External


Research
Meetups Teams Course
Gigs
Dev Course Consulting Projects Projects
4

OUTLINE
ETHEREUM DEEP DIVE

1 ETHEREUM

SMART
2 CONTRACTS

3 EVM

4 USE CASES

5 GENERALIZATIONS
5

ETHEREUM DEEP DIVE

1 INTRODUCTION TO
BLOCKCHAIN
6

Consensus

Trustless
Distributed
wow
7

BLOCKCHAIN INTRO
ETHEREUM DEEP DIVE

what is a Blockchain?

an Immutable, Distributed Ledger

AUTHOR: PHILIP HAYES


8

BLOCKCHAIN INTRO
ETHEREUM DEEP DIVE
Ledger

Alice $500

what do we mean by Ledger? Bob $10

Charlie $1000

Stores information like


account balances
asset ownership
smart contract states
AUTHOR: PHILIP HAYES
9

BLOCKCHAIN INTRO
ETHEREUM DEEP DIVE

what about Distributed?

Peers connected by a network


Peers can crash or act maliciously
Blockchain still needs to function!
(e.g. Byzantine Fault Tolerance)
AUTHOR: PHILIP HAYES
10

BLOCKCHAIN INTRO
ETHEREUM DEEP DIVE

why Distributed?

No central point of failure


Support global-scale applications
Trustless, Uncensorable systems
E.g. cryptocurrencies and smart
contracts
AUTHOR: PHILIP HAYES
11

BLOCKCHAIN INTRO
ETHEREUM DEEP DIVE

Immutable?

Cant change data once it is committed


to the ledger
The data is thus Auditable
The network must come to consensus to
update the ledger
AUTHOR: PHILIP HAYES
12

BLOCKCHAIN INTRO
ETHEREUM DEEP DIVE

Cryptographic Identity

Authentication
Peers sign transactions with their
cryptographic identity
Enables account "ownership"
Can attribute blame
AUTHOR: PHILIP HAYES
13

BLOCKCHAIN INTRO
ETHEREUM DEEP DIVE

what does it mean to come to Consensus?

Everyone agrees on the current state


e.g., how much money does each
account have?

AUTHOR: PHILIP HAYES


14

BLOCKCHAIN INTRO
ETHEREUM DEEP DIVE

how do we reach Consensus?

Common Consensus algorithms


Proof of Work, Proof of Stake, PBFT
Each blockchain has different trade-offs
e.g. Public vs. Private,
Performance vs. Security
AUTHOR: PHILIP HAYES
15

USING ETHEREUM
ETHEREUM DEEP DIVE

Ethereum exists as software


Transactions are conducted through wallet
software
Wallet creation generates an Ethereum address
To receive money, you share your address
Sender specifies address and amount
The transaction is broadcast to the network, where
"miners" verify it and add it to the transaction history

AUTHOR: MAX FANG


Coinbase interface
16

BLOCKCHAIN COMPONENTS
ETHEREUM DEEP DIVE

Transactions
Commits changes to the blockchain
Contains signature of owner of address

Blocks
Contains an ordered bunch of transactions
Timestamps the transactions, are immutable
Each block References a previous block

Blockchain
The entire series of blocks 'chained' together Source: Bitcoin Developer Guide

AUTHOR: MAX FANG


17

ETHEREUM DEEP DIVE

2 ETHEREUM
OVERVIEW
19

WHAT IS ETHEREUM?
ETHEREUM DEEP DIVE

High-level Overview:
Ethereum is a decentralized platform designed to run smart contracts
no single point of control/failure
censorship resistant
Distributed state machine
(block of) transactions == state transition function
Or just think decentralized computer
Account-based blockchain
20

WHAT IS ETHEREUM?
ETHEREUM DEEP DIVE

Ethereum has a native asset called ether


basis of value in the Ethereum ecosystem
needed to align incentives
given to miners as reward for finding blocks
21

ETHEREUM VS. BITCOIN


ETHEREUM DEEP DIVE

Ethereum vs. Bitcoin:


Ethereum: Smart Contract Platform
Complex and feature-rich
Turing complete scripting language
Bitcoin: Decentralized Asset
Simple and robust
Simple stack-based language; not Turing complete
22

ETHEREUM VS. BITCOIN


ETHEREUM DEEP DIVE

Account-based instead of UTXO-based


Turing complete scripting language
significantly more powerful than Bitcoin Script.
enables smart contracts.
The Ether asset is not primary goal
almost side effect of incentive-aligned smart contract platform.
Ethereum plans to move to Proof-of-Stake in the near future.
Bitcoin likely remains Proof-of-Work
23

ETHEREUM VS. BITCOIN


ETHEREUM DEEP DIVE

Misc. Implementation Details


Block creation time: (~12 sec vs ~10 min)
Proof-of-Work: (Ethash vs Sha256)
Ethash is (currently) ASIC resistant
Exchange Rate: (2017-06-17 05:27 PST)
ETH USD : $373
$17 (3/8/17)
BTC USD : $2566
$1168 (3/8/17)
24

ACCOUNTS VS. UTXOs


ETHEREUM DEEP DIVE

Recall:
A Bitcoin users available balance is the sum of unspent transaction
outputs for which they own the private keys to the output addresses.
Instead Ethereum uses a different concept, called Accounts.
Account:
Bitcoin: Ethereum:
address Bob owns private keys to Evan owns private keys
set of UTXOs to an account
balance
5 BTC Bob address: 0xfa38b...
(optional) code
3 BTC Bob balance: 10 ETH

2 BTC Bob code: c := a + b


25

ETHEREUM ACCOUNT TYPES


ETHEREUM DEEP DIVE
Externally Owned Accounts (EOAs):
Generally owned by some external entity, e.g., person, corporation, etc...
Address
Ether balance
Can send transactions
transfer ether to other accounts, trigger contract code
Contract Accounts (Contracts):
Address
Ether balance
Has associated contract code
Code execution is triggered by transactions or messages (function calls) received from
other contracts or EOAs.
Contracts have persistent storage
26

ALL ACCOUNTS == NETWORK STATE


ETHEREUM DEEP DIVE

State of all accounts is the state of the Ethereum network


Entire Ethereum network agrees on the current balance, storage state,
contract code, etc... of every single account.
Ethereum network state is updated with every block
Can think of the block as the state transition function
A block takes the previous state and produces a new network state
every node has to agree upon new network state
Accounts interact with network, other accounts, other contracts, and
contract state through transactions.
27

ACCOUNTS RATIONALE
ETHEREUM DEEP DIVE

Space Savings
Nodes only need to update each accounts balance instead of storing
every UTXO
More Intuitive
smart contracts are more easier to program when transferring
between accounts with a balance
vs. constantly updating a UTXO set to compute users available
balance.
28

ETHEREUM DEEP DIVE

3
ETHEREUM
VIRTUAL
MACHINE
29

EVM
ETHEREUM DEEP DIVE

The EVM (Ethereum Virtual Machine) runs contract code.


Contract code that actually gets executed on every node is EVM code
EVM code is a low-level, stack-based bytecode language.
Kind of like JVM's bytecode
Every Ethereum node runs the EVM as part of its block verification
procedure.
30

EVM
ETHEREUM DEEP DIVE

EVM as a state transition mechanism:

(block_state, gas, memory, transaction, message, code, stack, pc)

EVM

(block_state, gas)

where block_state is the global state containing all accounts


includes balances and long-term storage
31

EVM DESIGN GOALS


ETHEREUM DEEP DIVE

Simplicity:
op-codes should be as low-level as possible.
The number of op-codes should be minimized.
Space Efficiency:
EVM assembly should be as compact as possible
Determinism:
The execution of EVM code should be deterministic
The same input state should always yield the same output state.
Specialization:
should easily handle 20-byte addresses and custom cryptography with 32-byte values
modular arithmetic used in custom cryptography
read block and transaction data, interact with state, etc
Security:
should be easy to create gas cost model for operations so VM non-exploitable
32

EVM CODE COMPILATION


ETHEREUM DEEP DIVE

Solidity Contract
contract PhilipToken {
solc
/* ... */ (Solidity Compiler) EVM Code
}
PUSH1 0x60
PUSH1 0x40
. . .
POP
Serpent Contract JUMP
def register(key, value): serpent compiler
/* */
33

EVM GAS AND FEES


ETHEREUM DEEP DIVE

Immediate Issue:

What if our contract has an infinite loop?

function foo()
{
while (true) {
/* Loop forever! */
}
}
34

EVM GAS AND FEES


ETHEREUM DEEP DIVE

Immediate Issue:

What if our contract has an infinite loop?

Every node on the network will get stuck executing the loop forever!
By the halting problem, it is impossible to determine ahead of time
whether the contract will ever terminate
Denial of Service Attack!
35

EVM GAS AND FEES


ETHEREUM DEEP DIVE

Ethereums Solution:
Every contract requires gas, which fuels contract execution.
Every EVM op-code requires some gas in order to execute.
Every transaction specifies
the startgas , or the maximum quantity of gas it is willing to
consume
the gasprice , or the fee in ether it is willing to pay per unit
gas.
36

EVM GAS AND FEES


ETHEREUM DEEP DIVE

At the start of the transaction


startgas * gasprice ether are subtracted from the senders
account.
If the contract successfully executes
the remaining gas is refunded to the sender.
If the contract execution runs out of gas before it finishes
then execution reverts
startgas * gasprice are not refunded.
37

EVM GAS AND FEES


ETHEREUM DEEP DIVE

What about the infinite loop?


Ethereum still allows the infinite loop
However, the attacker attempting to DoS the network has to pay
enough ether to fund the DoS
Think of purchasing gas as purchasing distributed, trustless computational
power.
38

ETHEREUM CONCLUSIONS
ETHEREUM DEEP DIVE

Ethereum is not about optimising efficiency of computation


Its parallel processing is redundantly parallel
efficient way to reach consensus on the system state without
needing trusted third parties.
Contract executions are redundantly replicated across nodes
expensive
creates an incentive not to use the blockchain for computation that
can be done off chain.
39

ETHEREUM DEEP DIVE

4 SMART
CONTRACTS
40

WHAT IS A SMART CONTRACT?


ETHEREUM DEEP DIVE

contract

(noun) /kntrakt/

1. a written or spoken agreement ... that is intended to be enforceable by


law.
41

WHAT IS A SMART CONTRACT?


ETHEREUM DEEP DIVE

smart contract

(noun) /smrt kntrakt/

1. code that facilitates, verifies, or enforces the negotiation or execution


of a digital contract.
a. Trusted entity must run this code
42

WHAT IS A SMART CONTRACT?


ETHEREUM DEEP DIVE

In blockchain systems, smart contracts are executed by the network itself

Network consensus removes need for Trusted Third Party


No one can violate the contract
No trusted entity to fudge contract execution
Violation of contracts requires subverting the entire network
Allows for secure Peer-to-Peer agreements that live on the blockchain
forever
43

WHAT IS A SMART CONTRACT?


ETHEREUM DEEP DIVE

Contracts in a blockchain smart contract platform like Ethereum are like


autonomous agents that live inside of the network

React to external world when "poked" by transactions (which call functions)


Have direct control over:
internal balance
internal contract state
permanent storage
44

SMART CONTRACTS
ETHEREUM DEEP DIVE

Ethereum Contracts generally serve four purposes:


Store and maintain data
representing something useful to users or other contracts
ex: a token currency or organizations membership.
Manage contract or relationship between untrusting users
ex: financial contracts, escrow, insurance.
Provide functions to other contracts, serving as a software library.
Complex Authentication
ex: M-of-N multisignature access
Some combination of the above!
contract PhilipToken {

/* Maps account addresses to token balances */


mapping (address => uint256) public balanceOf; Minimum Viable Token
/* Initializes contract with initial supply PhilipToken is a stripped down version of a
tokens to the creator of the contract */ digital token contract, written in Solidity.
function PhilipToken(uint256 initialSupply)
{ You can instantiate it with some initial supply of
// Give the creator all initial tokens tokens which can be transferred between
balanceOf[msg.sender] = initialSupply; different accounts.
}
Remember, the contract is an account! It has its
/* Send tokens to a recipient address */ own ether balance, address, storage, etc...
function transfer(address to, uint256 value)
{
if (balanceOf[msg.sender] < value) throw; // Check if the sender has enough
balanceOf[msg.sender] -= value; // Subtract from the sender
balanceOf[to] += value; // Add the same to the recipient
}
}
46

PUBLIC REGISTRY / PUBLIC DATABASE


ETHEREUM DEEP DIVE

Example: Namecoin

DNS system
Maps domain name to IP address
"maxfa.ng" => "69.69.69.69"
Immutable
Easy implementation in Ethereum

Example (from Ethereum white paper):


47

CROWDFUNDING AND INCENTIVIZATION


ETHEREUM DEEP DIVE

Simple Example: "Ether-on-a-stick"


Allows you to put a bounty on the completion of arbitrary tasks
Contributors pool money into a smart contract that pays out to a specified
recipient iff contributors vote that the task was indeed complete

Example use case


A company is polluting a local river and nearby residents bear a negative
externality
Local gov't slow/unresponsive but residents are willing to pay
Residents pool money together to incentivize the company to clean it up

Implements a Dominant Assurance Contract: solves the free rider problem


48

ETHEREUM DEEP DIVE

5 NOVEL USE
CASES
49

DECENTRALIZED PREDICTION MARKETS


ETHEREUM DEEP DIVE

Prediction markets draws on the wisdom of the crowd to forecast the future
Market makers create event
Ex: "Who will win the 2020 US Presidential election?"
Events must be public and easily verifiable, with set due date
Participants buy shares of Trump or Zuckerberg and pay a small fee
On election day, random oracles on the network vote on who won.
Oracles who voted with the majority collect a fee, they are otherwise penalized
Shareholders who voted correctly cash out on their bet

The share price for each market accurately represents the best
predicted probability of event occurring
Shares resolve to $1 if true, $0 otherwise
Someone has extra information => arbitrage opportunity
50

DECENTRALIZED PREDICTION MARKETS


ETHEREUM DEEP DIVE
Use cases
Cost efficient way to buy information on a future event
Instead of hiring pundits and experts, create a market for your event
"Will this movie be a flop?"
Bet for and against your event to incentivize people who have information
about this event (in this case, Hollywood insiders)
Hedging and insurance
Fire insurance is a bet that your house will burn down
Create market "Will my house burn down?" and vote yes
=> receive compensation if your house burns down
Possible to implement an entire insurance liquidity pool
Potential for extremely thin margins since no central
intermediary is required
51

DECENTRALIZED PREDICTION MARKETS


ETHEREUM DEEP DIVE
Use cases
Set up a security bug bounty
"Will my company be hacked, with the hacker revealing their exploit?"
Bet heavily against it to create a financial incentive
Someone who finds vulnerability will buy affirmative shares, then perform their hack
> Profit
Augur secures their own code this way
"Will someone be able to steal the money in this prediction market?"
Signaling: "Put your money where your mouth is"
Demonstrate your commitment to something by showing
you will take a large financial loss if you miss your commitment
Ex. Kickstarter campaign; investors are worried you will delay
launch date
"Will my Kickstarter campaign launch on time?"
Bet heavily that you WILL launch your product on time.
52

DECENTRALIZED PREDICTION MARKETS


ETHEREUM DEEP DIVE

Benefits to being decentralized


No restrictions on market creation
Arbitrary markets allow for much wider range of applicability
Caveat: Need a defense against unethical/illegal markets
Ex Augur: Oracles vote on "unethical" or "undecidable"
Shared liquidity pool
No reason why the same market should exist in multiple countries
Allows for more advanced markets;
e.g. combinatorial prediction markets
Censorship-resistant
Automatic, trustless payments
53

FUTARCHY Futarchy is a form of government proposed by


ETHEREUM DEEP DIVE economist/philosopher Robin Hanson
Use democracy to agree on economic goals
and objectives
Setup and Premises But use prediction markets to determine
It is not that hard to tell rich happy nations from which policies to actually implement
poor unhappy ones "Vote values, bet beliefs"
Democracies fail largely by not aggregating Prediction markets are the best known way of
available information aggregating information
Poor democracies often adopt dumb Having a say in policy requires financial
policies that hurt everyone commitment
But it's not that there weren't smart "Put your money where your mouth is"
people who disapproved of the dumb In the words of Hanson: "Pundits who
policies know they know nothing shut up, and
The relevant experts were just ignored those who do not know they know
Can't just put relevant experts in power nothing lose all their money, and then
Because then they start acting in their shut up."
own interests, and would no longer be It is unclear whether futarchy can be implemented
relevant experts with blockchain
Proposed solution: Futarchy
Further reading: summary, paper
54

DECENTRALIZED AUTONOMOUS ORGANIZATIONS


ETHEREUM DEEP DIVE
A Decentralized Autonomous DASH
Organization, or DAO, is an organization Privacy-centric cryptocurrency
governed entirely by code (smart % of mining reward
contracts)
Create and vote on proposals TheDAO
Businesses can theoretically exist Crowd venture fund
entirely on a blockchain Largest crowdfunded project in history
Uncertain legal status Raised >$150 million in Ether
"Code is law" Hacked in June 2016, >$60 million worth
Issues: of Ether stolen (10% of Ethereum market
Hard to edit the governing laws (the cap)
code) once deployed
Possible solution: Child DAO Other DAOs on Ethereum:
Inactive participants: not enough Slock.it
people vote on proposals Digix.io: Store gold on the
Ethereum blockchain
55

DECENTRALIZED SHARING ECONOMY


ETHEREUM DEEP DIVE

Slock.it: A lock that can be directly opened


by paying it
Owner sets a deposit + price
Renter pays deposit + price into lock
connected to Ethereum node
Lock detects payment and unlocks itself
Use Cases (Slock.it):
Fully automated Airbnb apartments
no need to meet with owner for
key
Wifi routers rented on demand
Fully automated shop
Purchase goods by sending the
price of the good to the lock that
holds it from slock.it

Automated bike rentals


56

ETHEREUM DEEP DIVE

5.1 GENERALIZATIONS

DOES IT MAKE SENSE TO USE A BLOCKCHAIN?


57

ESSENTIAL PROPERTIES OF BLOCKCHAIN KILLER APPS


ETHEREUM DEEP DIVE
Redundant, mission-critical, fault-tolerant systems
Solving coordination failures (ex. Filament)
Arbitrary incentive structures (trustless too!)
Easily solves the free rider problem Complete security within the closed blockchain system
(ex. Funding smart grid infrastructure) But can break down at the interface with the real
Max: "A technological solution to a social world
problem"
Novel organizational and governance models
Disintermediation, censorship-resistance, open (ex. DAOs, futarchy)
networks
Where decentralized architecture shines
Advantages of centralized solutions:
Data immutability, integrity, auditability, and Deep internal integration due to social cohesion
authenticity Efficiency - blockchains are slow in general
But the data entering blockchain must also Full control over read/write permissions
be correct - Delegated trust (Jon) Fast and adaptive
Manages complexity well

ALWAYS ASK: Why is using a blockchain better than a central database?


58

CONCLUSION
ETHEREUM DEEP DIVE
Blockchain technology (and distributed
tech) is going to lead to a new world of
decentralization

Remember:
Why is blockchain better than using
a centralized database?
Almost any app that exists today
can (theoretically) be built in a
completely decentralized way
The only limitation is what we can
secure and scale

Contact me:
[email protected]

Website: maxfa.ng
59

QUESTIONS?
60

ETHEREUM DEEP DIVE

X
(EXTRA)
BUSINESS
USE CASES
61

AFTER HOURS TRADING


ETHEREUM DEEP DIVE

24 hour stock trading is convenient


Our world is digitized
Why doesn't it exist?

After hours trading has not taken off because it faces a liquidity problem

Price is more volatile and destabilizing


Regulation restricts trading to only using limit orders since low volume is
considered dangerous
Only sustainable at larger brokerages

"Convenience is great, but Id rather have a better price" - Direct Edge COO
62

AFTER HOURS TRADING


ETHEREUM DEEP DIVE

Solution: Blockchain-based asset exchange with legal bindings

Brokerages can let users "withdraw" their stock into stock tokens on a
blockchain.
The stock is subtracted from the user's account, brokerage holds it in the
meantime.
Brokerage writes a legal contract: "Anyone who proves that they own a stock
token is eligible to redeem it for a stock I am currently holding"
Tokens are backed by real stocks
Create a trustless blockchain-based stock exchange that allows users to
trade around stock tokens.
63

AFTER HOURS TRADING


ETHEREUM DEEP DIVE

Result:
After hours trading enabled with very little cost
Anyone can now use their Ethereum to buy stock tokens and trade, 24/7/365
Multiple brokerages can participate and create a shared liquidity pool
Brokerages don't have no need to trust each other, since asset management
and deduplication handled by the blockchain
Anti money laundering is enforced when traders redeem their tokens.
All trading history is transparently logged on the blockchain.

In general, blockchain applied to finance is difficult because trust usually exists

Read more: http://www.marketwatch.com/story/24-hour-stock-trading-never-took-off-heres-why-2011-11-30


64

SMART ENERGY GRIDS


ETHEREUM DEEP DIVE
Premise:
There are imbalances in energy (heat, electricity) across a community.
House A may have excess heat, while house C may be too cold
House A can sell its excess energy to House C, the energy difference
cancels out.
In other words, create an energy market. Both parties save money
Community becomes more power efficient overall

Problem: Need custom infrastructure from A -> B -> C


Energy infrastructure currently flows unidirectionally
Utility company doesn't want to build smart grid infrastructure, since less
revenue for them
Government has little to no incentive to help
65

SMART ENERGY GRIDS


ETHEREUM DEEP DIVE

Solution: Set up an Ethereum smart contract for financial commitments

Coordination of development
"I, house A, commit $10k to building this infrastructure. If house B and house C
also commit $10k, the total amount will go to this contractor to begin
construction, and it can only go to this contractor."
Households can coordinate to build infrastructure without trusting each other

Ethereum blockchain thus serves as a coordination layer


Entities "fall back" onto blockchain when coordination can't be found via a
central entity or government.
66

BASIC CONCEPTS - IDENTITY IN ETHEREUM


ETHEREUM DEEP DIVE

Send money between pseudonyms


pseudonym == address == account == public key
Cryptographic primitives
digital signature scheme (ECDSA: Elliptic Curve Digital Signature Algorithm)
public key/private key pair; like email address + password
one-way hash function (SHA-256)
Ethereum is hidden in the large amount of public keys
Users can generate arbitrarily many key pairs
Example Address: 0x97Df9c41FD0416929b0E9eCeB1084Fe0303A9098
2^256 possible key pairs (115,792,089,237,316,195,423,570,985,008,687,907,853,269,984,665,640,564,039,457,584,007,913,129,639,936
possible addresses)
Grains of sand on earth: 2^63
Grains of sand from all grain-Earths on Earth: 2^126
Repeat 2x more to yield 2^252 ... still only 1/16th of 2^256
AUTHOR: MAX FANG

You might also like