
Explore the fundamentals of Ethereum and how this four-part course helps you build web apps with Ethereum, from basics to tooling, deployment, and testing.
Explore Ethereum origins, tracing blockchain and smart contracts from the bitcoin white paper to Vitalik Buterin's ideas, and how Ethereum enables domain name registration and gambling.
Explore how Ethereum functions as a network of computers that transfers money and stores data, with multiple networks and nodes forming a shared blockchain database.
Learn how web3 provides programmatic access to the Ethereum network for sending money, storing data, and deploying contracts, and how MetaMask enables consumer interaction.
learn how metamask creates a single ethereum account with an address, public key, and private key, and how this account can access multiple networks while keeping keys secure.
The lecture explains how a transaction moves ether between accounts on Ethereum, covering nonce, to, value, gas, and the v, r, s verification generated from the sender's private key.
Learn why Ethereum transaction confirmations take time by exploring how a transaction is sent to a node, gathered into a block, and mined on the rink b test network.
Demonstrate how SHA256 hashes, blocks with nonces, and mining form a chain of validated records. See how a distributed network preserves immutability with token transactions and coinbase creation.
Explore how Ethereum uses a hash and nonce to hit a target value, and how the network adjusts difficulty to maintain a 15-second block time.
Discover how smart contracts on the Ethereum blockchain operate as code-driven accounts with storage, balance, and code, deployed per network, and how contract instances resemble classes and objects.
Learn solidity, the strongly typed language for authoring smart contracts, and how the compiler outputs bytecode and the ABI to let JavaScript apps interact with Ethereum contracts.
Define your first Solidity contract using Remix, writing a simple Inbox contract with a public message, and learn syntax basics, semicolons, and how Remix aids auditing and analysis.
Explore the anatomy of a smart contract by dissecting a sample inbox contract: pragma version, contract keyword, storage variable, public access, constructor, and storage versus local variables.
Learn how solidity function declarations work, covering function keyword, naming, arguments, returns, and common types like public, private, view, pure, and payable, with get message and set message examples.
Test and interact with a Solidity inbox contract in Remix, deploying to an in-browser fake network and using the constructor, get message, set message, and auto-generated getters.
Deploy a fresh contract version to apply updates and delete the old instance. Use the auto-generated public message getter or update the message with set message.
Discover how Ethereum contract deployment works in Remix: a contract creation transaction with a blank to field, nonce, and V, R, and S signatures, carrying compiled bytecode and ether value.
Learn how Ethereum handles contract interactions: calls vs transactions, why data changes require a mined transaction, and how transaction delay differs between Remix and real networks.
Understand how gas determines transaction costs in Ethereum and how ether relates to units like way, gwei, and finney, with practical lessons on unit conversion using online tools.
Explore how the Ethereum gas system measures work with gas price and gas limit to determine transaction costs. See how operations consume gas and how unused gas is returned.
Explore the 12-word mnemonic concept for generating and recovering Ethereum accounts, keys, and addresses with MetaMask, BIP39, and derivation sequences.
Move into more complex Solidity apps, understand gas, prices, and transactions, then obtain ample ether on the Rinkeby test network to deploy contracts and test.
Deploy ethereum contracts beyond remix by using the solidity compiler output bytecode and API, then build a custom node project to test and deploy on networks.
Build a custom boilerplate to write Solidity contracts, bridge them to JavaScript, and automate testing and deployment to public networks using Mocha and a Solidity compiler.
Organize a blockchain project by creating a contracts directory with inbox.sol, adding test scaffolding, and configuring package.json scripts for mocha tests and Ethereum deployment.
Read the inbox.sol contract with fs and path to obtain the source, then run the solidity compiler to produce the abi and bytecode for deployment.
Run the compiled JavaScript in the terminal to inspect the Solidity compiler output, including bytecode and interface (ABI) for the inbox contract, and export for reuse in deployment and testing.
This lecture covers compiling Solidity to ABI and bytecode, deploying to a local Ganache network, and testing with Web3 through functional tests that call contract functions.
Create a test folder and inbox.test.js to write assertions for your deployed contract. Import assert, ganache CLI, and the web3 constructor, and note the capitalization conventions for web3.
Be aware of Web3 versioning differences between 0.x and 1.x, and save time researching Ethereum projects. Learn how version 1 uses promises and async/await to replace callbacks for cleaner code.
Create a web3 instance with a provider to connect to a specific Ethereum network, swap providers to switch networks, and prepare tests with Ganache and Mocha.
Master a quick MOCA refresher for testing JavaScript and Ethereum code, covering describe, it, and beforeEach, with a Car class example and simple assertions.
Learn how to structure ethereum contract tests with mocha, deploy contracts on Ganache, manipulate state in it blocks, and assert outcomes using beforeEach for setup.
Learn to fetch unlocked accounts from Ganache using Web3, and deploy contracts in test environments on a local Ethereum network.
Refactor web3 code to async/await, replacing promise chains with await, declare accounts ahead of time in before each, and prepare to deploy contracts.
Import interface and bytecode from the compile file, create a web3 contract, deploy from the first account with gas up to 1 million, and log the deployed inbox.
Learn how to deploy a contract with Web3, understand ABI and constructor arguments, and differentiate deploy versus send, then interact with deployed contracts at their addresses.
Test a simple contract that stores a message, ensuring a default value on deployment and that the message updates with set message, including checks for the contract address.
Verify that a deployed inbox contract returns its default message using web three calls and async/await, confirming the initial message value hi there.
Develop and test updating a contract message by calling set message, then retrieve the message, using async tests, Ganache accounts, and transaction receipts to verify updates.
Deploy a smart contract to the rinkeby test network using infura, web3 provider, and an account mnemonic, and build a deploy script that handles real network deployment and ether requirements.
Install the truffle hd wallet provider, connect web3 to the rinkeby network, and unlock an account to deploy contracts using a mnemonic.
Learn to deploy a smart contract using a web3 instance: fetch accounts, create the contract, deploy with bytecode and arguments, and publish on the rinkeby test network.
Learn how to observe your deployed contract on the Rinkeby network using Etherscan, exploring deployment transactions, contract address, block details, and the contract code and opcode view.
Interact with your deployed contract in remix by pasting its address and using at address on injected web3 with metamask on rinkeby, observing instant reads and transaction confirmations.
Compare remix and code editor workflows for Solidity contracts, and learn to compile, test, and deploy using Web3, Ganache, and Mocha, with HD Wallet Provider and infra node access.
Explore a Solidity lottery contract that collects ether into a prize pool, records entrants, and uses a manager to trigger a winner selection, then resets for reuse.
Define a lottery contract with a manager and a players list, allowing entrants to send ether via enter and the manager to call pick winner to award the prize pool.
Learn solidity basic types, including string, boolean, int and uint variants, and the address type for storing contract creator. Understand fixed and ufixed decimals and how addresses enable sending money.
Declare a lottery contract in Solidity using the address type for a public manager, set in the constructor to the deploying address, and iterate with Remix for quick testing.
Learn how to use the MSG global variable in Solidity to capture the sender address when a new lottery contract is created and assign it to the manager variable.
Explore Solidity arrays as reference types, including fixed and dynamic arrays, their length and indexing, and how public getters retrieve individual elements while dynamic arrays support push operations.
Discover mappings and structs in Solidity: mappings store key-value pairs as a uniform type collection, while structs model a single item with multiple field types; use mappings for many items.
Demystify the big Solidity gotcha: nested dynamic arrays can't be transferred from Solidity to JavaScript, and strings are dynamic arrays, creating a bridge limitation between Solidity and JavaScript.
Initialize a dynamic array of addresses named players, make it public, and implement a public payable enter function that pushes msg.sender into players, accepting ether to enter.
Learn how to validate lottery entry with Solidity's require to enforce a minimum 0.01 ether, check msg.value, and update the players array in a JavaScript VM test.
Utilize the Remix debugger to step through contract execution, inspect the transaction log and details, and identify where require-driven errors occur by viewing variables like the manager and players array.
Explore implementing a pseudo random number generator in solidity for a lottery contract, using block difficulty, current time, and player addresses hashed with sha3 to pick a winner.
Select a winner from the players array by applying the modulo of a pseudo random number, then implement a public pickWinner function for development use.
Select the winner from the players array and transfer all ether from the contract to that address using the transfer function and contract balance in remix.
Reset the lottery contract by emptying the players array after picking a winner, enabling repeated rounds without redeploying, and cover dynamic address arrays versus fixed arrays.
Restrict the pick winner function to the manager with a require check comparing msg.sender to the manager variable, strengthening security beyond public access.
Leverage function modifiers in Solidity to reduce duplication and enforce access control, using a restricted modifier to ensure only the manager can call key contract functions.
Implement a getPlayers function to return all lottery entrants, exposing a public, view function that returns a dynamic array of addresses for easy web app display.
Review a lottery smart contract by deploying it in a JavaScript VM, entering with two accounts, checking players, and exercising access control to pick a winner and reset the players.
Duplicate the existing inbox project directory and rename it lottery. Replace the inbox contract with the lottery contract, then create a new lottery.test.js file and write tests using MOCA.
Update the compile and deployed js files to reference the lottery contract instead of inbox, and remove the constructor arguments.
Review a lottery contract test suite using Ganache CLI and Web3, load interface and bytecode, deploy in beforeEach, and obtain accounts for the local test network.
Write tests around the lottery contract to verify deployment on a local network, using describe and it blocks, asserting the contract address is defined, and run tests with npm test.
Define tests that verify that entering the lottery adds the caller's address to the players array when sending at least 0.01 ether, using web3 utilities for wei conversion.
Shows how to test a lottery contract for multiple entrants by extending a single-entry test to three accounts, verifying three players in the array and that entries are correctly stored.
Demonstrates testing the lottery contract for a minimum ether requirement, using try-catch with async/await to ensure errors occur when funds are too low.
Test the restricted modifier by simulating a non-manager calling pick winner to ensure access is denied, using async/await with accounts[1] and asserting an error is thrown.
Write an end to end test that runs a lottery contract from entering a player to picking a winner, and validate the winner receives funds while the players array resets.
Learn to build a React-based web front end that lets users interact with a lottery contract on Ethereum, contrasting traditional server architecture with a client-driven Web three workflow via Metamask.
Learn to interact with Ethereum contracts using JavaScript, including read-only calls and entering the lottery. Explore manager-only actions like pick winner and status updates on Rinkeby.
Review generated React project files, including public and src folders, and start the development server to view the ethereum app at localhost:3000.
Install and configure the Web3 library in a React project, then align your app's Web3 instance with the provider injected by Metamask to connect to the rinkeby test network.
Configure a local web3 instance by importing web3, ripping the provider from Metamask, and connecting to the Rinkeby network. Export the configured web3 for app-wide use.
Deploy a lottery contract and expose its ABI to a React app by compiling and deploying to the rink b network, using web3 to create a contract instance and address.
Create a local contract instance in React by connecting the ABI and address with Web3, enabling interaction with the Ring B test network contract from the app.
Fetch the lottery contract's manager address in a React app using componentDidMount and render contract data by updating state.
Discover how to refactor a constructor to initialize state with a class body and a property manager, making state setup 100% equivalent to prior code, highlighting a 2016 change.
Fetches contract data to display the current number of players and the contract balance, initializes state, uses get players and get balance, and converts wei to ether with web3 utils.
Build a user input form to enter the lottery contract by entering ether, with a controlled input, label, and button, wiring state and onChange events for submission.
Learn to submit the form to call the lottery contract's enter function via web3, retrieve accounts, and send a transaction with ether value using an auto-bound onSubmit handler.
Add a message state to communicate lottery entry status, showing waiting on transaction and confirmation after metamask approval, then update you have been entered, reflecting read and write contract data.
Click the pick winner button to call the lottery contract's pick winner function, show a pending transaction message, and confirm when a winner is picked.
Review how the React component interacts with the contract, pulls data via MetaMask, and displays ether values with fromWei, while noting missing input validation and error handling.
Discover how Ethereum smart contracts can secure crowdfunding like Kickstarter by enforcing funding goals and releasing funds only when goals are met, protecting backers from failed campaigns.
Design and implement an Ethereum contract that routes Kickstarter funds through contributor-approved spending requests, reducing misuse, and build a frontend to create and review these requests for a Kickstarter clone.
Design a crowdfunding campaign contract by outlining variables and functions, implement in remix, and build a React frontend; manage contributions, approvers, spending requests, and finalization.
Implement a crowdfunding campaign contract in Remix with a public manager and a configurable minimum contribution. Initialize the manager as msg.sender in the constructor and accept a minimum parameter.
Introduce an approvers array and a payable contribute function that requires a minimum contribution, adds the sender to approvers, and tests the contract while noting array issues.
Test the campaign contract in remix using a JavaScript VM, set a minimum contribution of 100 wei, and verify contributors appear in the approvers array.
Describe the spending request feature by defining a request struct with description, value, recipient, and complete, and enable the manager to create new requests in the contract’s request array.
Create a public array of type request to hold spending requests. Add a restricted modifier to allow only the manager to create requests and finalize requests.
Implement a public create request function with a restricted modifier that accepts description, value, and recipient, creates a request, and pushes it into the requests array with complete false.
Explore creating a new struct instance in Solidity, detailing the left-hand side and right-hand side, and compare key-value syntax with the alternative syntax based on field order.
Clarify the difference between storage and memory in Solidity, distinguishing contract data storage from how variables are stored, and explain how this relates to common error messages.
Explore the differences between storage and memory in Solidity, showing how variables reference values, with examples of arrays, the storage keyword linking to the same data, and memory creating copies.
Design a voting system to prevent multiple votes per contributor on a spending request and support approve or disapprove actions, scalable to thousands of backers in Ethereum and Solidity contracts.
Explore why a naïve Solidity design that stores approvers and per-request voters in arrays fails to scale, and learn why looping checks make one-vote-per-request unworkable.
Explain why using an approvers and donors arrays to manage voting costs too much gas and scales poorly, and preview an alternative data structure discussed in the next video.
Explore why using arrays for approver lists and voters in solidity creates gas-heavy searches, and learn how mappings enable constant-time lookups for addresses and votes.
Understand solidity mappings and their gotchas: keys aren’t stored, values aren’t iterable, and defaults mask existence, with a refactor using address to bool mappings for approvers and approvals.
Refactor the contract from an approvers array to a mapping of addresses to boolean values (default false), enabling constant-time lookups and simpler existence checks for donations.
Refactor the request struct to add an approvals mapping and an approval count, tracking who has voted and enabling an approve request function that requires over 50% approvals.
Refactor the request struct to add approval count and approvals mappings, initialize approval count to zero, and explain why only yes votes matter for consensus.
Implement an approve request function that targets a funding request by index in a requests array, using the approvals mapping to ensure message sender hasn't voted yet and updating storage.
Test and validate a campaign contract in Remix by deploying, donating as an approver, creating and approving requests, handling require errors, and preparing for finalization by the manager.
Finalize the request function to pay out the vendor, guarded by a 50% approval threshold and a complete flag, updating the status after transferring to the recipient.
Perform a final Remix test to validate contract behavior: contribute ether, create and approve a request, and finalize it (with error handling on invalid finalization), preparing for frontend integration.
Explore deploying multiple campaigns by creating and tracking distinct contract addresses, and compare browser-based, server-driven, and hybrid approaches for scalable deployment.
Explore a hybrid deployment approach using a factory contract to deploy campaigns, manage their addresses, and transfer deployment costs to users on the rink B network.
Explore how a campaign factory deploys campaign instances, records their addresses in a deployed campaigns array, and exposes a get deployed campaigns function to fetch all campaigns.
Test a campaign factory in remix by creating campaigns through the factory, accessing the deployed campaign via its address, and interacting with Web3.
Create an Ethereum folder inside the Kickstart directory to house Ethereum code separate from the web app. Add compile.js, deploy.js, and a contracts subfolder for campaign and campaign factory contracts.
Develop a one-time compile script for Ethereum that uses the Solidity compiler to output two contracts (campaign and campaign factory) as JSON in a build folder, then avoid recompiles.
Create a run compile script that imports modules, clears and recreates the build folder, reads campaign.sol, compiles with the solidity compiler, and writes contract json files to the build folder.
Clarifies the solidity compile output by logging the output object and iterating over campaign and campaign factory keys to write JSON files, with colon removal and a build on recompilation.
Create a root-level test folder and a campaign.test.js file to test the campaign and campaign factory contracts, deploy the factory, and verify deployed campaign instances using ganache and web3.
Create campaign instances using the factory, deploy a new campaign with a minimum contribution, and obtain its deployed address to instantiate a Web3 contract for testing.
Perform a testing warmup by creating tests for factory and campaign deployments, using describe and it blocks, asserting addresses, and running MOCA tests with npm.
Learn to test Ethereum smart contracts by verifying the campaign creator becomes the manager and contributors are marked as approvers via a public mapping, using contribute with a minimum threshold.
Learn how to enforce a minimum contribution in a campaign by writing an async test that sends a value below the minimum and asserts an error, mirroring the lottery pattern.
Shows how a manager creates a payment request by calling create request with a description, value, and recipient, then retrieves the first request with array getter and verifies its description.
Write an end-to-end test for a campaign contract: contribute ether, create and approve a request, finalize it, and verify the recipient receives funds via web3 and ganache.
Deploy the contract to the Rinkeby test network. Reuse the prior deploy script, paste into the project, adjust compile to read from disk, and install truffle hd wallet provider.
Refactor the deployment script to use the compiled factory JSON, parse the factory interface, and deploy only the campaign factory via the HD Wallet Provider, preparing for future campaign instances.
Build a Crowd Coin web app to browse, create, and contribute to campaigns, manage requests, and apply React routing to mirror campaign details and approvals.
Choose Next.js over Create React App to build a multi-page Ethereum application with routing, server-side rendering, and hot module reload, leveraging Web3 for campaigns.
Create two pages in the pages directory, show.js and new campaign.js, export simple React components, then run the dev script to verify visiting the show and new campaign routes.
Configure web3 with a Metamask provider and the campaign factory contract to fetch deployed campaigns, then render the root page's campaign list with React.
Create and export a web3 instance using the Metamask provider, then expose a deployed campaign factory instance via a dedicated file for listing campaigns.
Use Remix to create a campaign via the deployed campaign factory on the Ringke B test network and display it after a 100 way minimum contribution.
Learn to fetch deployed campaigns with the campaign factory and display them in a React/Next.js app using a class-based component and componentDidMount.
Explore why Next.js server side rendering triggers 'window is not defined' and how server side data fetching delivers Ethereum content for users, even without Metamask.
Learn to initialize Web3 for server and browser by checking window and metamask. Use a fallback http provider via Infinera to rink bead test network, ensuring a single Web3 instance.
Explore how Next.js uses static getInitialProps to fetch deployed campaigns on the server, enabling server-side rendering and passing data as props to render campaign addresses.
Explore using Semantic UI React to style a React app, import prebuilt components like buttons and tables, and leverage its documentation and examples to quickly build a polished UI.
Implement a render campaigns function that maps campaign addresses to header cards with a view campaign link, and render a fluid Semantic UI card group in the component.
Learn to add Semantic UI React styling in a Next.js app by installing the UI package and embedding a temporary link tag to render styled campaign cards.
Add a create campaign button using semantic ui react, with a content label and icon, styled as a primary action, placed beside the campaign list to navigate to campaign creation.
Render a campaigns index with a create button and implement a universal header via a shared layout component in Next.js, using a components directory and layout.js for all pages.
Create a reusable layout component in a components folder, not as a page. Use props.children to render page content between a header and footer for consistent app layout.
Build a header navigation using semantic ui, replacing the footer placeholder, by creating a header component with a menu: logo left and two right-aligned actions for campaigns and new campaign.
Constrain content width using the Semantic UI container at the root, ensuring readable layout on wide screens, and adjust header spacing with a style prop.
Move the campaign button to the right using the floated property and render campaigns after it to form a two-column layout, then plan a page to enable navigation between views.
Create a new campaigns/new page with nested routing and build a campaign new react component that renders a form for creating campaigns via the campaign factory.
Import the layout component, wrap the campaign new content, and move the semantic ui css link into the head with next/head to ensure the header renders with proper styling.
Leverage semantic UI to build a campaign creation form in a React app, using a top-level form, a single form field with label and input, and a primary create button.
Wire up input change handlers and form submittal in a React component using a Semantic UI labeled input to capture the minimum contribution as a way value, updating state.
Define an onSubmit handler for the form that prevents default submission and uses web3 to call the factory contract's createCampaign with the minimum contribution.
Test the submittal flow in a Metamask-enabled Ethereum app, validate input, handle errors, and display a submission spinner to inform users while the transaction processes.
Wrap contract calls in a try-catch to capture errors and display error.message in a React state, using a Semantic UI error message on the form.
Show a loading spinner on the submit button during the transaction flow, using a loading state to toggle the spinner before and after Web3 and Metamask interactions, and clear errors.
Learn how to use the roots object to automatically navigate users with router.push after creating a campaign, and render link tags for in-app navigation.
Implement header navigation by converting menu items to link tags connected to routes, routing to the root, campaigns, and create campaign, and test hover and navigation behavior.
Implement navigation for campaigns by wrapping the create and view buttons with link components to routes like campaigns/new and campaigns/{address}, and define dynamic routing rules in the route stages file.
Create a CampaignShow component under campaigns and map a dynamic route /campaigns/:address to render it. Add a campaigns/new route before the dynamic one to fix navigation and show the form.
Design the campaign show page with a header layout, display campaign details (balance, minimum contribution, pending requests, contributors), and implement a single contract summary function.
Extend a campaign contract with a get summary function and a get requests count to return balance, minimum contribution, requests count, contributors, and the manager address, then redeploy campaign factory.
Explore implementing static async getInitialProps in the campaign show component to fetch a campaign's address from the URL, call the get summary function, and handle server-side rendering in Next.js.
Create a reusable campaign contract helper with Web3 that takes an address to instantiate a campaign contract, then request its summary to display campaign details in the UI.
Explore how a contract's multiple return values are translated from an object into clearly labeled props, exposing balance, minimum contribution, requests count, approvers count, and manager in get initial props.
Build a custom card group with Semantic UI React to display campaign metrics as header, meta, and description cards, including manager, balance, and requests, with text-wrapping styling.
Create multiple campaign cards displaying minimum contribution, request counts (with requests must be approved by approvers), approvers count, and the campaign balance converted from wei to ether with web3.
Build a reusable contribute form for campaigns with an ether input, right-side label, and a submit button with a spinner, plus error handling, integrated into the campaign show page.
Apply Semantic UI grid layouts to arrange a render cards section and a contribute form in a two-column grid, using column width props of 10 and 6 for responsive proportions.
Initialize form state with a value, update it with onchange, prevent default on submit, and call the contribute function on the campaign contract while showing a loading spinner.
Pass the campaign address from the url to the contribute form as a prop, so the form connects to the correct campaign contract and accepts contributions.
Fetch accounts via web3, call the campaign’s contribute function with ether converted to wei, and handle errors with a try-catch. Test on the Renk B test network with metamask.
Refresh the campaign page using router.replace to re-fetch the campaign data via getInitialProps, updating the number of approvers and the campaign balance after contributions.
Implement a loading spinner and error messaging by managing loading and error state in the form, wiring them to submit and render logic, and resetting inputs after submission.
Add a bottom link in the campaign show component to view all requests, set up a route at campaigns/[address]/requests, and create a requests index page to list those requests.
Discover how grid rows and columns create spacing between content. Wrap cards and the button in a grid row and grid column to align the spacing.
Add a campaign-specific requests page by rendering a header, a requests table, and an add request button, while routing to campaigns/:address/requests/new and wiring the layout component.
Create a request form for the Ethereum campaign, including description, value in ether, and recipient, wired to the campaign contract via Web3 and Semantic UI React.
Wire up the on submit handler to call the campaign's create request with description, value in way, and recipient.
polish the request form by adding an error message handler and a loading spinner tied to state, and navigate users back to the requests list after creation.
Learn to create a new request by submitting a transaction of one ether, linking a recipient address, and switching accounts as you prepare the request index component.
Develop the campaign's request index by fetching the get request count value and then retrieving each request individually, since Solidity cannot return arrays of structs.
Obtain the campaign's total request count in get initial props, then fetch each request using Promise.all with an indices array created by fill and map.
Render a plain table of requests on screen using Semantic UI React, importing the table component and building header rows for id, description, amount, recipient, approval count, approve, and finalize.
Create a dedicated request row component to render each request in the list inside a table, passing the request and campaign address as props and providing approve and finalize helpers.
Build a request row component for a Semantic UI table in React. Render id, description, recipient, and value converted from wei to ether using Web3 utilities.
Fetch the per-request approval count from request.approvalCount and the campaign's approvers count, then display both in the request row, separated by a forward slash.
Add a green approve button and wire an asynchronous onApprove handler to call campaign.approveRequest with the request id, managing web3 accounts and metamask submission.
Learn how to finalize a request in a campaign contract by adding a finalize button, calling finalize request with the correct index, and handling approval thresholds and metamask simulation feedback.
Demonstrates testing campaign finalization by creating campaigns, assigning requests, and triggering ether transfers. Adds visual indicators for finalization status and outlines styling updates for clarity.
Learn to implement row status styling in Ethereum and Solidity, hiding finalize buttons when finalized and highlighting ready-to-finalize rows for clear user feedback.
Improve the request index page by aligning the button to the right, adding bottom margin, and displaying the request count at the bottom left with the request count prop.
Wrap up the Ethereum side of the application by enabling campaign creation, viewing individual campaigns with details, creating and viewing requests, dispersing funds, and tracking request statuses.
Explore how boilerplate projects scaffold starter apps, enabling you to write React and Redux code in ES6 that is transpiled with Webpack and Babel for browser execution.
Clone the Redux Simple Starter repo from GitHub. Install dependencies with npm install and set up the project directory to prepare the environment.
Install and boot the Redux Simple Starter boilerplate, run npm start to launch a local server, and build a React app modeled after YouTube using the YouTube API without Redux.
Learn how JSX enables writing components in React, how Webpack and Babel bundle code into a single file, and how changes render to the DOM.
Learn how JSX compiles to vanilla JavaScript, producing HTML that the browser renders in the DOM, and why this keeps components clean and readable.
Learn how to render a React component to the DOM, diagnose import errors, and use ES6 modules to access React in your files.
Discover how to render React components to the DOM using ReactDOM, avoid deprecated React render, and instantiate elements with React.createElement.
Learn to instantiate components before rendering with React DOM, distinguish between a component class and a component instance, and use JSX to pass an instance to render.
Learn to render a React component by wrapping it in JSX, select a target DOM container, and render into a root div, using ES6 fat arrow functions to define components.
Break a React app into reusable components. Build separate components for the search bar, video player with title and description, and a list of previews, with one file per component.
Sign up for a YouTube API key and enable the YouTube Data API v3, then install the YouTube API search package using a const API key.
Master export statements for modules, including a search bar component. Import the component with a relative path and render it in the app to prepare for future YouTube API use.
Convert a functional search bar to a class based component using ES6 class. Define a render method and return JSX, and simplify imports ES6 syntax to import Component from react.
Learn to handle user input events in a React search bar by defining event handlers, wiring onChange to inputs, accessing event.target.value, and using arrow functions for concise code.
Define state as a plain JavaScript object that records user events and drives re-renders in class-based components, initializing it in the constructor with this.state and updating via onChange.
Learn how to initialize and update state in React class components, using constructor, this.state, and this.setState, and see how state changes trigger re-renders and update the DOM.
Master the concept of controlled components by binding input values to component state and ensuring the input's value comes from state, so updates trigger renders and predictable forms.
Review the current react app for searching YouTube videos, revisiting class-based and functional components, state, and es6 concepts. Prepare for fetching videos from the YouTube api and continuing development.
Fetch YouTube search results with an API key, propagate the video list through the app via downwards data flow, and wire the YouTube search package in the top-level component.
Refactor the app component from a functional to a class-based component, introducing state to manage a dynamic videos list and initializing it with a surfboards search via the constructor.
Demonstrate building a React video list with props and state: pass videos from app to video list, render via a functional component, and handle asynchronous fetch with a network request.
Learn to render a list of videos in React using map, passing each video to a video list item via props and rendering a ul of items.
Assign a unique, consistent key to each list item in React to optimize rendering and avoid re-creating the list. Use an identifier like a video’s e tag as the key.
Enhance a React video list by using keys for efficient updates, destructuring props to access video, and rendering a Bootstrap list item with the thumbnail and title from the snippet.
Create a non-state video detail component that renders a YouTube embed using props for the video title, description, and id, building a responsive iframe URL with template strings.
Add a guard in the video detail component to render loading when no video prop exists, then pass the first video from state to render the video player and maintain the video list.
Pass a selected video in app state and a callback through video list to video list items. This enables users to click a video and update the detail view.
style a video list interface with a centered search bar, right-side thumbnail, and a bordered, padded detail panel with hover effects; the session emphasizes one CSS file per component.
Hook up the top search bar by passing an on search term change callback to perform a YouTube search and update the video list.
Learn how to throttle search term input using lodash's debounce to limit calls to a video search to every 300 milliseconds, improving responsiveness and reducing lag as users type.
Wrap up of a first React app explains class-based vs functional components, and how state works to trigger renders, covering imports, callbacks, and component-level state compared to future Redux concepts.
Smart Contracts? They're here. The Ethereum Blockchain? Covered. Solidity? Yep!
There can be no understating it: Ethereum and Blockchain technology is the most disruptive force in years. Companies cannot hire developers who understand blockchain technologies fast enough, but there are a tiny number of resources published to help you truly understand what blockchains are used for, let alone build apps with them. That's the purpose of this course: to be the best resource online for learning about Ethereum, blockchains, and how to build apps with this new technology.
The development community is still figuring out the best way to use Ethereum in the creation of new and exciting apps. I spent a tremendous amount of time to research and create best practice for interfacing with Ethereum from Javascript. I can't overstate it enough; this course will show you the best and most easily repeatable patterns for creating production-ready apps with Ethereum.
What tools and libraries are used?
The Ethereum tech ecosystem is in constant change. Don't be fooled by other courses that mention how you'll learn a dozen different libraries! Every library that you'll use with Ethereum breaks and is deprecated on a near-weekly basis! Instead, this course will teach you how to assemble your own boilerplate package to develop, compile, and test Smart Contracts. By learning the core technologies, you'll be prepared to adjust to Ethereum no matter how the ecosystem changes.
What is Ethereum?
Ethereum is a cryptocurrency much like Bitcoin, and it has been heralded as Bitcoins successor. Whereas Bitcoin currently has issues scaling with an increasing backlog of transactions, Ethereum is poised to surpass Bitcoin in performance, popularity, and value. Ethereum was created to help developers like you create applications focused around transferring money or value from one party to another.
What is Solidity?
Solidity is a programming language for writing Smart Contracts. Essentially, think of it as a way to control a bank account with code. With Solidity, we can write applications that simulate a crowd funding campaign, a lottery, a loan, or any other type of financial instrument. Don't be intimidated by learning 'another' programming language; Solidity is known to be quite similar to Javascript and exceptionally easy to pick up for anyone who has previous JS experience. This course will give you all the tools you need to master Solidity.