Welcome to the Blockchain Revolution
04. Influence of Blockchain4:26
05. Blockchain Overview3:06
06. Program Overview2:41
07. Nanodegree Resources
08. Introduction to Workspaces3:34
09. Practice Using a Workspace00:00
10. Blockchain Motivation00:00
12. Looking Ahead0:27
Blockchain Basics
A blockchain is a shared database that features added immutability as a safe and accurate alternative to
existing data storage methods. Students will learn the basics of how the blockchain data model works by
creating their own private blockchain using Node.js and Leveldb. In this project, students will learn the
fundamentals of architecting a collection of data into a blockchain data model. Learners will configure how
each block stores data, validate blocks, add new blocks to the chain, and create methods to validate the
chain integrity.
Learners will then create a back end API web service, and migrate their private blockchain to the web
service. In the process, students will learn how to post new blocks to the blockchain via a RESTful web client.
Learners will then encrypt and decrypt the unique digital collectibles on a private blockchain.
03. Financial Transactions4:31
03.2 Financial Transactions
03.3 Financial Transactions2:41
04. Introduction to Bitcoin3:42
05. Hashing2:06
05.2 Hashing2:13
06. Practice Hashing00:00
06. Practice Hashing
07. Blocks5:47
07.2 Blocks3:06
08. Practice Block00:00
08. Practice Block
09. Blockchain2:34
09.2 Blockchain3:01
10. Distributed Peer-to-Peer Network5:30
10. Distributed Peer-to-Peer Network
11. Memory Pool4:23
11.2 Memory Pool3:51
12. Consensus2:39
13. Proof of Work2:24
13.2 Proof of Work3:21
13.3 Proof of Work2:44
14. Proof of Stake4:36
15. Delegated Byzantine Fault Tolerance4:04
16. Other Consensus Models
17. Recap of Achieving Consensus Protocols
18. Interview: Blockchain Fundamentals0:54
18.2 Interview: Blockchain Fundamentals00:00
19. Lesson Recap0:23
Blockchain Transactions
01. Lesson Introduction0:57
02. Interview Blockchain Identity00:00
02.2 Interview: Blockchain Identity1:22
03. Blockchain Identity4:25
03.2 Blockchain Identity00:00
03.3 Blockchain Identity
03.3 Blockchain Identity
04. Wallet Overview00:00
05. Wallet Types00:00
05.2 Wallet Types00:00
05.2 Wallet Types
06. Private Keys00:00
06.2 Private Keys00:00
06.2 Private Keys
07. Get Your Own Wallet
08. Restoring Blockchain Identity
09. Sign a Transaction00:00
09. Sign a Transaction
09.2 Sign a Transaction
09.2 Sign a Transaction
10. Blockchain Transaction Lifecycle00:00
11. Interview: Blockchain Identity00:00
12. Course Recap00:00
Verify Message Signature
01. What Will You Learn
02. Sign and Verify a Message
03. Step 1 Generate Private Public Keys using a Wallet Address
04. Step 2 Sign a Message
05. Step 3 Verify a Message Signature
06. Quiz Verify Message Signature00:00
06. Quiz Verify Message Signature
Manage Your Blockchain Identity
Create and manage identity on the Bitcoin blockchain and establish proof of ownership with blockchain transactions, without the need to provide sensitive information.
01. Project Overview
02. Build Your Project
03. Prepare for Submission
Project Description – Managing your Blockchain Identity
Project Rubric – Managing your Blockchain Identity
Blockchain Data Overview
01. What Will You Learn?00:00
02. Interview Blockchain as a Dataset00:00
02.2 Interview Blockchain as a Dataset00:00
03. Blockchain vs Traditional Databases00:00
03.2 Blockchain vs Traditional Databases00:00
03.3 Blockchain vs Traditional Databases
03.3 Blockchain vs Traditional Databases
04. Do You Need a Blockchain00:00
04. Do You Need a Blockchain
05. Blockchain Types00:00
05.2 Blockchain Types00:00
05.2 Blockchain Types
06. Interview Blockchain Types00:00
07. P2P Network vs Client-Server Model00:00
07.2 P2P Network vs Client-Server Model00:00
07.2 P2P Network vs Client-Server Model
08. Explore Blockchain Data00:00
08.2 Explore Blockchain Data00:00
08.2 Explore Blockchain Data
09. Practice Block Data00:00
09. Practice Block Data
10. Explore Bitcoin’s Codebase00:00
10. Explore Bitcoin’s Codebase
11. BIPs and Forks00:00
11.2 BIPs and Forks00:00
11.3 BIPs and Forks00:00
11.4 BIPs and Forks00:00
11.5 BIPs and Forks
12. Quiz Softfork vs Hardfork
12. Quiz Softfork vs Hardfork
12.2 Quiz: Softfork vs Hardfork
12.2 Quiz: Softfork vs Hardfork
13. Interview How to Get Involved00:00
14. Lesson Summary00:00
Bitcoin Core Testnet
• Explain the benefits of utilizing the Bitcoin Core testnet.
• Describe the difference between the public testnet and regression testing
01. Lesson Introduction00:00
02. Bitcoin Core Motivation00:00
03. Bitcoin Core – Overview00:00
04. Bitcoin Core – Networks00:00
05. Mainnet vs Testnet00:00
06. Testnet vs Regression Testing00:00
07. Data Warnings and Bitcoin.config Setup
08. Bitcoin Core – Getting Started00:00
09. Bitcoin Core – Wallet Overview00:00
10. Bitcoin Core – Network Demonstration00:00
11. Get Testnet Coins00:00
12. Testnet Wallet Transactions
13. Testnet Wallet Transactions – Bitcoin Core v0.17
14. Block Explorer00:00
15. End of Lesson Motivation00:00
16. Lesson Recap00:00
Bitcoin Debug Console
01. Lesson Introduction1:41
02. Interview Debug Console00:00
03. Terminal Overview
04. Debug Console00:00
05. Blockchain Commands00:00
05. Blockchain Commands
06. Hash Commands00:00
06. Hash Commands
07. Block Commands00:00
08. Wallet Commands00:00
09. Mempool Commands00:00
09. Mempool Commands
10. Transaction Commands00:00
10. Transaction Commands
11. Signature Commands00:00
11. Signature Commands
12. Network Commands00:00
12. Network Commands
13. Mining Commands00:00
13. Mining Commands
14. Bitcoin-CLI
15. Interview Use Help!00:00
16. Lesson Recap00:00
Blockchain Data
Learn the relationship between different stages of transaction lifecycle using Bitcoin Core
01. Lesson Overview00:00
02. Blockchain Data Motivation00:00
03. Blockchain Data Models Overview00:00
04. Transactions – Inputs and Outputs00:00
05. Transaction Data Models00:00
06. Bitcoin Scripts00:00
07. Script Opcodes00:00
08. Opcodes
09. Attributes of Script00:00
10. Raw Transaction Review
11. Create Raw Transaction Motivation00:00
12. Setup for Creating a Transaction00:00
13. Create a Transaction Step 100:00
14. Create a Transaction Step 200:00
15. Create a Transaction Step 300:00
16. Create a Transaction Step 400:00
17. Create a Transaction Step 500:00
18. Create a Transaction Step 600:00
19. Create a Transaction Step 700:00
20. Embedding Data in Transactions00:00
21. Embedding Data in Bitcoin Core00:00
22. Ethics of Embedding Data00:00
23. Lesson Summary and Project Prep Overview00:00
Private Blockchains
• Explain the value of a private blockchain and prepare for the course project.
01. Lesson Introduction0:40
02. Public and Private Blockchains00:00
03. Public and Private Blockchain Interaction00:00
04. Build a Simple Private Blockchain00:00
05. Working with Your Workspace
06. Block Data Model00:00
06.1 Block Data Model (Practice)00:00
07. Create New Blocks00:00
07.1 Create New Blocks00:00
08. Store Blocks00:00
08.1 Store Blocks00:00
09. Link Blocks00:00
09.1 Link Blocks00:00
10. Block Height and Timestamp00:00
10.1 Block Height and Timestamp (Practice)00:00
11. LevelDB to Persist Data00:00
11.1 LevelDB to Persist Data (Practice)00:00
12. Practice LevelDB and Promises00:00
12. Practice LevelDB and Promises
13. Lesson Recap00:00
14. Project Prep00:00
Building Your Own Private Blockchain
01. Project Introduction
02. Project Details
03. Step 1 Review Boilerplate Code
04. Step 2 Modify Functions to Persist Data
05. Step 3 Test New Functionality
06. Extra Support
Project description – Private Blockchain00:00
Project Rubric – Private Blockchain
Planning a Web Service
01. Interview What’s a Web Service00:00
02. Lesson Overview00:00
02. Lesson Overview
03. What is a Web Service00:00
03. What is a Web Service?
04. Web Service with Blockchain Considerations00:00
05. Planning Web Services with Our Private Blockchain00:00
05. Planning Web Services with Our Private Blockchain
06. Web Services with Node.js00:00
07. Node.js Intro00:00
08. Node.js Setup
08.2 Node.js Setup00:00
08.3 Node.js Setup00:00
09. Node.js Components00:00
10. Node.js Client and Server Features
11. Practice Client-Server Features00:00
12. Mock Data Set00:00
13. Testing endpoints00:00
13. Testing endpoints
13.2 Testing endpoints00:00
14. Lesson Summary00:00
Web Services with Node.js
01. Lesson Introduction00:00
02. RESTful APIs with Node.js Frameworks00:00
02.2 RESTful APIs with Node.js Frameworks00:00
03. Express.js00:00
03.2 Express.js00:00
03.3 Express.js00:00
04. Practice Express.js00:00
05. Hapi.js00:00
05.2 Hapi.js00:00
05.3 Hapi.js00:00
06. Practice Hapi.js
07. Sails.js00:00
07.2 Sails.js00:00
07.3 Sails.js00:00
Utilizing Third-Party Libraries
01. Lesson Overview00:00
02. Third-Party Libraries with Bitcoin Core00:00
03. Security – Third-Party Libraries and MultiSig00:00
04. Lesson Summary00:00
RESTful Web API with Node.js Framework
01. Project Introduction
02. Project Details
03. Step 1 Select Node.js framework
04. Step 2 Configure API Service
05. Step 3 Configure Two Endpoints
06. Step 4 Update project README.md
07. Extra Support
Project Description – RESTful Web API with Node.js Framework00:00
Project Rubric – RESTful Web API with Node.js Framework
Digital Assets with Blockchain Identity
• Encode and decode digital assets on a private blockchain and publicly prove ownership of the assets using digital identity
01. Lesson Overview00:00
02. Digital Assets00:00
03. Encode and Decode Basics00:00
03.2 Encode and Decode Basics00:00
04. Encode and Decode from Terminal00:00
05. Encode and Decode with Node.js
06. Proof of Existence00:00
06.2 Proof of Existence00:00
07. Securing Assets Using Your Digital Identity00:00
08. Blockchain Generations00:00
09. Lesson Recap00:00
Build a Private Blockchain Notary Service
01. Project Introduction
02. Project Resources
03. Project Walk-through
Project Description – Build a Private Blockchain Notary Service00:00
Project Rubric – Build a Private Blockchain Notary Service
NEW Introduction to Ethereum
• Describe the fundamentals of Ethereum and how it is different from Bitcoin.
• Build, compile, deploy, and test smart contracts using remix, ganache, truffle, and infura.
01. Lesson Introduction1:45
02. Ethereum Basics3:14
02.2 Ethereum Basics3:37
02.2 Ethereum Basics
02.3 Ethereum Basics
03. What makes Ethereum Special00:00
03. What makes Ethereum Special
03.2 What makes Ethereum Special00:00
03.2 What makes Ethereum Special
03.3 What makes Ethereum Special00:00
03.3 What makes Ethereum Special
03.4 What makes Ethereum Special00:00
03.4 What makes Ethereum Special
04. Ethereum Tools and Community00:00
04. Ethereum Tools and Community
04.2 Ethereum Tools and Community
04.2 Ethereum Tools and Community
05. Introduction to DApps00:00
05.2 Introduction to DApps00:00
05.2 Introduction to DApps
05.3 Introduction to DApps00:00
05.3 Introduction to DApps
06. Scan the Ethereum Network00:00
06. Scan the Ethereum Network
07. Deploy to the Test Network00:00
07.2 Deploy to the Test Network
07.3 Deploy to the Test Network00:00
07.4 Deploy to the Test Network00:00
08. Prepare to Connect to the Network00:00
08. Prepare to Connect to the Network
08.2 Prepare to Connect to the Network00:00
08.2 Prepare to Connect to the Network
09. Connect to the Ethereum Network00:00
09.2 Connect to the Ethereum Network
09.2 Connect to the Ethereum Network
09.3 Connect to the Ethereum Network00:00
09.4 Connect to the Ethereum Network00:00
10. Investigate Ethereum Accounts00:00
10. Investigate Ethereum Accounts
10.2 Investigate Ethereum Accounts00:00
10.3 Investigate Ethereum Accounts00:00
11. Create a Local Blockchain00:00
11.2 Create a Local Blockchain00:00
11.2 Create a Local Blockchain
11.3 Create a Local Blockchain
11.3 Create a Local Blockchain
12. Connect to Your Local Ethereum Blockchains00:00
12.2 Connect to Your Local Ethereum Blockchains00:00
13. Create Ethereum Transactions00:00
13. Create Ethereum Transactions
13.2 Create Ethereum Transactions00:00
14. Ethereum Gas and Fees00:00
14.2 Ethereum Gas and Fees00:00
15. Explore Ethereum Metrics00:00
15. Explore Ethereum Metrics
16. First Dapp Revisited00:00
16.2 First Dapp Revisited00:00
17. Ethereum Secret Messenger00:00
17.2 Ethereum Secret Messenger00:00
17.3 Ethereum Secret Messenger00:00
17.4 Ethereum Secret Messenger00:00
18. Improved Deployment Process00:00
18.2 Improved Deployment Process00:00
19. DApps Next Steps00:00
20. Optional Full Ethereum Nodes00:00
20.2 Optional Full Ethereum Nodes00:00
21. Lesson Recap00:00
NEW Introduction to Solidity and Creating a Token
01. Let’s Write Smart Contracts00:00
02. Smart Contracts and Solidity Introduction00:00
02.2 Smart Contracts and Solidity Introduction00:00
02.2 Smart Contracts and Solidity Introduction
03. Remix Online Tool00:00
04. Memory Management in Solidity00:00
04. Memory Management in Solidity
05. Elementary Data Types in Solidity00:00
05. Elementary Data Types in Solidity
06. Type Conversion in Solidity00:00
06. Type Conversion in Solidity
07. Complex Data Types00:00
08. Arrays00:00
08. Arrays
09. String and Bytes Types00:00
09. String and Bytes Types
10. Mappings00:00
10. Mappings
11. Enums00:00
11. Enums
12. Structs00:00
12. Structs
13. Solidity Global Variables and Ether Units00:00
14. Functions in Solidity00:00
14. Functions in Solidity
14.2 Functions in Solidity00:00
15. Error Handling in Solidity00:00
15. Error Handling in Solidity
16. Inheritance in Solidity00:00
16. Inheritance in Solidity
17. Events in Solidity00:00
17. Events in Solidity
18. What are Tokens00:00
19. ERC Token Standards00:00
20. ERC-20 Walk-through00:00
20.2 ERC-20 Walk-through00:00
21. Creating ERC-20 using Remix00:00
22. Creating ERC-20 using OpenZeppelin00:00
22.2 Creating ERC-20 using OpenZeppelin00:00
22.3 Creating ERC-20 using OpenZeppelin00:00
22.4 Creating ERC-20 using OpenZeppelin00:00
22.5 Creating ERC-20 using OpenZeppelin00:00
23. Mini Project Send your ERC-20 Tokens to Udacity
24. Congratulations on Learning Solidity
Smart Contracts and Solidity
• Learn Solidity, a Turing complete smart contract language.
• Learn about different token standards (ERC-721, ERC-20).
• Create a fungible (ERC-20) token on Ethereum using Solidity.
01. Lesson Introduction
02. Smart Contracts00:00
03. Solidity Introduction00:00
04. Identity Smart Contracts00:00
05. Building a Star Notary Service00:00
06. Deploying Smart Contract – Ganache00:00
07. Deploying Smart Contract Review
08. Interact with a Smart Contract from a Webpage00:00
09. Using Events from a Smart Contract00:00
10. Lesson Recap00:00
Tooling for Smart Contracts
01. Lesson Introduction0:56
02. Getting Started with MetaMask3:40
03. Unit tests in Javascript and Solidity with Truffle00:00
04. Ethereum Improvement Proposals and Standards00:00
05. Star Notary as ERC-72100:00
05.2 Star Notary as ERC-72100:00
05.3 Star Notary as ERC-72100:00
05.4 Star Notary as ERC-72100:00
06. Transform Star Notary into a Non-Fungible Token00:00
06.2 Transform Star Notary into a Non-Fungible Token00:00
07. Getting Started with OpenZeppelin00:00
08. Infura00:00
09. Lesson Recap00:00
Decentralized Star Notary Project
Develop, test, and deploy a fully-functioning Dapp that allows users to create, buy, and sell unique stars.
01. Project Introduction
02. Project Details
03. Part 1 Write a smart contract
04. Part 2 Test smart contract code coverage
05. Part 3 Deploy smart contract on a public test network
06. Part 4 Modify client code to interact with smart contract
07. Extra Support – Solidity Review00:00
08. Extra Support – Deploying with Truffle
09. Optional Configure RESTful API endpoint
Project Description – Decentralized Star Notary Project
Project Rubric – Decentralized Star Notary Project
Term 1 Recap
Recap
Lesson Overview
Learn blockchain architecture and advanced concepts such as privacy, security, and decentralized file management.
01. Welcome
02. Introduction
03. Term 1 Reflection
04. Supply Chain Blockchain Basics
Planning a Blockchain Solution
01. Introduction
02. Planning Overview
03. UML
04. Data Modeling
Blockchain Privacy
01. Intro for Lesson
02. Hashing
03. Hashing Code Example
04. Merkle Trees
05. Merkle Trees Code Example
06. Ring Signatures
07. Ring Signatures Code Example
08. Intro to Zero Knowledge Proofs – Part 1
09. ZK-SNARKs
10. ZK-SNARKs Optional Code Example
11. Differential Privacy
12. Differential Privacy Code Example
13. Homomorphic Tallying (Optional)
14. Homomorphic Tallying Code Example (Optional)
15. Lesson Recap
Smart Contract Security
01. Lesson Introduction
02. The DAO Attack
03. The Parity Attack
04. Solidity Security Considerations
05. Consensys Smart Contract Best Practices
06. Whitepapers and Research
07. Security Audits
08. Open Zeppelin
09. When Helping Goes Wrong
10. Optional Tooling
11. Lesson Recap
Distributed File Storage
01. Lesson Introduction
02. Decentralized Storage Overview
03. HTTP vs DFS
04. Interplanetary File Storage
05. IPFS Resources and Community
06. Work with Text on IPFS
07. Upload Media to IPFS
08. Simple Website using IPFS
09. Personal Website with IPFS
10. Dapp Challenge Pet Shop App
11. Lesson Recap
Supply Chains with Smart Contracts
01. Lesson Introduction
02. Intro to Supply Chain Management
03. Smart Contracts in the Supply Chain
04. Diagram a Basic Supply Chain
05. Smart Contract Structure
06. Setup, variables, mappings, and structs
07. Modifiers
08. Function Constructor and Add Item
09. Function Buy Item
10. Function Fetch Item
11. Remix Demonstration
12. Challenge Extend the Supply Chain
13. Solution Extending the Supply Chain
14. Challenge Give a Refund
15. Solution Give a Refund
16. Lesson Recap
Architect a Blockchain Supply Chain Solution – Part A
01. Project Introduction
02. Getting Started
Project Description – Architect a Blockchain Supply Chain Solution – Part A
Project Rubric – Architect a Blockchain Supply Chain Solution – Part A
Ethereum Dapp for Tracking Items through Supply Chain
01. Moving On
02. Part 1 Plan the project with write-ups
03. Part 2 Write smart contracts
03. Part 2 Write smart contracts
05. Part 4 Deploy smart contracts on public test network
06. Part 5 Modify client code to interact with smart contracts
07. Optional Implement Infura to store product image
Project Description – Ethereum Dapp for Tracking Items through Supply Chain
Project Description – Ethereum Dapp for Tracking Items through Supply Chain
Welcome
Advance one’s blockchain skill set by developing a decentralized application (Dapp) that will perform actions based on external triggers and handle payments.
01. Welcome0:49
01.2 Welcome00:00
02. Validating Development Environment6:51
02.2 Validating Development Environment00:00
Stop Loss
01. Introduction00:00
02. Pausing a Smart Contract00:00
02.2 Pausing a Smart Contract00:00
02.3 Pausing a Smart Contract00:00
02.3 Pausing a Smart Contract
02.4 Pausing a Smart Contract00:00
03. Multi-party Consensus00:00
03. Multi-party Consensus
03.2 Multi-party Consensus00:00
03.3 Multi-party Consensus00:00
03.4 Multi-party Consensus00:00
03.5 Multi-party Consensus00:00
03.5 Multi-party Consensus
04. Lesson Recap00:00
Receive, Transfer, and Send Funds
01. Introduction00:00
02. Ether and Payment Fundamentals00:00
03. Working With Funds00:00
03. Working With Funds
04. SafeMath Library00:00
04. SafeMath Library
05. Payment Protection Patterns00:00
05. Payment Protection Patterns
06. Exercise 1 Checks – Effects – Interaction00:00
06.2 Exercise 1 Checks – Effects – Interaction00:00
07. Rate Limiting00:00
07.2 Rate Limiting00:00
07.3 Rate Limiting00:00
08. Re-entrancy Guard00:00
08.2 Re-entrancy Guard00:00
08.3 Re-entrancy Guard00:00
08.3 Re-entrancy Guard
09. Security Best Practices00:00
09.2 Security Best Practices00:00
09.3 Security Best Practices00:00
09.4 Security Best Practices00:00
09.5 Security Best Practices00:00
09.6 Security Best Practices00:00
09.7 Security Best Practices00:00
09.8 Security Best Practices00:00
09.9 Security Best Practices00:00
09.10 Security Best Practices00:00
10. Lesson Summary00:00
Smart Contract Upgradability
01. Why Contracts Should Be Upgradable00:00
01.2 Why Contracts Should Be Upgradable00:00
02. Separate Data and Logic00:00
02.2 Separate Data and Logic00:00
02.3 Separate Data and Logic00:00
03. Add Data Contract Reference00:00
03.2 Add Data Contract Reference00:00
03.3 Add Data Contract Reference00:00
04. Set Data Contract Address00:00
04.2 Set Data Contract Address00:00
05. Update Test Code00:00
05.2 Update Test Code00:00
05.3 Update Test Code00:00
06. Restrict Data Contract Callers00:00
06.2 Restrict Data Contract Callers00:00
07. Lesson Summary00:00
Data from Oracles
01. Introduction00:00
02. Oracles00:00
02.2 Oracles00:00
02.2 Oracles
03. Trustless Oracles00:00
03. Trustless Oracles
04. Types Of Attacks00:00
05. Exercise Architecture Walkthrough00:00
05. Exercise Architecture Walkthrough
06. Oracle Registration00:00
06.2 Oracle Registration00:00
06.3 Oracle Registration00:00
06.3 Oracle Registration
07. Oracle Data Request00:00
07.2 Oracle Data Request00:00
07.2 Oracle Data Request
08. Oracle Callback00:00
08.2 Oracle Callback00:00
08.2 Oracle Callback
09. Lesson Summary00:00
Dapp UX
01. Introduction00:00
02. Waiting – Best Practice00:00
03. Impact – Best Practice00:00
04. Cost – Best Practice00:00
05. Events – Best Practice00:00
06. Provenance – Best Practice00:00
07. Addresses – Best Practice00:00
08. History – Best Practice00:00
09. Context – Best Practice00:00
10. Privacy – Best Practice00:00
11. Affordance – Best Practice00:00
Flight Surety Project
01. Project Overview00:00
01.2 Project Overview00:00
02. Project Requirements00:00
02.2 Project Requirements00:00
02.3 Project Requirements00:00
02.4 Project Requirements00:00
02.5 Project Requirements00:00
03. Project Code Walkthrough00:00
03.2 Project Code Walkthrough00:00
03.3 Project Code Walkthrough00:00
03.4 Project Code Walkthrough00:00
03.5 Project Code Walkthrough00:00
03.6 Project Code Walkthrough00:00
04. Lesson Summary00:00
Project Rubric – FlightSurety
Project Description – FlightSurety
Project Description – FlightSurety
01. Project Introduction
02. OpenSea
03. ZoKrates
04. Project Materials00:00
04.2 Project Materials00:00
04.3 Project Materials00:00
Project Description – Capstone Real Estate Marketplace
Project Rubric – Capstone Real Estate Marketplace
02. Why Blockchain?