Bitcoin Stats:
- Relative Unrealized Profit
- Holders In The Money
- Bitcoin Held On Exchanges
Status of Eth2 Deposit Contract:
Deposit Contract
Market Update (Monday 9:30 AM ET)
Percent Change (Rounded) Based on Last Monday Open (9:30 AM ET)
Bitcoin- $16,409 (+8%)
Ether- $459 (+3%)
Gold- $1,890 (+2%)
DJI Average- 29,672 (+1%)
NYSE Composite Index- 13,946 (+1%)
NASDAQ Composite Index- 11,847 (UNCH)
S&P500 Index- 3,600 (+1%)
Share
New Developments
Blocknative Raises $5 Million to Illuminate the Dark Forest, Blocknative
Outpost Dev Switching Gears to Work on Myco, Sam Hatem
Chinese Bank Is Selling Bonds That Can be Bought With Cash or Bitcoin, WSJ
TrueFi, DeFi Protocol for Uncollateralized Lending, Trust Token
Brent Crude Oil Futures Available on Synthetix Exchange, CoinDesk
Overview of the Lightning Network Ecosystem, Fulgur Ventures
Celer State Guardian Network Launches on Mainnet, Celer Blog
LiquidStake Provides Access to USDC Liquidity as a Staker in Eth2
Joseph Lubin @ethereumJoseph.@liquidstake offers an ideal solution for ETH holders looking to stay liquid while staking. I’m excited to watch @DARMACapital play a significant role in the Eth2 transition with LiquidStake, which has selected @ConsenSysCodefi Staking as one of its partners. Register below.LiquidStake @liquidstake
Ethereum 2.0 is coming. When you stake your ETH, your funds will be locked until a later date in time. Stake directly through LiquidStake and earn rewards without sacrificing your liquidity. Learn more and register https://t.co/CbWIFYwAQs https://t.co/rimXA2prNiNovember 11th 2020
20 Retweets93 Likes
Industry Insights
So You Want to Use a Price Oracle, samzcsun
Running an Ethereum Node on Kubernetes is Easy, Jonathon Otto
US Regulators Have Hit Crypto Firms With Over $198M to Date, The Block
Crypto Art: A Decentralized View, Cornell Research
BTC Call NFT, Andre Cronje
Eth2 Staking Best Practices, Phil
phil.eth @phil_eth1/n I’d like to share my list of best practices when it comes down to depositing your 32ETH stake(s) and ETH2 staking. By no means is this list complete and most likely not everyone will agree on all of these points or find them applicable to themselves.November 15th 2020
40 Retweets120 Likes
Dev Talk
List of Ethereum RPC Endpoints in the Event Infura Goes Down, David Mihal
Sending Transactions Using Web3 and Alchemy, Elan Halpern
Graph Protocol Utils, AMXX
LexDAO Token Factory, Ross Campbell
Eth 2.0 Staking & More w/ Topaz & DAppnode for under $750, Hudson Jameson
Announcing Speculative Execution for Ethereum, dfuse
Testing Chainlink Smart Contracts, Chainlink
Solidity Code Found in Ariana Grande’s 34+35 Music Video
JZ @jzlegionIs the code from @ArianaGrande's 34+35 music video Soldity? It has msg.sender, selfdestruct, and I'm pretty sure "greeter is mortal"is from the Solidity tutorial. github.com/ethereum/ether…November 10th 2020
30 Retweets172 Likes
dApp Activity
*Analyze Public Subgraphs using The Graph and Ethereum
- What does the Subgraph do?
- Does the Subgraph look production ready?
- How useful would the Subgraph be to others?
- What kind of additions or modifications to the schema would you make?
- Are there similar Subgraphs to the one being analyzed?
- How complete, complex, and accurate is the Subgraph?
To answer the questions above you will need to make your way to The Graph’s website and find a Subgraph to analyze. From there you can explore several Subgraphs and use the hosted playground to acquire information on that specific Ethereum contract. Most Subgraph code can be found on Github where you can evaluate the schema and supporting files to see how the data is queried.
Resource
Dev Activity
Analyze Eth2 Deposit Contract:
*Tools: METAMASK (Wallet), Remix IDE (Development Environment), Solidity (Smart Contract Language) Ethereum (Blockchain), Etherscan Block Explorer
# set pragma
pragma solidity 0.6.11;
# contract (Source)
interface IDepositContract { /// @notice A processed deposit event. event DepositEvent( bytes pubkey, bytes withdrawal_credentials, bytes amount, bytes signature, bytes index ); /// @notice Submit a Phase 0 DepositData object. /// @param pubkey A BLS12-381 public key. /// @param withdrawal_credentials Commitment to a public key for withdrawals. /// @param signature A BLS12-381 signature. /// @param deposit_data_root The SHA-256 hash of the SSZ-encoded DepositData object. /// Used as a protection against malformed input. function deposit( bytes calldata pubkey, bytes calldata withdrawal_credentials, bytes calldata signature, bytes32 deposit_data_root ) external payable; /// @notice Query the current deposit root hash. /// @return The deposit root hash. function get_deposit_root() external view returns (bytes32); /// @notice Query the current deposit count. /// @return The deposit count encoded as a little endian 64-bit number. function get_deposit_count() external view returns (bytes memory);}// Based on official specification in https://eips.ethereum.org/EIPS/eip-165interface ERC165 { /// @notice Query if a contract implements an interface /// @param interfaceId The interface identifier, as specified in ERC-165 /// @dev Interface identification is specified in ERC-165. This function /// uses less than 30,000 gas. /// @return `true` if the contract implements `interfaceId` and /// `interfaceId` is not 0xffffffff, `false` otherwise function supportsInterface(bytes4 interfaceId) external pure returns (bool);}// This is a rewrite of the Vyper Eth2.0 deposit contract in Solidity.// It tries to stay as close as possible to the original source code./// @notice This is the Ethereum 2.0 deposit contract interface./// For more information see the Phase 0 specification under https://github.com/ethereum/eth2.0-specscontract DepositContract is IDepositContract, ERC165 { uint constant DEPOSIT_CONTRACT_TREE_DEPTH = 32; // NOTE: this also ensures `deposit_count` will fit into 64-bits uint constant MAX_DEPOSIT_COUNT = 2**DEPOSIT_CONTRACT_TREE_DEPTH - 1; bytes32[DEPOSIT_CONTRACT_TREE_DEPTH] branch; uint256 deposit_count; bytes32[DEPOSIT_CONTRACT_TREE_DEPTH] zero_hashes; constructor() public { // Compute hashes in empty sparse Merkle tree for (uint height = 0; height < DEPOSIT_CONTRACT_TREE_DEPTH - 1; height++) zero_hashes[height + 1] = sha256(abi.encodePacked(zero_hashes[height], zero_hashes[height])); } function get_deposit_root() override external view returns (bytes32) { bytes32 node; uint size = deposit_count; for (uint height = 0; height < DEPOSIT_CONTRACT_TREE_DEPTH; height++) { if ((size & 1) == 1) node = sha256(abi.encodePacked(branch[height], node)); else node = sha256(abi.encodePacked(node, zero_hashes[height])); size /= 2; } return sha256(abi.encodePacked( node, to_little_endian_64(uint64(deposit_count)), bytes24(0) )); } function get_deposit_count() override external view returns (bytes memory) { return to_little_endian_64(uint64(deposit_count)); } function deposit( bytes calldata pubkey, bytes calldata withdrawal_credentials, bytes calldata signature, bytes32 deposit_data_root ) override external payable { // Extended ABI length checks since dynamic types are used. require(pubkey.length == 48, "DepositContract: invalid pubkey length"); require(withdrawal_credentials.length == 32, "DepositContract: invalid withdrawal_credentials length"); require(signature.length == 96, "DepositContract: invalid signature length"); // Check deposit amount require(msg.value >= 1 ether, "DepositContract: deposit value too low"); require(msg.value % 1 gwei == 0, "DepositContract: deposit value not multiple of gwei"); uint deposit_amount = msg.value / 1 gwei; require(deposit_amount <= type(uint64).max, "DepositContract: deposit value too high"); // Emit `DepositEvent` log bytes memory amount = to_little_endian_64(uint64(deposit_amount)); emit DepositEvent( pubkey, withdrawal_credentials, amount, signature, to_little_endian_64(uint64(deposit_count)) ); // Compute deposit data root (`DepositData` hash tree root) bytes32 pubkey_root = sha256(abi.encodePacked(pubkey, bytes16(0))); bytes32 signature_root = sha256(abi.encodePacked( sha256(abi.encodePacked(signature[:64])), sha256(abi.encodePacked(signature[64:], bytes32(0))) )); bytes32 node = sha256(abi.encodePacked( sha256(abi.encodePacked(pubkey_root, withdrawal_credentials)), sha256(abi.encodePacked(amount, bytes24(0), signature_root)) )); // Verify computed and expected deposit data roots match require(node == deposit_data_root, "DepositContract: reconstructed DepositData does not match supplied deposit_data_root"); // Avoid overflowing the Merkle tree (and prevent edge case in computing `branch`) require(deposit_count < MAX_DEPOSIT_COUNT, "DepositContract: merkle tree full"); // Add deposit data root to Merkle tree (update a single `branch` node) deposit_count += 1; uint size = deposit_count; for (uint height = 0; height < DEPOSIT_CONTRACT_TREE_DEPTH; height++) { if ((size & 1) == 1) { branch[height] = node; return; } node = sha256(abi.encodePacked(branch[height], node)); size /= 2; } // As the loop should always end prematurely with the `return` statement, // this code should be unreachable. We assert `false` just to be safe. assert(false); } function supportsInterface(bytes4 interfaceId) override external pure returns (bool) { return interfaceId == type(ERC165).interfaceId || interfaceId == type(IDepositContract).interfaceId; } function to_little_endian_64(uint64 value) internal pure returns (bytes memory ret) { ret = new bytes(8); bytes8 bytesValue = bytes8(value); // Byteswapping during copying to bytes. ret[0] = bytesValue[7]; ret[1] = bytesValue[6]; ret[2] = bytesValue[5]; ret[3] = bytesValue[4]; ret[4] = bytesValue[3]; ret[5] = bytesValue[2]; ret[6] = bytesValue[1]; ret[7] = bytesValue[0]; }}
Earn Opportunity
Do you like playing Poker and earning Bitcoin? If so, Proton Chain has you covered! Using the Proton Wallet, verifying your identity, and heading over to ProtonGames, you can play Jacks or Better for a chance to win some Sats!