Compare commits

...

2 commits

Author SHA1 Message Date
9331926d49 First push Please 2025-05-06 00:19:54 -04:00
3f8b48083d First commit/push 2025-05-06 00:16:22 -04:00
153 changed files with 31176 additions and 0 deletions

28
config/settings.yml Normal file
View file

@ -0,0 +1,28 @@
# General Scraper Settings
debug:
save_html_js: true # Set to true for debugging, false for production
headless_mode:
js: false # Set to false to run Playwright in visible mode for JS debugging
html: false # Not used yet, but we can use Playwright for HTML later if needed
scraper:
user_agent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
request_timeout: 10 # Timeout in seconds
retry_attempts: 3 # Number of retries on failure
# Database Settings
database:
data_path: "data/data.db"
logs_path: "data/logs.db"
# API Keys (Optional - Can be filled later)
api_keys:
twitter: "YOUR_TWITTER_API_KEY"
discord: "YOUR_DISCORD_BOT_TOKEN"
# Logging Settings
logging:
level: "INFO" # Options: DEBUG, INFO, WARNING, ERROR
file: "data/scraper.log"

199
config/sites.yml Normal file
View file

@ -0,0 +1,199 @@
tokens:
- name: "Bitcoin"
url: "https://bitcoin.org"
- name: "Ethereum"
url: "https://ethereum.org"
- name: "Tether"
url: "https://tether.to"
- name: "Binance Coin"
url: "https://www.binance.com"
- name: "Cardano"
url: "https://cardano.org"
- name: "Solana"
url: "https://solana.com"
- name: "XRP"
url: "https://ripple.com/xrp"
- name: "Polkadot"
url: "https://polkadot.network"
- name: "Dogecoin"
url: "https://dogecoin.com"
- name: "USD Coin"
url: "https://www.centre.io/usdc"
- name: "Uniswap"
url: "https://uniswap.org"
- name: "Litecoin"
url: "https://litecoin.org"
- name: "Chainlink"
url: "https://chain.link"
- name: "Bitcoin Cash"
url: "https://bitcoincash.org"
- name: "Stellar"
url: "https://www.stellar.org"
- name: "VeChain"
url: "https://www.vechain.org"
- name: "Filecoin"
url: "https://filecoin.io"
- name: "TRON"
url: "https://tron.network"
- name: "Wrapped Bitcoin"
url: "https://wbtc.network"
- name: "Ethereum Classic"
url: "https://ethereumclassic.org"
- name: "Theta"
url: "https://www.thetatoken.org"
- name: "Monero"
url: "https://www.getmonero.org"
- name: "EOS"
url: "https://eos.io"
- name: "PancakeSwap"
url: "https://pancakeswap.finance"
- name: "Aave"
url: "https://aave.com"
- name: "Cosmos"
url: "https://cosmos.network"
- name: "Algorand"
url: "https://www.algorand.co"
- name: "Kusama"
url: "https://kusama.network"
- name: "Tezos"
url: "https://tezos.com"
- name: "Avalanche"
url: "https://avax.network"
- name: "NEO"
url: "https://neo.org"
- name: "Dai"
url: "https://makerdao.com"
- name: "Elrond"
url: "https://elrond.com"
- name: "SushiSwap"
url: "https://sushi.com"
- name: "Zcash"
url: "https://z.cash"
- name: "Dash"
url: "https://www.dash.org"
- name: "Compound"
url: "https://compound.finance"
- name: "Maker"
url: "https://makerdao.com"
- name: "Synthetix"
url: "https://synthetix.io"
- name: "Huobi Token"
url: "https://www.huobi.com"
- name: "BitTorrent"
url: "https://www.bt.io"
- name: "Chiliz"
url: "https://www.chiliz.com"
- name: "Decentraland"
url: "https://decentraland.org"
- name: "Zilliqa"
url: "https://www.zilliqa.com"
- name: "NEM"
url: "https://nem.io"
- name: "Celsius"
url: "https://celsius.network"
- name: "Holo"
url: "https://holochain.org"
- name: "Qtum"
url: "https://qtum.org"
- name: "Ontology"
url: "https://ont.io"
- name: "ICON"
url: "https://icon.foundation"
- name: "0x"
url: "https://0x.org"
- name: "Basic Attention Token"
url: "https://basicattentiontoken.org"
- name: "Siacoin"
url: "https://sia.tech"
- name: "Bitcoin SV"
url: "https://bitcoinsv.com"
- name: "CoinMarketCap"
url: "https://coinmarketcap.com"
- name: "Binance"
url: "https://www.binance.com"
- name: "KuCoin"
url: "https://www.kucoin.com"
- name: "OKX"
url: "https://www.okx.com"
- name: "Bitfinex"
url: "https://www.bitfinex.com"
- name: "Bittrex"
url: "https://global.bittrex.com"
- name: "Polkadot"
url: "https://polkadot.network"
- name: "Chainlink"
url: "https://chain.link"
- name: "Stellar"
url: "https://www.stellar.org"
- name: "USD Coin"
url: "https://www.centre.io/usdc"
- name: "Wrapped Bitcoin"
url: "https://wbtc.network"
nfts:
- name: "CoinMarketCap Upcoming NFTs"
url: "https://coinmarketcap.com/nft/upcoming/"

BIN
data/data.db Normal file

Binary file not shown.

BIN
data/logs.db Normal file

Binary file not shown.

View file

@ -0,0 +1,8 @@
[
{
"name": "Developers\u00e2\u0080\u0099 one-stop shop to enable faster crypto trading, better prices, and superior UX. Get started now at 0x.org.",
"symbol": "\u00c2",
"price": "USD",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "Aave is an Open Source Protocol to create Non-Custodial Liquidity Markets to earn interest on supplying and borrowing assets with a variable interest rate. The protocol is designed for easy integration into your products and services.",
"symbol": "GHO",
"price": "$",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "Avalanche is a smart contracts platform that scales infinitely and regularly finalizes transactions in less than one second. Build anything you want, any way you want, on the eco-friendly blockchain designed for Web3 developers.",
"symbol": "DAO",
"price": "$",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "A new token to value user attention on the Internet.",
"symbol": "BAT",
"price": "$",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "Bitcoin is an innovative payment network and a new kind of money. Find all you need to know and get started with Bitcoin on bitcoin.org.",
"symbol": "P2P",
"price": "$",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "Bitcoin Cash brings sound money to the world. Merchants and users are empowered with low fees and reliable confirmations. The future shines brightly with unrestricted growth, global adoption, permissionless innovation, and decentralized development.",
"symbol": "BR",
"price": "N/A",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "Bitcoin SV is Fast, Scalable, Environmentally-efficient and Regulation-friendly. It is Bitcoin exactly as envisioned in Satoshi Nakamoto\u00e2\u0080\u0099s Bitcoin White Paper.",
"symbol": "SV",
"price": "N/A",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "An open platform designed to empower billions without economic identity by offering decentralized applications for managing identity, value, and governance.",
"symbol": "A",
"price": "N/A",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "N/A",
"symbol": "US",
"price": "N/A",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "Major financial institutions and top DeFi protocols use Chainlink to power next-generation applications for banking, asset management, and other major sectors.",
"symbol": "VRF",
"price": "$",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "Top cryptocurrency prices and charts, listed by market capitalization. Free access to current and historic data for Bitcoin and thousands of altcoins.",
"symbol": "NFT",
"price": "$",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "Discover the NFT collections that will soon be listed for sale, including the day and time of their listing and the blockchain they will be hosted on.",
"symbol": "NFT",
"price": "$",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "Compound is an algorithmic, autonomous interest rate protocol built for developers, to unlock a universe of open financial applications.",
"symbol": "N/A",
"price": "N/A",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "Cosmos is an ever-expanding ecosystem of interoperable and sovereign blockchain apps and services, built for a decentralized future.",
"symbol": "N/A",
"price": "N/A",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "Decentraland is a social virtual world where you can connect, explore, and create.\n\nMeet new friends, join events, and make memories\u2014no matter where you are. Whether exploring the open, community-built landscape, partying on the dancefloor, or watching a binary sunset on the beach, Decentraland is where people from everywhere come together.",
"symbol": "NAME",
"price": "N/A",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "An open-source peer-to-peer digital currency, favoured by Shiba Inus worldwide",
"symbol": "FAQ",
"price": "N/A",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "MultiversX is a distributed blockchain network for next-gen applications. Decentralized via 3000+ nodes, scalable through sharding, fast, secure & green.",
"symbol": "X",
"price": "$",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "EOSIO is an open-source blockchain platform that helps developers, investors, and businesses build with confidence.",
"symbol": "EOSIO",
"price": "N/A",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "Ethereum is a global, decentralized platform for money and new kinds of applications. On Ethereum, you can write code that controls money, and build applications accessible anywhere in the world.",
"symbol": "ETH",
"price": "$",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "A decentralized computing platform that runs smart contracts: applications that run exactly as programmed without downtime, censorship or third party interference",
"symbol": "ETC",
"price": "USD",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "Filecoin is making the web more secure and efficient with a decentralized data storage marketplace, protocol, and cryptocurrency.",
"symbol": "A",
"price": "N/A",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "Bittrex",
"symbol": "N/A",
"price": "N/A",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "Holochain delivers beyond the promises of blockchain by providing a lightweight, secure and versatile framework for everyday distributed apps.",
"symbol": "P2P",
"price": "N/A",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "The ICON Foundation is a non-profit organization supporting the open development of bridging infrastructure to connect all blockchains.",
"symbol": "ICON",
"price": "N/A",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "Kusama is a scalable multi-chain network for radical innovation and early stage Polkadot deployments. Expect Chaos. No promises.",
"symbol": "KSM",
"price": "N/A",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "Litecoin is a cryptocurrency that enables instant payments to anyone in the world and that can be efficiently mined with consumer-grade hardware.",
"symbol": "P2P",
"price": "N/A",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "MakerDAO enables the generation of Dai, the world\u00e2\u0080\u0099s first unbiased currency and leading decentralized stablecoin.",
"symbol": "N/A",
"price": "N/A",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "Technical Documentation for Developers and Average Users.",
"symbol": "NEM",
"price": "N/A",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "Neo is an open-source, community driven platform that is leveraging the intrinsic advantages of blockchain technology to realize the optimized digital world of the future.",
"symbol": "NEO",
"price": "$",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "Bringing trust, privacy, and security to Web3 through decentralized identity and data solutions.",
"symbol": "10M",
"price": "$",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "Trade, earn, and own crypto on the all-in-one multichain DEX",
"symbol": "N/A",
"price": "N/A",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "Defy the possibilities with Polkadot\u2019s interoperable multi-chain network. Explore the future of true decentralization.",
"symbol": "A",
"price": "$",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "Qtum",
"symbol": "QTUM",
"price": "N/A",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "XRP enables fast and reliable options for businesses to drive blockchain-based applications and global payments. Discover the power of the digital asset XRP.",
"symbol": "XRP",
"price": "$",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "Cryptography has unleashed the latent power of the Internet by enabling interactions between mutually-distrusting parties. Sia [sigh-uh] harnesses this power to create a trustless cloud storage marketplace, allowing buyers and sellers to transact directly. No intermediaries, no borders, no vendor lock-in, no spying, no throttling, no walled gardens; it's a return to the Internet we once knew. The future is making a comeback.",
"symbol": "TB",
"price": "$",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "Fast. Decentralized. Scalable. Energy efficient. Solana can power thousands of transactions per second.",
"symbol": "U.S.",
"price": "$",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "Trade crypto effortlessly with SushiSwap, supporting over 30 chains and featuring a powerful aggregator for the best rates across DeFi.",
"symbol": "NEW",
"price": "$",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "Synthetix provides liquidity for permissionless derivatives like perpetual futures, options, parimutuel markets, and more across EVM chains. Powering the next generation of permissionless protocols.",
"symbol": "OP",
"price": "$",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "Tether \u00e2\u0080\u0093 Official Home of Tether",
"symbol": "N/A",
"price": "N/A",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "Tezos is an open-source platform for assets and applications backed by a global community of validators, researchers, and builders.",
"symbol": "XTZ",
"price": "N/A",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "TRON is an ambitious project dedicated to building the infrastructure for a truly decentralized Internet. The TRON Protocol, one of the largest blockchain based operating systems in the world, offers scalable, high-availability and high-throughput support that underlies all the decentralized applications in the TRON ecosystem.",
"symbol": "TRON",
"price": "$",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "Swap or provide liquidity on the Uniswap Protocol",
"symbol": "N/A",
"price": "N/A",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "Wrapped Bitcoin ( WBTC ) an ERC20 token backed 1:1 with Bitcoin",
"symbol": "WBTC",
"price": "N/A",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "Welcome to Algorand! Discover resources to learn about the technology, to get started building dApps, to connect with the ecosystem and community, and more.",
"symbol": "SDK",
"price": "N/A",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "Binance, the largest crypto exchange by trading volume, serves 250M+ users in 180+ countries. With 350+ listed altcoins, it is the world's leading crypto exchange.",
"symbol": "USERS",
"price": "$",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "Bitfinex is the longest-running and most liquid major cryptocurrency exchange. Founded in 2012, it has become the go-to platform for traders & institutional investors.",
"symbol": "UNUS",
"price": "USD",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "An Era of Connecting All Chains.",
"symbol": "N/A",
"price": "N/A",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "Get access to USDC, a digital dollar that can be redeemed 1:1 for US dollars. Use USDC for crypto trading, cross border payments, global dollar savings accounts, remittances and more. USDC is issued by Circle.",
"symbol": "USDC",
"price": "$",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "Chiliz Chain is the world's only sports focused blockchain. Web3 partner to 70+ elite sports teams. Stop scrolling. Start building.",
"symbol": "DEX",
"price": "$",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "Dash gives you the freedom to move your money any way you want. Dash moves money anywhere, to anyone, instantly, for less than a cent.",
"symbol": "\u00ce\u0095\u00ce",
"price": "$",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "Monero, a digital currency that is secure, private, and untraceable",
"symbol": "FAQ",
"price": "N/A",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "Buy BTC, ETH, HT, and more on HTX, a leading crypto exchange. HTX is one of the world\u00e2\u0080\u0099s biggest Bitcoin exchanges and altcoin crypto exchanges.",
"symbol": "HTX",
"price": "$",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "KuCoin is a secure cryptocurrency exchange that allows you to buy, sell, and trade Bitcoin, Ethereum, and 700+ altcoins. The leader in driving Web 3.0 adoption.",
"symbol": "APK",
"price": "$",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "Buy BTC, ETH, XRP and more on OKX, a leading crypto exchange \u2013 explore Web3, invest in DeFi and NFTs. Register now and experience the future of finance.",
"symbol": "OKX",
"price": "$",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "Stellar Network: Discover an open-source blockchain platform equipped for DeFi with a secure smart contract platform, fast and affordable payments and enterprise-grade asset tokenization. Join our vibrant ecosystem of developers, entrepreneurs, and enterprises to pioneer the future of blockchain technology",
"symbol": "81K+",
"price": "$",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "Theta Network",
"symbol": "N/A",
"price": "N/A",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "Discover VeChainThor blockchain: Sustainable, fast, scalable, secure, and EVM-compatible. Join us in leading the future of Web3.",
"symbol": "UFC",
"price": "N/A",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "Zilliqa",
"symbol": "A",
"price": "N/A",
"market_cap": "N/A"
}
]

View file

@ -0,0 +1,8 @@
[
{
"name": "The first cryptocurrency to develop zero-knowledge encryption for private peer-to-peer payments. Use Zcash Learn Zcash Current price (USD) $ 0 Outstanding\u2026",
"symbol": "I",
"price": "USD",
"market_cap": "N/A"
}
]

3
readme.md Normal file
View file

@ -0,0 +1,3 @@
# Crypto_Scraper
A crypto scraper bot that logs crypto asset prices

0
requirements.txt Normal file
View file

View file

Binary file not shown.

Binary file not shown.

Binary file not shown.

148
src/databases/data.py Normal file
View file

@ -0,0 +1,148 @@
import os
import sqlite3 # SQLite module
import csv
import json
class Datadb:
"""
SQLite database handler for storing airdrop information, tokens, and NFTs.
"""
def __init__(self, db_name="data.db"):
"""Initialize the database connection and ensure tables exist."""
db_folder = "data" # Ensure the 'data' directory exists
os.makedirs(db_folder, exist_ok=True)
self.db_name = os.path.join(db_folder, db_name)
self.create_tables() # ✅ Ensure tables are created upon initialization
def execute_query(self, query, params=(), commit=False, fetch=False):
"""Execute a query safely with optional commit and fetch."""
with sqlite3.connect(self.db_name) as conn:
cursor = conn.cursor()
cursor.execute(query, params)
if commit:
conn.commit()
if fetch:
return cursor.fetchall()
def create_tables(self):
"""Create the necessary tables if they do not exist."""
# ✅ Create 'airdrops' table
self.execute_query("""
CREATE TABLE IF NOT EXISTS airdrops (
id INTEGER PRIMARY KEY AUTOINCREMENT,
source TEXT NOT NULL,
name TEXT UNIQUE NOT NULL,
claim_link TEXT,
mint_date TEXT,
mint_price TEXT,
discord TEXT,
twitter TEXT,
website TEXT,
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
ai_confidence REAL
)
""", commit=True)
# ✅ Create 'tokens' table
self.execute_query("""
CREATE TABLE IF NOT EXISTS tokens (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT UNIQUE NOT NULL,
symbol TEXT UNIQUE NOT NULL,
contract_address TEXT UNIQUE,
market_cap REAL,
token_price REAL,
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
)
""", commit=True)
# ✅ Create 'nfts' table
self.execute_query("""
CREATE TABLE IF NOT EXISTS nfts (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT UNIQUE NOT NULL,
collection TEXT NOT NULL,
mint_price TEXT,
mint_date TEXT,
blockchain TEXT,
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
)
""", commit=True)
print("✅ All required tables created (if they didn't exist).")
def insert_airdrop(self, source, name, claim_link, mint_date, mint_price, discord, twitter, website, ai_confidence):
"""Insert a new airdrop entry into the database only if it doesn't already exist."""
existing_entry = self.execute_query(
"SELECT id FROM airdrops WHERE name = ? AND source = ?",
(name, source),
fetch=True
)
if existing_entry:
print(f"⚠️ Airdrop '{name}' already exists. Skipping insertion.")
else:
self.execute_query("""
INSERT INTO airdrops (source, name, claim_link, mint_date, mint_price, discord, twitter, website, ai_confidence)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
""", (source, name, claim_link, mint_date, mint_price, discord, twitter, website, ai_confidence), commit=True)
print(f"✅ Airdrop '{name}' inserted successfully.")
def entry_exists(self, table, column, value):
"""Check if a specific entry exists in a given table and column."""
query = f"SELECT COUNT(*) FROM {table} WHERE {column} = ?"
result = self.execute_query(query, (value,), fetch=True)
return result[0][0] > 0 # Returns True if entry exists, False otherwise
def export_to_csv(self, table_name, filename):
"""Export all table data to a CSV file."""
rows = self.execute_query(f"SELECT * FROM {table_name}", fetch=True)
if not rows:
print(f"⚠️ No data found in {table_name}. Skipping CSV export.")
return
headers = [description[0] for description in self.execute_query(f"PRAGMA table_info({table_name})", fetch=True)]
with open(filename, mode="w", newline="", encoding="utf-8") as file:
writer = csv.writer(file)
writer.writerow(headers)
writer.writerows(rows)
print(f"{table_name} data exported to {filename}")
def export_to_json(self, table_name, filename):
"""Export all table data to a JSON file."""
rows = self.execute_query(f"SELECT * FROM {table_name}", fetch=True)
if not rows:
print(f"⚠️ No data found in {table_name}. Skipping JSON export.")
return
headers = [description[0] for description in self.execute_query(f"PRAGMA table_info({table_name})", fetch=True)]
data = [dict(zip(headers, row)) for row in rows]
with open(filename, mode="w", encoding="utf-8") as file:
json.dump(data, file, indent=4)
print(f"{table_name} data exported to {filename}")
# ✅ Initialize database when the script is run directly
if __name__ == "__main__":
db = Datadb()
db.create_tables()
print("\n🔍 Checking Stored Airdrops:")
db.export_to_csv("airdrops", "airdrops.csv")
db.export_to_json("airdrops", "airdrops.json")
print("\n🔍 Checking Stored Tokens:")
db.export_to_csv("tokens", "tokens.csv")
db.export_to_json("tokens", "tokens.json")
print("\n🔍 Checking Stored NFTs:")
db.export_to_csv("nfts", "nfts.csv")
db.export_to_json("nfts", "nfts.json")

104
src/databases/logs.py Normal file
View file

@ -0,0 +1,104 @@
import os
import sqlite3 # SQLite module
import datetime
from .data import Datadb # Corrected import
class Logsdb:
"""
Database to store scraper logs.
"""
def __init__(self, db_name="logs.db"): # Updated db name
db_folder = "data" # Set the database folder
os.makedirs(db_folder, exist_ok=True)
self.db_name = os.path.join(db_folder, db_name)
self.create_table()
def log(self, message):
"""Logs a message into the database with the correct timestamp."""
local_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print(f"{local_time} {message}") # ✅ Print log for debugging
with sqlite3.connect(self.db_name) as conn:
cursor = conn.cursor()
cursor.execute("INSERT INTO logs (timestamp, message) VALUES (?, ?)", (local_time, message))
conn.commit()
def log_message(self, message):
"""
Log a message into the database with the correct local timestamp.
"""
local_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") # ✅ Get local system time
print(f"{local_time} {message}") # ✅ Debug output
self.execute_query("INSERT INTO logs (timestamp, message) VALUES (?, ?)", (local_time, message), commit=True)
def execute_query(self, query, params=(), commit=False, fetch=False):
with sqlite3.connect(self.db_name) as conn:
cursor = conn.cursor()
cursor.execute(query, params)
if commit:
conn.commit()
if fetch:
return cursor.fetchall()
def create_table(self):
"""
Create the logs table if it does not exist.
"""
self.execute_query("""
CREATE TABLE IF NOT EXISTS logs (
id INTEGER PRIMARY KEY AUTOINCREMENT,
timestamp TEXT NOT NULL,
message TEXT NOT NULL
)
""", commit=True)
# ✅ Initialize databases **AFTER ensuring the table exists**
airdrop_db = Datadb() # Corrected class name
log_db = Logsdb()
log_db.log_message("🚀 [INFO] Scraper logs database initialized.")
def scrape_site(url, keywords=["airdrop", "claim", "mint"]):
"""
Scrapes a given site and stores data in the database.
Logs AI Agent decisions and behavior as well.
"""
log_db.log_message(f"🌐 [INFO] Starting scrape for {url}")
try:
log_db.log_message(f"🤖 [AI] Pre-scanning website structure for {url}")
ai_decision = "Static Scraping Chosen"
log_db.log_message(f"🤖 [AI] Decision: {ai_decision}")
log_db.log_message(f"🔍 [AI] Validating extracted data from {url}")
validation_passed = True # Simulated result
if validation_passed:
log_db.log_message(f"✅ [AI] Data validation successful for {url}")
else:
log_db.log_message(f"⚠️ [AI] Data validation failed, triggering re-scrape for {url}")
scrape_site(url) # Recursive re-run
return
# Simulated scraping logic
extracted_data = [
{"name": "Example Airdrop", "claim_link": url, "mint_date": "2025-02-18", "mint_price": "Free",
"discord": "N/A", "twitter": "N/A", "website": url, "ai_confidence": 0.9}
]
log_db.log_message(f"📊 [AI] Extracted {len(extracted_data)} potential entries")
for data in extracted_data:
airdrop_db.insert_airdrop(
source=url, name=data["name"], claim_link=data["claim_link"], mint_date=data["mint_date"],
mint_price=data["mint_price"], discord=data["discord"], twitter=data["twitter"],
website=data["website"], ai_confidence=data["ai_confidence"]
)
log_db.log_message(f"✅ [SUCCESS] Inserted airdrop: {data['name']}")
except Exception as e:
log_db.log_message(f"❌ [ERROR] Failed to scrape {url}: {e}")
log_db.log_message(f"🛠️ [AI] Manual intervention required for {url}")
finally:
log_db.log_message(f"🏁 [INFO] Scraping complete for {url}")
# ✅ Start logging **AFTER ensuring everything is set up**
log_db.log_message("🚀 [INFO] Scraping Airdrops...")
scrape_site("https://example.com/airdrop")
log_db.log_message("✅ [INFO] Scraping Done")

0
src/main.py Normal file
View file

120
src/orchestrator.py Normal file
View file

@ -0,0 +1,120 @@
import os
import sqlite3
import yaml
from databases.logs import Logsdb
from databases.data import Datadb
class Orchestrator:
"""Ensures databases and configs are initialized before the scraper runs."""
def __init__(self):
self.data_db_path = "data/data.db"
self.logs_db_path = "data/logs.db"
self.config_path = "config/settings.yml"
self.sites_path = "config/sites.yml"
# Initialize logs database for logging
self.logs_db = Logsdb()
def check_and_create_databases(self):
"""Ensures that both data.db and logs.db exist."""
os.makedirs("data", exist_ok=True) # Ensure data folder exists
if not os.path.exists(self.data_db_path):
self.logs_db.log("⚠️ [WARNING] data.db not found. Creating new database...")
Datadb().initialize()
self.logs_db.log("✅ [INFO] data.db initialized successfully.")
if not os.path.exists(self.logs_db_path):
self.logs_db.log("⚠️ [WARNING] logs.db not found. Creating new database...")
Logsdb().initialize()
self.logs_db.log("✅ [INFO] logs.db initialized successfully.")
def check_database_tables(self):
"""Ensures required tables exist in the database."""
conn = sqlite3.connect(self.data_db_path)
cursor = conn.cursor()
required_tables = ["tokens", "nfts", "logs"]
for table in required_tables:
cursor.execute(f"SELECT name FROM sqlite_master WHERE type='table' AND name='{table}';")
if not cursor.fetchone():
self.logs_db.log(f"❌ [ERROR] Missing required table: {table} in data.db")
conn.close()
def create_sample_config_files(self):
"""Creates sample settings.yml and sites.yml if they are missing."""
os.makedirs("config", exist_ok=True) # Ensure config folder exists
# Sample settings.yml
default_settings = {
"scraper": {
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"request_timeout": 10,
"retry_attempts": 3
},
"database": {
"data_path": "data/data.db",
"logs_path": "data/logs.db"
},
"api_keys": {
"twitter": "YOUR_TWITTER_API_KEY",
"discord": "YOUR_DISCORD_BOT_TOKEN"
},
"logging": {
"level": "INFO",
"file": "data/scraper.log"
},
"debug": {
"save_html_js": True # Set to True for debugging, False for production
}
}
if not os.path.exists(self.config_path):
with open(self.config_path, "w") as f:
yaml.dump(default_settings, f, default_flow_style=False)
self.logs_db.log("📝 [INFO] Created sample settings.yml")
# Sample sites.yml
default_sites = {
"airdrops": [
{"name": "Airdrops.io", "url": "https://airdrops.io/latest/"},
{"name": "CoinMarketCap Recently Added", "url": "https://coinmarketcap.com/new/"},
{"name": "CoinMarketCap Upcoming Tokens", "url": "https://coinmarketcap.com/upcoming/"},
{"name": "CoinMarketCap Upcoming NFTs", "url": "https://coinmarketcap.com/nft/upcoming/"}
]
}
if not os.path.exists(self.sites_path):
with open(self.sites_path, "w") as f:
yaml.dump(default_sites, f, default_flow_style=False)
self.logs_db.log("📝 [INFO] Created sample sites.yml")
def validate_config_files(self):
"""Ensures that settings.yml and sites.yml are properly formatted."""
for file in [self.config_path, self.sites_path]:
if not os.path.exists(file):
self.logs_db.log(f"❌ [ERROR] Missing required config file: {file}")
continue
try:
with open(file, "r") as f:
yaml.safe_load(f) # Attempt to parse YAML file
self.logs_db.log(f"✅ [INFO] Successfully loaded {file}")
except yaml.YAMLError as e:
self.logs_db.log(f"❌ [ERROR] Invalid YAML format in {file}: {e}")
def run_checks(self):
"""Runs all integrity checks before the scraper starts."""
self.logs_db.log("🚀 [INFO] Running startup integrity checks...")
self.check_and_create_databases()
self.check_database_tables()
self.create_sample_config_files()
self.validate_config_files()
self.logs_db.log("✅ [INFO] All checks completed successfully.")
# ✅ Run the orchestrator when script is executed
if __name__ == "__main__":
orchestrator = Orchestrator()
orchestrator.run_checks()

0
src/scraper/__init__.py Normal file
View file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

0
src/scraper/analyser.py Normal file
View file

0
src/scraper/base.py Normal file
View file

0
src/scraper/discord.py Normal file
View file

56
src/scraper/fetcher.py Normal file
View file

@ -0,0 +1,56 @@
import yaml
from scraper.html import fetch_html
from scraper.js import fetch_js
from scraper.parser import parse_html
class Fetcher:
def __init__(self, sites_config="config/sites.yml"):
self.sites = self.load_yaml(sites_config)
def load_yaml(self, file_path):
"""Loads YAML and normalizes site names (lowercase, underscores)."""
with open(file_path, "r") as file:
data = yaml.safe_load(file)
# Convert names: "Airdrops.io" → "airdrops_io"
self.sites_dict = {
site["name"].lower().replace(" ", "_").replace(".", ""): site["url"]
for category in data.values() for site in category
}
print(f"Loaded sites: {self.sites_dict}") # Debugging line
return self.sites_dict
def fetch(self, site_name, debug=False):
"""Fetches data from a given site using a normalized name."""
site_name = site_name.lower().replace(" ", "_").replace(".", "") # Normalize input
url = self.sites.get(site_name)
if not url:
raise ValueError(f"Site '{site_name}' not found in sites.yml")
return fetch_js(url, debug) if "coinmarketcap" in url else fetch_html(url, debug)
def fetch_and_parse(self, site_name):
"""Fetch data from a live site and parse it immediately (production mode)."""
print(f"🚀 Fetching live data from: {site_name}")
# Normalize site name (convert to lowercase & replace spaces)
normalized_name = site_name.lower().replace(" ", "_").replace(".", "")
url = self.sites.get(normalized_name)
if not url:
raise ValueError(f"❌ Site '{site_name}' not found in sites.yml")
print(f"🔍 DEBUG: Fetching URL: {url}")
html_content = fetch_js(url) if "coinmarketcap" in url else fetch_html(url)
parsed_data = parse_html(html_content)
print(f"✅ Extracted Data: {parsed_data}")
return parsed_data

40
src/scraper/html.py Normal file
View file

@ -0,0 +1,40 @@
import requests
import yaml
import os
# Load settings
with open("config/settings.yml", "r") as file:
settings = yaml.safe_load(file)
HEADLESS_MODE_HTML = settings["debug"]["headless_mode"].get("html", True) # Default to True
def fetch_html(url, debug=False):
"""Fetches static HTML pages using requests (no Playwright needed yet)."""
response = requests.get(url, headers={"User-Agent": "Mozilla/5.0"})
response.raise_for_status()
content = response.text
if debug:
save_debug_file(url, content, "html")
return content
import os
def save_debug_file(site_name, content, file_type):
"""Saves fetched content for debugging, ensuring a clean filename."""
safe_name = (
site_name.replace("https://", "")
.replace("http://", "")
.replace("/", "_")
.replace(".", "_") # Normalize periods
.rstrip("_") # Remove trailing underscores
)
file_path = f"tests/{safe_name}.{file_type}"
with open(file_path, "w", encoding="utf-8") as f:
f.write(content)
print(f"✅ Debug file saved: {file_path}")

156
src/scraper/js.py Normal file
View file

@ -0,0 +1,156 @@
import yaml
from playwright.sync_api import sync_playwright
import nltk
from bs4 import BeautifulSoup
from nltk.tokenize import word_tokenize
nltk.download("punkt_tab")
import os
# Load settings
with open("config/settings.yml", "r") as file:
settings = yaml.safe_load(file)
HEADLESS_MODE_JS = settings["debug"]["headless_mode"].get("js", True) # Default to True
def fetch_js(url, debug=False):
"""Fetches JavaScript-rendered pages and handles interactions."""
with sync_playwright() as p:
browser = p.chromium.launch(headless=HEADLESS_MODE_JS)
page = browser.new_page()
page.goto(url, wait_until="networkidle")
# Scroll & click 'Load More'
if needs_scrolling(page):
scroll_page(page)
if has_load_more_button(page):
click_load_more(page)
content = page.content()
browser.close()
if debug:
save_debug_file(url, content) # Now only two arguments
return content
def needs_scrolling(page):
"""Detects if a page requires scrolling by checking if it dynamically loads more content."""
prev_height = page.evaluate("document.body.scrollHeight")
page.evaluate("window.scrollTo(0, document.body.scrollHeight)")
page.wait_for_timeout(2000) # Wait for new content to load
new_height = page.evaluate("document.body.scrollHeight")
return new_height > prev_height # If height increased, scrolling is needed
def scroll_page(page):
"""Scrolls down until no more content is being added."""
for _ in range(5): # Limit scrolling attempts to prevent infinite loops
prev_height = page.evaluate("document.body.scrollHeight")
page.evaluate("window.scrollTo(0, document.body.scrollHeight)")
page.wait_for_timeout(2000)
new_height = page.evaluate("document.body.scrollHeight")
if new_height == prev_height:
break # Stop if no new content is loading
def has_load_more_button(page):
"""Checks if a 'Load More' button exists on the page."""
button = page.query_selector("button, .load-more, .btn-load-more")
return button is not None
def click_load_more(page):
"""Clicks 'Load More' buttons if they exist, while checking for popups."""
for _ in range(3): # Limit to 3 attempts
button = page.query_selector("button, .load-more, .btn-load-more")
# Check for modals/popups and try to close them
close_popup(page)
if button:
try:
button.click(timeout=5000) # 5-second timeout to prevent long waits
page.wait_for_timeout(2000) # Wait for new content to load
print("✅ Clicked 'Load More' button.")
except Exception as e:
print(f"❌ Failed to click 'Load More': {e}")
break # Stop trying if clicking fails
else:
print("⚠️ No 'Load More' button found.")
break
from bs4 import BeautifulSoup
def close_popup(page):
"""Uses NLP to detect and remove popups dynamically."""
page_html = page.content()
soup = BeautifulSoup(page_html, "html.parser")
popup_selectors = [
"div[role='dialog']", # Generic login popup
".modalOpened", # CoinMarketCap's modal
".overlay", # Overlays that block clicks
".popup", # Other generic popups
]
close_button_selectors = [
"button[aria-label='Close']", # CMC Close button
"button.close", # Generic close button
".modal-close", # Another common class
]
# Extract visible text
visible_text = " ".join([tag.get_text(strip=True) for tag in soup.find_all("div")])
# Tokenize the text
words = word_tokenize(visible_text.lower())
# Define words that indicate a login popup
popup_keywords = {"login", "sign up", "sign in", "register", "account", "access", "continue"}
if any(word in words for word in popup_keywords):
print(f"⚠️ AI detected a login popup based on text analysis. Attempting to close...")
for selector in popup_selectors:
popup = page.query_selector(selector)
if popup:
print(f"⚠️ NLP detected popup: {selector}, attempting to close it...")
# Try clicking the close button first
for close_selector in close_button_selectors:
close_button = page.query_selector(close_selector)
if close_button:
try:
close_button.click()
page.wait_for_timeout(2000) # Wait for it to close
print(f"✅ AI clicked close button: {close_selector}")
return
except Exception as e:
print(f"❌ AI failed to click close button: {close_selector} -> {e}")
# No close button found? Try removing the popup
print(f"⚠️ AI failed to find a close button, forcing removal of {selector}...")
try:
page.evaluate(f'document.querySelector("{selector}").remove();')
page.wait_for_timeout(1000) # Allow time for it to disappear
print(f"✅ AI forced removal of popup: {selector}")
except Exception as e:
print(f"❌ AI failed to remove popup: {selector} -> {e}")
def save_debug_file(site_name, content):
"""Saves fetched JavaScript-rendered pages as .html instead of .js."""
safe_name = (
site_name.replace("https://", "")
.replace("http://", "")
.replace("/", "_")
.replace(".", "_") # Normalize periods
.rstrip("_") # Remove trailing underscores
)
file_path = f"tests/{safe_name}.html" # Always save as .html
with open(file_path, "w", encoding="utf-8") as f:
f.write(content)
print(f"✅ Debug file saved: {file_path}")

0
src/scraper/nfts.py Normal file
View file

50
src/scraper/parser.py Normal file
View file

@ -0,0 +1,50 @@
import os
from bs4 import BeautifulSoup
import nltk
from nltk.tokenize import word_tokenize
# Ensure NLTK resources are downloaded
nltk.download("punkt")
def parse_html(html_content):
"""Extract token data dynamically using NLP instead of hardcoded class names."""
from bs4 import BeautifulSoup
import nltk
from nltk.tokenize import word_tokenize
soup = BeautifulSoup(html_content, "html.parser")
# Extract all text from the page
full_text = soup.get_text(separator=" ", strip=True)
# DEBUG: Print first 1000 characters of extracted text
print("\n🔍 DEBUG: Extracted Text from HTML:")
print(full_text[:1000]) # Print first 1000 characters to see what the parser is working with
# Tokenize the text (split it into words)
words = word_tokenize(full_text)
# Heuristic: A token name is usually a **capitalized word** with no numbers
possible_names = [word for word in words if word.istitle() and word.isalpha()]
possible_symbols = [word for word in words if word.isupper() and len(word) <= 5]
tokens = []
if possible_names:
for i, name in enumerate(possible_names):
symbol = possible_symbols[i] if i < len(possible_symbols) else "N/A"
tokens.append({"name": name, "symbol": symbol})
print(f"✅ Extracted {len(tokens)} tokens.") # Debugging output
return {"tokens": tokens}
def parse_from_file(filename):
"""Loads an HTML file from the tests directory and parses it."""
filepath = os.path.join("tests", filename)
if not os.path.exists(filepath):
raise FileNotFoundError(f"❌ HTML file not found: {filepath}")
with open(filepath, "r", encoding="utf-8") as file:
html_content = file.read()
return parse_html(html_content)

0
src/scraper/tokens.py Normal file
View file

0
src/scraper/twitter.py Normal file
View file

0
src/scraper/utils.py Normal file
View file

716
tests/0x_org.html Normal file

File diff suppressed because one or more lines are too long

0
tests/__init__.py Normal file
View file

33
tests/aave_com.html Normal file

File diff suppressed because one or more lines are too long

549
tests/avax_network.html Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

806
tests/bitcoin_org.html Normal file
View file

@ -0,0 +1,806 @@
<!DOCTYPE HTML>
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta property="og:image" content="https://bitcoin.org/img/icons/opengraph.png?1736694469" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
<title>Bitcoin - Open source P2P money</title>
<meta name="description" content="Bitcoin is an innovative payment network and a new kind of money. Find all you need to know and get started with Bitcoin on bitcoin.org.">
<link rel="stylesheet" href="/css/font-awesome-4.4.0/css/font-awesome.min.css">
<link rel="stylesheet" href="/css/main.css?1736694469">
<!--[if lt IE 8]><link rel="stylesheet" href="/css/ie.css"><script type="text/javascript" src="/js/ie.js"></script><![endif]-->
<!--[if IE 8]><link rel="stylesheet" href="/css/ie8.css"><![endif]-->
<script type="text/javascript" src="/js/base.js?1736694469"></script>
<script type="text/javascript" src="/js/main.js?1736694469"></script>
<script src="/js/jquery/jquery-1.11.2.min.js"></script>
<script src="/js/jquery/jquery-ui.min.js"></script>
<script src="/js/jquery/jquery.qrcode.min.js"></script>
<link rel="shortcut icon" href="/favicon.png?1736694469">
<link rel="apple-touch-icon-precomposed" href="/img/icons/logo_ios.png?1736694469"/>
<script>
window.cookieconsent_options = {
theme: 'light-floating'
}
</script>
<script type="text/javascript" src="/js/cookieconsent/cookieconsent.js?1736694469"></script>
<script>
if( navigator.doNotTrack != "yes" && navigator.doNotTrack != "1" && window.doNotTrack != "1" && navigator.msDoNotTrack != "1" ){
var script = document.createElement('script');
script.src = '/js/analytics.js'
document.getElementsByTagName("head")[0].appendChild(script);
}
</script>
</head>
<body>
<div class="donation-container">
<div class="donation-text">
<div class="donation-text-container">
<button onclick="closeDonationBanner()" class="donation-modal-close">
<img src="/img/icons/ico_close.svg?1736694469" alt="Close">
</button>
<p>
Bitcoin.org is a community funded project, donations are appreciated and used to improve the website.
</p>
<button type="button" class="donation-btn" onclick="openDonationModal()">
Make a donation
</button>
</div>
</div>
<button type="button" class="donation-visibility-toggle" onclick="toggleDonationBanner()">
Bitcoin.org needs your support!
</button>
</div>
<div id="donation-modal" style="display: none" class="donation-modal hidden">
<div class="modal-dialog">
<div class="modal-header">
<div class="modal-close-btn" onclick="closeDonationModal()">×</div>
<p class="modal-header-text section-title">Donate to Bitcoin.org</p>
</div>
<p class="modal-subheader">Use this QR code or address below</p>
<div style="text-align: center;">
<div id="donation-qr-code" data-address="bc1qx3u4njquj0ux63030r4nat8awqrlm0x2zlt96h"></div>
</div>
<div>
<a
class="donation-btc-address"
href="bitcoin:bc1qx3u4njquj0ux63030r4nat8awqrlm0x2zlt96h"
target="_blank">
bc1qx3u4njquj0ux63030r4nat8awqrlm0x2zlt96h
</a>
</div>
<div class="modal-body bg-white" style="overflow-y:hidden;text-align: center;">
<div>
<button type="button" class="donation-amount-btn" data-amount-usd="50">
$50.00
<div class="donation-amount-usd-in-btc">(... BTC)</div>
</button>
<button type="button" class="donation-amount-btn" data-amount-usd="100">
$100.00
<div class="donation-amount-usd-in-btc">(... BTC)</div>
</button>
<button type="button" class="donation-amount-btn" data-amount-usd="200">
$200.00
<div class="donation-amount-usd-in-btc">(... BTC)</div>
</button>
</div>
<div>
<input
style="margin-right: 15px"
type="text"
placeholder="Or custom amount? (BTC)"
id="donation-input-amount-btc" class="donation-amount-input">
<input
type="text"
placeholder="Or custom amount? (USD)"
id="donation-input-amount-usd" class="donation-amount-input">
</div>
<div>
<textarea
class="donation-amount-input"
id="donation-input-message"
placeholder="Optional description (for your wallet)"></textarea>
</div>
</div>
</div>
</div>
<div id="detectmobile" class="detectmobile"></div>
<div class="head"><div>
<a class="logo" href="/en/"><img src="/img/icons/logotop.svg?1736694469" alt="Bitcoin"></a>
<ul id="menusimple" class="menusimple menumain" onclick="mobileMenuHover(event);" ontouchstart="mobileMenuHover(event);">
<li><a class="is-expand">Introduction</a>
<ul>
<li><a href="/en/bitcoin-for-individuals">Individuals</a></li>
<li><a href="/en/bitcoin-for-businesses">Businesses</a></li>
<li><a href="https://developer.bitcoin.org/">Developers</a></li>
<li><a href="/en/getting-started">Getting started</a></li>
<li><a href="/en/how-it-works">How it works</a></li>
<li><a href="/en/bitcoin-paper">White paper</a></li>
</ul>
</li>
<li><a class="is-expand">Resources</a>
<ul>
<li><a href="/en/resources">Resources</a>
<li><a href="/en/exchanges">Exchanges</a></li>
<li><a href="/en/community">Community</a></li>
<li><a href="https://developer.bitcoin.org/">Documentation</a></li>
<li><a href="/en/vocabulary">Vocabulary</a></li>
<li><a href="/en/events">Events</a></li>
<li><a href="/en/bitcoin-core/">Bitcoin Core</a></li>
</ul>
</li>
<li><a href="/en/innovation">Innovation</a></li>
<li><a class="is-expand">Participate</a>
<ul>
<li><a href="/en/support-bitcoin">Support Bitcoin</a>
<li id="buybitcoinmenulink" ><a href="/en/buy">Buy Bitcoin</a></li>
<li><a href="/en/full-node">Running a full node</a></li>
<li><a href="/en/development">Development</a></li>
</ul>
</li>
<li><a href="/en/faq">FAQ</a></li>
</ul>
<a id="menumobile" class="menumobile" onclick="mobileMenuShow(event);" ontouchstart="mobileMenuShow(event);"></a>
<ul class="lang is-expand">
<li><a>English</a>
<ul>
<li><ul>
<li><a href="/id/">Bahasa Indonesia</a></li>
<li><a href="/ca/">Català</a></li>
<li><a href="/da/">Dansk</a></li>
<li><a href="/de/">Deutsch</a></li>
<li><a href="/en/" class="active">English</a></li>
<li><a href="/es/">Español</a></li>
<li><a href="/fr/">Français</a></li>
<li><a href="/it/">Italiano</a></li>
<li><a href="/hu/">Magyar</a></li>
<li><a href="/nl/">Nederlands</a></li>
<li><a href="/pl/">Polski</a></li>
<li><a href="/pt_BR/">Português Brasil</a></li>
<li><a href="/ro/">Română</a></li>
<li><a href="/sl/">Slovenščina</a></li>
<li><a href="/sr/">Srpski</a></li>
<li><a href="/sv/">Svenska</a></li>
</ul></li><li><ul>
<li><a href="/tr/">Türkçe</a></li>
<li><a href="/el/">Ελληνικά</a></li>
<li><a href="/bg/">български</a></li>
<li><a href="/ru/">Русский</a></li>
<li><a href="/uk/">Українська</a></li>
<li><a href="/hy/">Հայերեն</a></li>
<li><a href="/ar/">العربية</a></li>
<li><a href="/fa/">فارسی</a></li>
<li><a href="/he/">עברית</a></li>
<li><a href="/hi/">हिन्दी</a></li>
<li><a href="/ko/">한국어</a></li>
<li><a href="/km/">ខ្មែរ</a></li>
<li><a href="/ja/">日本語</a></li>
<li><a href="/zh_CN/">简体中文</a></li>
<li><a href="/zh_TW/">繁體中文</a></li>
</ul></li>
</ul>
</li>
</ul>
<div id="langselect" class="langselect">
<label for="select-input" class="center-select">
<select id="select-input" class="center-select__input" onchange="window.location=this.value;">
<option value="/id/" >Bahasa Indonesia</option>
<option value="/ca/" >Català</option>
<option value="/da/" >Dansk</option>
<option value="/de/" >Deutsch</option>
<option value="/en/" selected="selected">English</option>
<option value="/es/" >Español</option>
<option value="/fr/" >Français</option>
<option value="/it/" >Italiano</option>
<option value="/hu/" >Magyar</option>
<option value="/nl/" >Nederlands</option>
<option value="/pl/" >Polski</option>
<option value="/pt_BR/" >Português Brasil</option>
<option value="/ro/" >Română</option>
<option value="/sl/" >Slovenščina</option>
<option value="/sr/" >Srpski</option>
<option value="/sv/" >Svenska</option>
<option value="/tr/" >Türkçe</option>
<option value="/el/" >Ελληνικά</option>
<option value="/bg/" >български</option>
<option value="/ru/" >Русский</option>
<option value="/uk/" >Українська</option>
<option value="/hy/" >Հայերեն</option>
<option value="/ar/" >العربية</option>
<option value="/fa/" >فارسی</option>
<option value="/he/" >עברית</option>
<option value="/hi/" >हिन्दी</option>
<option value="/ko/" >한국어</option>
<option value="/km/" >ខ្មែរ</option>
<option value="/ja/" >日本語</option>
<option value="/zh_CN/" >简体中文</option>
<option value="/zh_TW/" >繁體中文</option>
</select>
<span class="center-select__text">Language: <span class="is-capital">en</span></span>
</label>
</div>
</div></div>
<div class="body">
<div class="breadcrumbs">
<div class="container">
</div>
</div>
<div id="content" class="content">
<div class="mainhero">
<div class="container hero-container">
<p class="mainsummary">Bitcoin is an innovative payment network and a new kind of money.</p>
<div class="btn-container">
<a class="btn btn-bright btn-home" href="/en/getting-started">Get started with Bitcoin</a>
<a class="btn btn-light btn-home" href="/en/choose-your-wallet">Choose your wallet</a>
<a id="buybitcoinbutton" class="btn btn-light btn-home" href="/en/buy">Buy Bitcoin</a>
</div>
<div class="mainvideo">
<button class="mainvideo-btn-open" onclick="loadYoutubeVideo(event);" ontouchstart="loadYoutubeVideo(event);" data-youtubeurl="//www.youtube.com/embed/Gc2en3nHxA4?rel=0&amp;showinfo=0&amp;wmode=opaque&amp;autoplay=1">What is Bitcoin?</button>
</div>
</div>
</div>
<div class="mainoverview">
<div class="container">
<div class="mainoverview-title">Get a quick overview for</div>
<a href="/en/bitcoin-for-individuals" class="maincard">
<img class="maincard-img" src="/img/icons/ico_individuals.svg?1736694469" alt="Icon">
<div>
<p class="maincard-title">Individuals</p>
<p class="maincard-link">Learn more</p>
</div>
</a>
<a href="/en/bitcoin-for-businesses" class="maincard">
<img class="maincard-img" src="/img/icons/ico_business.svg?1736694469" alt="Icon">
<div>
<p class="maincard-title">Businesses</p>
<p class="maincard-link">Learn more</p>
</div>
</a>
<a href="https://developer.bitcoin.org/" class="maincard">
<img class="maincard-img" src="/img/icons/ico_developers.svg?1736694469" alt="Icon">
<div>
<p class="maincard-title">Developers</p>
<p class="maincard-link">Learn more</p>
</div>
</a>
</div>
<a class="btn-down" href="#maindesc-title">
<img src="/img/icons/ico_arrow_down.svg?1736694469" alt="Link">
</a>
</div>
<div class="maindesc">
<div class="container">
<p class="section-title center home-title" id="maindesc-title">Get started with Bitcoin</p>
<div class="row maindesc-row">
<div>
<p class="maindesc-text">Bitcoin uses peer-to-peer technology to operate with no central authority or banks; managing transactions and the issuing of bitcoins is carried out collectively by the network. <b>Bitcoin is open-source; its design is public, nobody owns or controls Bitcoin and <a href="/en/support-bitcoin">everyone can take part</a></b>. Through many of its unique properties, Bitcoin allows exciting uses that could not be covered by any previous payment system.</p>
<ul class="mainlist">
<li class="mainlist-item">
<img src="/img/icons/main_ico_instant.svg?1736694469" alt="Icon">
<p>Fast peer-to-peer transactions</p>
</li>
<li class="mainlist-item">
<img src="/img/icons/main_ico_worldwide.svg?1736694469" alt="Icon">
<p>Worldwide payments</p>
</li>
<li class="mainlist-item">
<img src="/img/icons/main_ico_lowfee.svg?1736694469" alt="Icon">
<p>Low processing fees</p>
</li>
</ul>
</div>
<img class="maindesc-img" src="/img/home/bitcoin-img.svg?1736694469" alt="Bitcoin image">
</div>
<div class="btn-container">
<a class="btn btn-dark btn-home center" href="/en/getting-started">Get started with Bitcoin</a>
</div>
</div>
</div>
<!-- Youtube popup video -->
<div class="modal closed">
<iframe class="modal-video" allowfullscreen="" frameborder="0">
</iframe>
<button class="mainvideo-btn-close" onclick="loadYoutubeVideo(event);" ontouchstart="loadYoutubeVideo(event);"></button>
</div>
<div class="modal-overlay closed">
</div>
</div>
<div class="footer">
<div class="container">
<a class="logo-footer" href="/en/">
<img src="/img/icons/logo-footer.svg?1736694469" alt="Bitcoin">
</a>
<div class="row footer-row">
<div class="donate">
<div class="row donate-row">
<div>
<span class="footer-title">Support Bitcoin.org:</span>
<a onclick="openDonationModal()" class="donate-btn btn-bright">Donate</a>
<p class="donate-text">
<a class="donate-link" href="bitcoin:bc1qx3u4njquj0ux63030r4nat8awqrlm0x2zlt96h" target="_blank">bc1qx3u4njquj0ux63030r4nat8awqrlm0x2zlt96h</a>
</p>
</div>
</div>
</div>
<div class="row footermenu">
<div class="footermenu-item footermenu-introduction">
<p class="footer-title">Introduction:</p>
<ul class="footermenu-list">
<li>
<a href="/en/bitcoin-for-individuals">Individuals</a>
</li>
<li>
<a href="/en/bitcoin-for-businesses">Businesses</a>
</li>
<li>
<a href="https://developer.bitcoin.org/">Developers</a>
</li>
<li>
<a href="/en/getting-started">Getting started</a>
</li>
<li>
<a href="/en/how-it-works">How it works</a>
</li>
<li>
<a href="/en/you-need-to-know">You need to know</a>
</li>
<li>
<a href="/en/bitcoin-paper">White paper</a>
</li>
</ul>
</div>
<div class="footermenu-item footermenu-resources">
<p class="footer-title">Resources:</p>
<ul class="footermenu-list">
<li>
<a href="/en/resources">Resources</a>
<li>
<a href="/en/exchanges">Exchanges</a>
</li>
<li>
<a href="/en/community">Community</a>
</li>
<li>
<a href="/en/vocabulary">Vocabulary
</a>
</li>
<li>
<a href="/en/events">Events</a>
</li>
<li>
<a href="/en/bitcoin-core/">Bitcoin Core</a>
</li>
</ul>
</div>
<div class="footermenu-item footermenu-participate">
<p class="footer-title">Participate:</p>
<ul class="footermenu-list">
<li>
<a href="/en/support-bitcoin">Support Bitcoin</a>
<li id="buybitcoinfootermenulink" >
<a href="/en/buy">Buy Bitcoin</a>
</li>
<li>
<a href="/en/full-node">Running a full node</a>
</li>
<li>
<a href="/en/development">Development</a>
</li>
</ul>
</div>
<div class="footermenu-item footermenu-other">
<p class="footer-title">Other:</p>
<a href="/en/scams">Avoid Scams</a>
<a href="/en/legal">Legal</a>
<a href="/en/privacy">Privacy Policy</a>
<a href="/en/press">Press</a>
<a href="/en/about-us">About bitcoin.org</a>
<a href="/en/blog">Blog</a>
</div>
</div>
</div>
<div class="footersponsor">
<!--<div><span>A community website sponsored by</span> <a href="https://bitcoinfoundation.org/"><img src="/img/brand/bitcoinfoundation.png?1736694469" alt="Bitcoin Foundation"></a></div>-->
</div>
</div>
<div class="footer-bottom">
<div class="container">
<div class="row footer-bottom-row">
<div class="footerlicense">© Bitcoin Project 2009-2025 Released under the <a href="http://opensource.org/licenses/mit-license.php" target="_blank">MIT license</a></div>
<div class="row footer-status-block">
<a href="/en/alerts" class="statusmenu">Network Status</a>
<ul class="lang is-expand">
<li><a>English</a>
<ul>
<li><ul>
<li><a href="/id/">Bahasa Indonesia</a></li>
<li><a href="/ca/">Català</a></li>
<li><a href="/da/">Dansk</a></li>
<li><a href="/de/">Deutsch</a></li>
<li><a href="/en/" class="active">English</a></li>
<li><a href="/es/">Español</a></li>
<li><a href="/fr/">Français</a></li>
<li><a href="/it/">Italiano</a></li>
<li><a href="/hu/">Magyar</a></li>
<li><a href="/nl/">Nederlands</a></li>
<li><a href="/pl/">Polski</a></li>
<li><a href="/pt_BR/">Português Brasil</a></li>
<li><a href="/ro/">Română</a></li>
<li><a href="/sl/">Slovenščina</a></li>
<li><a href="/sr/">Srpski</a></li>
<li><a href="/sv/">Svenska</a></li>
</ul></li><li><ul>
<li><a href="/tr/">Türkçe</a></li>
<li><a href="/el/">Ελληνικά</a></li>
<li><a href="/bg/">български</a></li>
<li><a href="/ru/">Русский</a></li>
<li><a href="/uk/">Українська</a></li>
<li><a href="/hy/">Հայերեն</a></li>
<li><a href="/ar/">العربية</a></li>
<li><a href="/fa/">فارسی</a></li>
<li><a href="/he/">עברית</a></li>
<li><a href="/hi/">हिन्दी</a></li>
<li><a href="/ko/">한국어</a></li>
<li><a href="/km/">ខ្មែរ</a></li>
<li><a href="/ja/">日本語</a></li>
<li><a href="/zh_CN/">简体中文</a></li>
<li><a href="/zh_TW/">繁體中文</a></li>
</ul></li>
</ul>
</li>
</ul>
<div id="footer-langselect" class="footer-langselect langselect">
<label for="select-input-footer" class="center-select">
<select class="center-select__input" onchange="window.location=this.value; ">
<option value="/id/" >Bahasa Indonesia</option>
<option value="/ca/" >Català</option>
<option value="/da/" >Dansk</option>
<option value="/de/" >Deutsch</option>
<option value="/en/" selected="selected">English</option>
<option value="/es/" >Español</option>
<option value="/fr/" >Français</option>
<option value="/it/" >Italiano</option>
<option value="/hu/" >Magyar</option>
<option value="/nl/" >Nederlands</option>
<option value="/pl/" >Polski</option>
<option value="/pt_BR/" >Português Brasil</option>
<option value="/ro/" >Română</option>
<option value="/sl/" >Slovenščina</option>
<option value="/sr/" >Srpski</option>
<option value="/sv/" >Svenska</option>
<option value="/tr/" >Türkçe</option>
<option value="/el/" >Ελληνικά</option>
<option value="/bg/" >български</option>
<option value="/ru/" >Русский</option>
<option value="/uk/" >Українська</option>
<option value="/hy/" >Հայերեն</option>
<option value="/ar/" >العربية</option>
<option value="/fa/" >فارسی</option>
<option value="/he/" >עברית</option>
<option value="/hi/" >हिन्दी</option>
<option value="/ko/" >한국어</option>
<option value="/km/" >ខ្មែរ</option>
<option value="/ja/" >日本語</option>
<option value="/zh_CN/" >简体中文</option>
<option value="/zh_TW/" >繁體中文</option>
</select>
<span class="center-select__text">en</span>
</label>
</div>
</div>
<!-- <div class="row"> -->
<!-- </div> -->
</div>
</div>
</div>
</div>
</div>
<script type="text/javascript">
fallbackSVG();
addAnchorLinks();
trackOutgoingLinks();
toggleDarkMode();
handlePageRedirect( false )
</script>
</body>
</html>

929
tests/bitcoincash_org.html Normal file
View file

@ -0,0 +1,929 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Bitcoin Cash - Peer-to-Peer Electronic Cash</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Bitcoin Cash brings sound money to the world. Merchants and users are empowered with low fees and reliable confirmations. The future shines brightly with unrestricted growth, global adoption, permissionless innovation, and decentralized development.">
<meta name="thumbnail" content="https://www.bitcoincash.org/img/bitcoincash-twitter.webp">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Bitcoin Cash - Peer-to-Peer Electronic Cash">
<meta name="twitter:description" content="Bitcoin Cash brings sound money to the world. Merchants and users are empowered with low fees and reliable confirmations. The future shines brightly with unrestricted growth, global adoption, permissionless innovation, and decentralized development.">
<meta name="twitter:image" content="https://www.bitcoincash.org/img/bitcoincash-twitter.webp">
<meta property="og:title" content="Bitcoin Cash - Peer-to-Peer Electronic Cash">
<meta property="og:description" content="Bitcoin Cash brings sound money to the world. Merchants and users are empowered with low fees and reliable confirmations. The future shines brightly with unrestricted growth, global adoption, permissionless innovation, and decentralized development.">
<meta property="og:image" content="https://www.bitcoincash.org/img/bitcoincash-twitter.webp">
<link rel="preconnect" href="https://fonts.gstatic.com" />
<link href="/css/deps.min.css?v=de5bdd7bd03cbe6464b5b2de3773fb3cdb17bf5bd81452c3150ee19bf42c8ef1" rel="stylesheet" type="text/css" media="all" />
<link href="/css/theme.min.css?v=fc07cc98d3f445db475f2de9c2606f0c12765f270607d0cd60d751aeb522eec8" rel="stylesheet" type="text/css" media="all" />
<link href="https://fonts.googleapis.com/css2?family=Ubuntu:ital,wght@0,300;0,400;0,500;0,700;1,300;1,400;1,500;1,700&display=swap" rel="stylesheet" type="text/css" media="all" />
<script async src="https://www.googletagmanager.com/gtag/js?id=G-4P1RG1J9TQ"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-4P1RG1J9TQ');
</script>
</head>
<body>
<a id="start"></a>
<header id="fh5co-header">
<div class="container">
<nav class="navbar navbar-default">
<div class="navbar-header">
<a href="#" id="expander" class="js-fh5co-nav-toggle fh5co-nav-toggle" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"><i></i></a>
<a class="navbar-brand" href="/">
<img loading="lazy" src="/img/bitcoin-cash-logo-horizontal-wt.svg" alt="Bitcoin Cash" class="lightit">
<img loading="lazy" src="/img/bitcoin-cash-logo-horizontal.svg" alt="Bitcoin Cash" class="darkit">
</a>
</div>
<div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav navbar-right homepage">
<li>
<a href="#about" data-nav-section="about" class="inner-link">
<span>About</span>
</a>
</li>
<li>
<a href="#wallets" data-nav-section="wallets" class="inner-link">
<span>Wallets</span>
</a>
</li>
<li>
<a href="#why" data-nav-section="why" class="inner-link">
<span>Benefits</span>
</a>
</li>
<li>
<a href="#nodes" data-nav-section="nodes" class="inner-link">
<span>Nodes</span>
</a>
</li>
<li class="dropdown">
<span class="dropdown__trigger">Community</span>
<div class="dropdown__container">
<div class="container">
<div class="row">
<div class="dropdown__content col-md-3 col-sm-3">
<ul class="menu-vertical">
<li>
<a href="#services" data-nav-section="services" class="inner-link">
Services
</a>
</li>
<li>
<a href="#projects" data-nav-section="projects" class="inner-link">
Projects
</a>
</li>
<li>
<a href="#exchanges" data-nav-section="exchanges" class="inner-link">
Exchanges
</a>
</li>
<li>
<a href="graphics/" class="external">
Logos / Graphics
</a>
</li>
</ul>
</div>
</div>
</div>
</div>
</li>
<li class="dropdown">
<span class="dropdown__trigger">English</span>
<div class="dropdown__container">
<div class="container">
<div class="row">
<div class="dropdown__content lang-menu">
<ul class="menu-vertical">
<li>
<a href="/id/" class="external">
Bahasa Indonesia
</a>
</li>
<li>
<a href="/ms/" class="external">
Bahasa Melayu
</a>
</li>
<li>
<a href="/de/" class="external">
Deutsch
</a>
</li>
<li>
<a href="/de-ch/" class="external">
Deutsch Schweiz
</a>
</li>
<li>
<a href="/en/" class="external">
English
</a>
</li>
<li>
<a href="/es/" class="external">
Español
</a>
</li>
<li>
<a href="/fil/" class="external">
Filipino
</a>
</li>
<li>
<a href="/fr/" class="external">
Français
</a>
</li>
</ul>
<ul class="menu-vertical">
<li>
<a href="/it/" class="external">
Italiano
</a>
</li>
<li>
<a href="/hu/" class="external">
Magyar
</a>
</li>
<li>
<a href="/nl/" class="external">
Nederlands
</a>
</li>
<li>
<a href="/pl/" class="external">
Polski
</a>
</li>
<li>
<a href="/pt-br/" class="external">
Português (BR)
</a>
</li>
<li>
<a href="/pt-pt/" class="external">
Português Portugal
</a>
</li>
<li>
<a href="/sk/" class="external">
Slovenčina
</a>
</li>
<li>
<a href="/vi/" class="external">
Tiếng Việt
</a>
</li>
</ul>
<ul class="menu-vertical">
<li>
<a href="/tr/" class="external">
Türkçe
</a>
</li>
<li>
<a href="/cs/" class="external">
Čeština
</a>
</li>
<li>
<a href="/el/" class="external">
ελληνικά
</a>
</li>
<li>
<a href="/ru/" class="external">
Русский
</a>
</li>
<li>
<a href="/uk/" class="external">
Українська
</a>
</li>
<li>
<a href="/ar/" class="external">
العربية
</a>
</li>
<li>
<a href="/fa/" class="external">
فارسی
</a>
</li>
<li>
<a href="/hi/" class="external">
हिन्दी
</a>
</li>
</ul>
<ul class="menu-vertical">
<li>
<a href="/th/" class="external">
ภาษาไทย
</a>
</li>
<li>
<a href="/ja/" class="external">
日本語
</a>
</li>
<li>
<a href="/zh-cn/" class="external">
简体中文
</a>
</li>
<li>
<a href="/zh-tw/" class="external">
繁體中文
</a>
</li>
<li>
<a href="/ko/" class="external">
한국어
</a>
</li>
</ul>
</div>
</div>
</div>
</div>
</li>
</ul>
</div>
</nav>
</div>
</header>
<section id="fh5co-home" data-section="home" class="home site-header">
<div class="container">
<div class="row">
<div class="col-xs-8 col-xs-offset-2 col-sm-6 col-sm-offset-3 col-md-4 col-md-offset-4 text-center hero-logo">
<img loading="lazy" alt="Bitcoin Cash" src="/img/bitcoin-cash-logo-wt.svg">
<h1 class="lead">
Peer-to-Peer Electronic Cash
</h1>
</div>
</div>
<div class="row">
<div class="col-sm-12 ticker text-center">
<span id="ticker_value">Loading...</span>
</div>
</div>
</div>
<div class="gap"></div>
</section>
<div class="main-container" id="home-section">
<section class="space--xxs no-bottom" id="about-section" data-section="about">
<div class="container benefits">
<div class="row text-center">
<div class="col-sm-4 col-md-4">
<p><i class="fa fa-bolt fa-fw fa-2x"></i></p>
<p><strong>Fast</strong></p>
<p>Transact in seconds. Get confirmed in minutes.</p>
</div>
<div class="col-sm-4 col-md-4">
<p><i class="fa fa-thumbs-up fa-fw fa-2x"></i></p>
<p><strong>Reliable</strong></p>
<p>A network that runs without congestion.</p>
</div>
<div class="col-sm-4 col-md-4">
<p><i class="fa fa-arrow-alt-circle-down fa-fw fa-2x"></i></p>
<p><strong>Low Fees</strong></p>
<p>Send money globally for pennies.</p>
</div>
</div>
<div class="row text-center">
<div class="col-sm-4 col-md-4">
<p><i class="fa fa-check fa-fw fa-2x"></i></p>
<p><strong>Simple</strong></p>
<p>Easy to use. No hassles.</p>
</div>
<div class="col-sm-4 col-md-4">
<p><i class="fa fa-cubes fa-fw fa-2x"></i></p>
<p><strong>Stable</strong></p>
<p>A payment system that's a proven store of value.</p>
</div>
<div class="col-sm-4 col-md-4">
<p><i class="fa fa-lock fa-fw fa-2x"></i></p>
<p><strong>Secure</strong></p>
<p>World's most robust blockchain technology.</p>
</div>
</div>
</div>
</section>
<a id="about"></a>
<section class="space--xxs" data-section="about2" id="about2-section">
<div class="container">
<div class="row text-center section-heading">
<div class='col-sm-12'>
<h2>The Best Money in the World</h2>
</div>
</div>
<div class="row">
<div class="col-sm-12 col-md-12">
<p>Bitcoin Cash brings sound money to the world, fulfilling the original promise of Bitcoin as "Peer-to-Peer Electronic Cash". Merchants and users are empowered with low fees and reliable confirmations. The future shines brightly with unrestricted growth, global adoption, permissionless innovation, and decentralized development.</p>
<p>All are welcome to join the Bitcoin Cash community as we move forward in creating sound money accessible to the whole world.</p>
</div>
</div>
</div>
</section>
<a id="wallets"></a>
<section class="space--xxs text-center gray border-bottom" id="wallets-section" data-section="wallets">
<div class="container wallets">
<div class="row">
<div class="col-xs-12 section-heading ">
<h2>Wallets</h2>
</div>
</div>
<div class="row">
<div class="col-sm-6 col-md-3 vertical-align">
<a href="https://electroncash.org/" target="_blank"><img loading="lazy" alt="Electron Cash" src="/img/wallets/electroncash.webp"></a>
</div>
<div class="col-sm-6 col-md-3 vertical-align">
<a href="https://cashonize.com/" target="_blank"><img loading="lazy" alt="Cashonize" src="/img/wallets/cashonize.webp"></a>
</div>
<div class="col-sm-6 col-md-3 vertical-align">
<a href="https://www.paytaca.com/" target="_blank"><img loading="lazy" alt="Paytaca" src="/img/wallets/paytaca.svg"></a>
</div>
<div class="col-sm-6 col-md-3 vertical-align">
<a href="https://zapit.io/" target="_blank"><img loading="lazy" alt="Zapit" src="/img/wallets/zapit.webp"></a>
</div>
<div class="col-sm-6 col-md-3 vertical-align">
<a href="https://wallet.bitcoin.com/" target="_blank"><img loading="lazy" alt="Bitcoin.com" src="/img/wallets/bitcoindotcom.webp"></a>
</div>
<div class="col-sm-6 col-md-3 vertical-align">
<a href="https://selene.cash/" target="_blank"><img loading="lazy" alt="Selene" src="/img/wallets/selene.webp"></a>
</div>
<div class="col-sm-6 col-md-3 vertical-align">
<a href="https://edgesecure.co/" target="_blank"><img loading="lazy" alt="Edge" src="/img/wallets/edge.webp"></a>
</div>
<div class="col-sm-6 col-md-3 vertical-align">
<a href="https://stackwallet.com/" target="_blank"><img loading="lazy" alt="Stack Wallet" src="/img/wallets/stack.webp"></a>
</div>
<div class="col-sm-6 col-md-3 vertical-align">
<a href="https://cakewallet.com/" target="_blank"><img loading="lazy" alt="Cake Wallet" src="/img/wallets/cake.webp"></a>
</div>
<div class="col-sm-6 col-md-3 vertical-align">
<a href="https://flowee.org/products/pay/" target="_blank"><img loading="lazy" alt="Flowee Pay" src="/img/wallets/floweepay.webp"></a>
</div>
<div class="col-sm-6 col-md-3 vertical-align">
<a href="https://bitpay.com/wallet" target="_blank"><img loading="lazy" alt="Bitpay Wallet" src="/img/wallets/bitpay.webp"></a>
</div>
<div class="col-sm-6 col-md-3 vertical-align">
<a href="http://www.ledgerwallet.com/" target="_blank"><img loading="lazy" alt="Ledger" src="/img/wallets/ledger.webp"></a>
</div>
<div class="col-sm-6 col-md-3 vertical-align">
<a href="https://wallet.trezor.io/" target="_blank"><img loading="lazy" alt="Trezor" src="/img/wallets/trezor.webp"></a>
</div>
<div class="col-sm-6 col-md-3 vertical-align">
<a href="https://shapeshift.com/keepkey" target="_blank"><img loading="lazy" alt="KeepKey" src="/img/wallets/keepkey.webp"></a>
</div>
<div class="col-sm-6 col-md-3 vertical-align">
<a href="https://satochip.io/" target="_blank"><img loading="lazy" alt="KeepKey" src="/img/wallets/satochip.webp"></a>
</div>
<div class="col-sm-6 col-md-3 vertical-align">
<a href="https://xdefi.io" target="_blank"><img loading="lazy" alt="XDEFI Wallet" src="/img/wallets/xdefi.webp"></a>
</div>
<div class="col-sm-6 col-md-3 vertical-align">
<a href="https://www.exodus.io/" target="_blank"><img loading="lazy" alt="Exodus" src="/img/wallets/exodus.webp"></a>
</div>
<div class="col-sm-6 col-md-3 vertical-align">
<a href="https://viawallet.com/" target="_blank"><img loading="lazy" alt="ViaWallet" src="/img/wallets/viawallet.webp"></a>
</div>
<div class="col-sm-6 col-md-3 vertical-align">
<a href="https://coin.space/" target="_blank"><img loading="lazy" alt="Coin Space" src="/img/wallets/coinspace.webp"></a>
</div>
<div class="col-sm-6 col-md-3 vertical-align">
<a href="https://guarda.com/" target="_blank"><img loading="lazy" alt="Guarda Wallet" src="/img/wallets/guarda.webp"></a>
</div>
<div class="col-sm-6 col-md-3 vertical-align">
<a href="https://coinomi.com/" target="_blank"><img loading="lazy" alt="Coinomi" src="/img/wallets/coinomi.webp"></a>
</div>
<div class="col-sm-6 col-md-3 vertical-align">
<a href="https://cashaddress.org/" target="_blank"><img loading="lazy" alt="Cash Address" src="/img/wallets/cashaddress.webp"></a>
</div>
</div>
</div>
</section>
<a id="why"></a>
<section class="space--xxs" id="why-section" data-section="why">
<div class="container">
<div class="row text-center">
<div class="col-xs-12 section-heading">
<h2>Why Use Bitcoin Cash?</h2>
</div>
</div>
<div class="row">
<div class="col-xs-12">
<p class="question">Send Money Anywhere In the World, Almost for Free</p>
<p>With Bitcoin Cash, you can send money to anyone, anywhere in the world, 24 hours a day, 365 days a year. Like the Internet itself, the network is always on. No transaction is too big or too small. And you never need anyone’s permission or approval.</p>
<p class="question">Be Your Own Bank and Have Full Control Over Your Money</p>
<p>The seizing of capital from account holders (“bail-ins”) that occurred in Cyprus and nearly in Greece, demonstrated that bank deposits are only as safe as political leaders decide. Even under the best of conditions, banks can make mistakes, hold funds, freeze accounts, and otherwise prevent you from accessing your own money.</p>
<p>Banks can also decide to block your transactions, charge you fees, or close your account without warning. Bitcoin Cash gives you full, sovereign control over your funds, which you can access from anywhere in the world.</p>
<p class="question">A Scarce Digital Currency with a Known, Fixed Supply</p>
<p>The Bitcoin Cash protocol ensures there will never be more than 21 million coins in existence. Governments constantly print money out of thin air, endlessly inflating the supply and devaluing everyone’s savings. Bitcoin Cash has a fixed supply and therefore represents sound money.</p>
<p class="question">Increase Your Privacy and Operate Anonymously</p>
<p>Bitcoin Cash offers more privacy and anonymity than traditional payment systems like bank transfers and credit card payments, since it’s normally impossible to know who controls a Bitcoin address.</p>
<p>Bitcoin Cash offers various levels of privacy depending on how it is used. It’s important to educate yourself thoroughly before using BCH for privacy purposes.</p>
<p class="question">Enjoy Exclusive Discounts</p>
<p>Many merchants offer discounts for paying in Bitcoin Cash, because it eliminates credit card fees and helps grow the adoption of this new payment system.</p>
<p class="question">Token Ecosystem</p>
<p>Storing and managing tokens on a blockchain provides greater transparency and integrity than traditional forms of asset accounting and trading. Bitcoin Cash supports token protocols that power a variety of projects, and it is easy to create your own token backed projects.</p>
<p class="question">Support Freedom Worldwide</p>
<p>Bitcoin Cash is a permissionless, open network. It empowers you to engage with your fellow human beings without intrusion. It’s decentralized, voluntary, and non-aggressive. As usage grows, old power structures will erode while fresh ideas blossom. It may help usher in the greatest peaceful revolution the world has ever known.</p>
</div>
</div>
</div>
</section>
<section class="space--xxs" id="merchant-benefits-section" data-section="benefits">
<div class="container">
<div class="row text-center">
<div class="col-xs-12 section-heading">
<h2>Benefits for Merchants</h2>
</div>
</div>
<div class="row">
<div class="col-xs-12">
<p class="question">Ultra Low Fees</p>
<p>The network fee for a typical Bitcoin Cash transaction is less than one penny. If you want to convert your BCH into fiat currency, such as US dollars, you can do that through merchant processors for a cost that is still much lower than credit card processing.</p>
<p class="question">No Chargebacks</p>
<p>Unlike credit cards, there are never any automatic voids, refunds, chargebacks, or other unexpected fees. Fraud protection is built into the system with no cost to the merchant.</p>
<p class="question">New Customers</p>
<p>A growing number of patrons are choosing Bitcoin Cash as a preferred payment method. They favor merchants who offer this payment option and actively seek them out.</p>
<p class="question">Free Marketing and Press</p>
<p>By accepting Bitcoin Cash, merchants can gain free listings in website and app directories, gaining even more customers. They can also take advantage of this new trend and generate press for their business.</p>
</div>
</div>
</div>
</section>
<section class="space--xxs" id="history-section" data-section="history">
<div class="container">
<div class="row text-center">
<div class='col-sm-12 section-heading '>
<h2>The History of Bitcoin Cash</h2>
</div>
</div>
<div class="row">
<div class="col-sm-12 col-md-12">
<p>In October 2008, Satoshi Nakamoto published the famous whitepaper entitled <a target="_blank" href="https://bitcoincash.org/bitcoin.pdf"><strong><q>Bitcoin: A Peer to Peer Electronic Cash System</q></strong></a>. In 2009, he released the first bitcoin software that powered the network, and it operated smoothly for several years with low fees, and fast, reliable transactions.</p>
<p>Unfortunately, from 2016 to 2017, Bitcoin became increasingly unreliable and expensive. This was because the community could not reach consensus on increasing the network capacity. Some of the developers did not understand and agree with Satoshi’s plan. Instead, they preferred Bitcoin become a settlement layer.</p>
<p>By 2017, Bitcoin dominance had plummeted from 95% to as low as 40% as a direct result of the usability problems. Fortunately, a large portion of the Bitcoin community, including developers, investors, users, and businesses, still believed in the original vision of Bitcoin -- a low fee, peer to peer electronic cash system that could be used by all the people of the world.</p>
<p>On August 1st, 2017, we took the logical step of increasing the maximum block size, and Bitcoin Cash was born. Anyone who held Bitcoin at that time (block 478558) became an owner of Bitcoin Cash (BCH). The network now supports up to 32MB blocks with ongoing research to allow massive future increases.</p>
</div>
</div>
</div>
</section>
<section class="space--xxs" id="development-section" data-section="development">
<div class="container">
<div class="row text-center">
<div class='col-sm-12 section-heading '>
<h2>Decentralized Development</h2>
</div>
</div>
<div class="row">
<div class="col-sm-12 col-md-12">
<p>With multiple independent teams of developers providing software implementations, the future is secure. Bitcoin Cash is resistant to political and social attacks on protocol development. No single group or project can control it. Multiple implementations also provides redundancy to ensure that the network retains 100% uptime.</p>
<p>The <a href="https://bitcoincashresearch.org" target="_blank">bitcoincashresearch.org</a> website is a good venue for making proposals for changes that require coordination across development teams. For those wishing to implement changes to the Bitcoin Cash protocol, it is recommended to seek early peer-review and engage collaboratively with other developers.</p>
<p>If you are interested in helping with translations, then please check out our <a href="https://crowdin.com/project/bitcoin-cash" target="_blank">CrowdIn project</a>. Remember, we only accept human translations, any automated translations will be rejected.</p>
</div>
</div>
</div>
</section>
<a id="nodes"></a>
<section class="space--xxs text-center gray border-bottom" id="nodes-section" data-section="nodes">
<div class="container nodes">
<div class="row">
<div class="col-xs-12 section-heading ">
<h2>Nodes</h2>
</div>
</div>
<div class="row">
<div class="col-sm-6 col-md-6 vertical-align">
<a href="https://bitcoincashnode.org" target="_blank"><img loading="lazy" alt="Bitcoin Cash Node" src="/img/wallets/bitcoincashnode.webp"></a>
</div>
<div class="col-sm-6 col-md-6 vertical-align">
<a href="https://www.bitcoinunlimited.info" target="_blank"><img loading="lazy" alt="Bitcoin Unlimited" src="/img/wallets/bitcoinunlimited.webp"></a>
</div>
<div class="col-sm-6 col-md-6 vertical-align">
<a href="https://bchd.cash" target="_blank"><img loading="lazy" alt="BCHD" src="/img/wallets/bchd.webp"></a>
</div>
<div class="col-sm-6 col-md-6 vertical-align">
<a href="https://bitcoinverde.org" target="_blank"><img loading="lazy" alt="Bitcoin Verde" src="/img/wallets/bitcoinverde.webp"></a>
</div>
<div class="col-sm-6 col-md-6 vertical-align">
<a href="https://kth.cash" target="_blank"><img loading="lazy" alt="Knuth" src="/img/wallets/knuth.webp"></a>
</div>
<div class="col-sm-6 col-md-6 vertical-align">
<a href="https://github.com/PayButton/bchc" target="_blank"><img loading="lazy" alt="BCHC" src="/img/wallets/bchc.webp"></a>
</div>
</div>
</div>
</section>
<a id="services"></a>
<section class="space--xxs text-center gray border-bottom" id="services-section" data-section="services">
<div class="container services">
<div class="row">
<div class="col-xs-12 section-heading ">
<h2>Services</h2>
</div>
</div>
<div class="row">
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://bchbull.com" target="_blank"><img loading="lazy" alt="BCH Bull" src="/img/services/bchbull.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://bitpay.com" target="_blank"><img loading="lazy" alt="Bitpay" src="/img/wallets/bitpay.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://apirone.com/" target="_blank"><img loading="lazy" alt="Apirone" src="/img/services/apirone.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://gocrypto.com/" target="_blank"><img loading="lazy" alt="GoCrypto" src="/img/services/gocrypto.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://map.bitcoin.com" target="_blank"><img loading="lazy" alt="Bitcoin.com Maps" src="/img/services/bitcoincommaps.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://www.bitgree.com/" target="_blank"><img loading="lazy" alt="Bitgree" src="/img/services/bitgree.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://read.cash/" target="_blank"><img loading="lazy" alt="read.cash" src="/img/services/readcash.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://noise.app/" target="_blank"><img loading="lazy" alt="noise.app" src="/img/services/noisecash.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://memo.cash/" target="_blank"><img loading="lazy" alt="memo.cash" src="/img/services/memocash.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://bch.games/" target="_blank"><img loading="lazy" alt="BCH.games" src="/img/services/bchgames.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://basepoker.com" target="_blank"><img loading="lazy" alt="BASEPOKER" src="/img/services/basepoker.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://cheapair.com/" target="_blank"><img loading="lazy" alt="CheapAir" src="/img/services/cheapair.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://namecheap.com/" target="_blank"><img loading="lazy" alt="Namecheap" src="/img/services/namecheap.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://blockchair.com/" target="_blank"><img loading="lazy" alt="Blockchair" src="/img/services/blockchair.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://cash.coin.dance/" target="_blank"><img loading="lazy" alt="Coin Dance" src="/img/services/coindance.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://txstreet.com/v/bch-btc" target="_blank"><img loading="lazy" alt="TxStreet" src="/img/services/txstreet.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://fork.lol" target="_blank"><img loading="lazy" alt="Fork.lol" src="/img/services/forklol.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://www.alfatop.me" target="_blank"><img loading="lazy" alt="ALFAtop" src="/img/services/alfatopme.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://alagoria.com/" target="_blank"><img loading="lazy" alt="Alagoria" src="/img/services/alagoria.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://satoshidice.com/" target="_blank"><img loading="lazy" alt="Satoshi Dice" src="/img/services/satoshidice.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://rocketr.net/" target="_blank"><img loading="lazy" alt="Rocketr" src="/img/services/rocketr.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://www.coinpayments.net/" target="_blank"><img loading="lazy" alt="CoinPayments" src="/img/services/coinpayments.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://coingate.com/" target="_blank"><img loading="lazy" alt="CoinGate" src="/img/services/coingate.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://gourl.io/" target="_blank"><img loading="lazy" alt="GoUrl" src="/img/services/gourl.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://www.alfacoins.com" target="_blank"><img loading="lazy" alt="ALFAcoins" src="/img/services/alfacoins.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://www.livingroomofsatoshi.com/?sc=bch" target="_blank"><img loading="lazy" alt="Living Room Of Satoshi" src="/img/services/livingroomofsatoshi.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://pompler.com" target="_blank"><img loading="lazy" alt="Pompler" src="/img/services/pompler.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://www.viabtc.com/" target="_blank"><img loading="lazy" alt="ViaBTC" src="/img/services/viabtc.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://simpleledger.info/" target="_blank"><img loading="lazy" alt="SLP Explorer" src="/img/services/slpexplorer.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://www.wmtransfer.com/" target="_blank"><img loading="lazy" alt="Web Money" src="/img/services/webmoney.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://bitcoin-india.org/" target="_blank"><img loading="lazy" alt="Bitcoin India" src="/img/services/bitcoinindia.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://www.menufy.com/" target="_blank"><img loading="lazy" alt="Menufy" src="/img/services/menufy.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://card.coinbase.com/" target="_blank"><img loading="lazy" alt="Coinbase Card" src="/img/services/coinbasecard.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://commerce.coinbase.com" target="_blank"><img loading="lazy" alt="Coinbase Commerce" src="/img/services/coinbasecommerce.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://nexo.io/" target="_blank"><img loading="lazy" alt="Nexo" src="/img/services/nexo.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://www.egifter.com/" target="_blank"><img loading="lazy" alt="eGifter" src="/img/services/egifter.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://prompt.cash/" target="_blank"><img loading="lazy" alt="Prompt.Cash" src="/img/services/promptcash.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://www.satoshisangels.com/" target="_blank"><img loading="lazy" alt="Satoshi's Angels" src="/img/services/satoshisangels.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://coinrabbit.io/" target="_blank"><img loading="lazy" alt="Coin Rabbit" src="/img/services/coinrabbit.svg"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://onlycoins.com/" target="_blank"><img loading="lazy" alt="Onlycoins" src="/img/services/onlycoins.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://zabo.com/" target="_blank"><img loading="lazy" alt="Zabo" src="/img/services/zabo.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://nowpayments.io/" target="_blank"><img loading="lazy" alt="NOWPayments" src="/img/services/nowpayments.svg"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://coinremitter.com/" target="_blank"><img loading="lazy" alt="Coinremitter" src="/img/services/coinremitter.webp"></a>
</div>
</div>
</div>
</section>
<a id="projects"></a>
<section class="space--xxs text-center gray border-bottom" id="projects-section" data-section="projects">
<div class="container services">
<div class="row">
<div class="col-xs-12 section-heading ">
<h2>Projects</h2>
</div>
</div>
<div class="row">
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://cashfusion.org/" target="_blank"><img loading="lazy" alt="CashFusion" src="/img/projects/cashfusion.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://cashtokens.org/" target="_blank"><img loading="lazy" alt="CashTokens" src="/img/projects/cashtokens.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://fulcrumserver.org/" target="_blank"><img loading="lazy" alt="Fulcrum" src="/img/projects/fulcrum.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://flipstarter.cash/" target="_blank"><img loading="lazy" alt="Flipstarter" src="/img/projects/flipstarter.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://cashscript.org/" target="_blank"><img loading="lazy" alt="CashScript" src="/img/projects/cashscript.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://anyhedge.com/" target="_blank"><img loading="lazy" alt="AnyHedge" src="/img/projects/anyhedge.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://chaingraph.cash/" target="_blank"><img loading="lazy" alt="Chaingraph" src="/img/projects/chaingraph.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://libauth.org/" target="_blank"><img loading="lazy" alt="Libauth" src="/img/projects/libauth.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://ide.bitauth.com/" target="_blank"><img loading="lazy" alt="Bitauth IDE" src="/img/projects/bitauth-ide.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://eatbch.org/" target="_blank"><img loading="lazy" alt="EatBCH" src="/img/projects/eatbch.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://slp.dev/" target="_blank"><img loading="lazy" alt="SLP Dev" src="/img/projects/slpdev.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://givecrypto.org/" target="_blank"><img loading="lazy" alt="GiveCrypto" src="/img/projects/givecrypto.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://bitcoincashresearch.org/" target="_blank"><img loading="lazy" alt="Bitcoin Cash Research" src="/img/projects/bitcoincashresearch.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://awesomebitcoin.cash/" target="_blank"><img loading="lazy" alt="Awesome Bitcoin Cash" src="/img/projects/awesomebitcoincash.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://fountainhead.cash/" target="_blank"><img loading="lazy" alt="Fountainhead" src="/img/projects/fountainhead.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://one.surgery/" target="_blank"><img loading="lazy" alt="One Surgery" src="/img/projects/onesurgery.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://spedn.pl/" target="_blank"><img loading="lazy" alt="Spedn" src="/img/projects/spedn.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://tapswap.cash/" target="_blank"><img loading="lazy" alt="TapSwap" src="/img/projects/tapswap.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://tokenaut.cash/" target="_blank"><img loading="lazy" alt="Tokenaut" src="/img/projects/tokenaut.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://nfts.bch.guru/" target="_blank"><img loading="lazy" alt="BCH.Guru" src="/img/projects/guru.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://ninjas.cash/" target="_blank"><img loading="lazy" alt="Cash-Ninjas" src="/img/projects/cashninjas.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://reapers.cash/" target="_blank"><img loading="lazy" alt="Reapers" src="/img/projects/reapers.webp"></a>
</div>
</div>
</div>
</section>
<a id="exchanges"></a>
<section class="space--xxs text-center gray" id="exchanges-section" data-section="exchanges">
<div class="container exchanges">
<div class="row">
<div class="col-xs-12 section-heading ">
<h2>Exchanges</h2>
</div>
</div>
<div class="row">
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://thorswap.finance/" target="_blank"><img loading="lazy" alt="THORSwap" src="/img/exchanges/thorswap.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://www.okx.com/" target="_blank"><img loading="lazy" alt="OKX" src="/img/exchanges/okx.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://www.coinbase.com/" target="_blank"><img loading="lazy" alt="Coinbase" src="/img/exchanges/coinbase.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://pro.coinbase.com/" target="_blank"><img loading="lazy" alt="Coinbase Pro" src="/img/exchanges/coinbasepro.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://www.binance.com/" target="_blank"><img loading="lazy" alt="Binance" src="/img/exchanges/binance.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://bit.com/" target="_blank"><img loading="lazy" alt="Bit" src="/img/exchanges/bit.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://www.kraken.com/" target="_blank"><img loading="lazy" alt="Kraken" src="/img/exchanges/kraken.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://www.etoro.com/" target="_blank"><img loading="lazy" alt="eToro" src="/img/exchanges/etoro.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://buda.com/" target="_blank"><img loading="lazy" alt="Buda" src="/img/exchanges/buda.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://gemini.com/" target="_blank"><img loading="lazy" alt="Gemini" src="/img/exchanges/gemini.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://uphold.com/" target="_blank"><img loading="lazy" alt="Uphold" src="/img/exchanges/uphold.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://sideshift.ai/" target="_blank"><img loading="lazy" alt="Sideshift AI" src="/img/exchanges/sideshiftai.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://shapeshift.io/" target="_blank"><img loading="lazy" alt="ShapeShift" src="/img/exchanges/shapeshift.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://www.coinex.com/" target="_blank"><img loading="lazy" alt="Coinex" src="/img/exchanges/coinex.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://cex.io/" target="_blank"><img loading="lazy" alt="Cexio" src="/img/exchanges/cexio.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://www.korbit.co.kr/" target="_blank"><img loading="lazy" alt="Korbit" src="/img/exchanges/korbit.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://www.btcbox.co.jp/" target="_blank"><img loading="lazy" alt="BtcBox" src="/img/exchanges/btcbox.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://changelly.com/" target="_blank"><img loading="lazy" alt="Changelly" src="/img/exchanges/changelly.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://btcpop.co/" target="_blank"><img loading="lazy" alt="BTCPOP" src="/img/exchanges/btcpop.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://hitbtc.com/" target="_blank"><img loading="lazy" alt="HitBTC" src="/img/exchanges/hitbtc.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://www.bithumb.com/" target="_blank"><img loading="lazy" alt="Bithumb" src="/img/exchanges/bithumb.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://bitcoinvn.io" target="_blank"><img loading="lazy" alt="BitcoinVN" src="/img/exchanges/bitcoinvietnam.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://coinone.co.kr/" target="_blank"><img loading="lazy" alt="Coinone" src="/img/exchanges/coinone.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://simplefx.com/" target="_blank"><img loading="lazy" alt="SimpleFX" src="/img/exchanges/simplefx.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://bitflyer.jp/" target="_blank"><img loading="lazy" alt="bitFlyer" src="/img/exchanges/bitflyer.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://poloniex.com/" target="_blank"><img loading="lazy" alt="Poloniex" src="/img/exchanges/poloniex.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://www.bitcoin.de/" target="_blank"><img loading="lazy" alt="Bitcoin.de" src="/img/exchanges/bitcoinde.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://karsha.biz/" target="_blank"><img loading="lazy" alt="Karsha Exchange" src="/img/exchanges/karsha.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://www.independentreserve.com/" target="_blank"><img loading="lazy" alt="Independent Reserve" src="/img/exchanges/independentreserve.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://changenow.io/" target="_blank"><img loading="lazy" alt="ChangeNOW" src="/img/exchanges/changenow.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://www.bitstamp.net/" target="_blank"><img loading="lazy" alt="Bitstamp" src="/img/exchanges/bitstamp.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://bestrate.org/" target="_blank"><img loading="lazy" alt="BestRate" src="/img/exchanges/bestrate.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://coinfalcon.com" target="_blank"><img loading="lazy" alt="CoinFalcon" src="/img/exchanges/coinfalcon.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://exmo.com" target="_blank"><img loading="lazy" alt="Exmo" src="/img/exchanges/exmo.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://coincheck.com" target="_blank"><img loading="lazy" alt="Coincheck" src="/img/exchanges/coincheck.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://crypto.com/" target="_blank"><img loading="lazy" alt="Crypto" src="/img/exchanges/crypto.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://www.matrixport.com/" target="_blank"><img loading="lazy" alt="Matrixport" src="/img/exchanges/matrixport.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://stealthex.io/" target="_blank"><img loading="lazy" alt="StealthEx" src="/img/exchanges/stealthex.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://bitvavo.com/en/bitcoin-cash" target="_blank"><img loading="lazy" alt="Bitvavo" src="/img/exchanges/bitvavo.webp"></a>
</div>
<div class="col-sm-4 col-md-3 vertical-align">
<a href="https://swapzone.io" target="_blank"><img loading="lazy" alt="Swapzone" src="/img/exchanges/swapzone.webp"></a>
</div>
<div class="col-sm-6 col-md-3 vertical-align">
<a href="https://www.whalesheaven.com/" target="_blank"><img loading="lazy" alt="WhalesHeaven" src="/img/exchanges/whalesheaven.webp"></a>
</div>
<div class="col-sm-6 col-md-3 vertical-align">
<a href="https://simpleswap.io" target="_blank"><img loading="lazy" alt="SimpleSwap" src="/img/exchanges/simpleswap_blue.svg"></a>
</div>
<div class="col-sm-6 col-md-3 vertical-align">
<a href="https://flashift.app" target="_blank"><img loading="lazy" alt="FLASHIFT" src="/img/exchanges/flashift.webp"></a>
</div>
</div>
</div>
</section>
<footer class="space--xs footer-1">
<div class="container">
<div class="row">
<div class="col-sm-6">
<span class="type--fine-print">&copy;<span class="update-year"></span> bitcoincash.org</span>
</div>
<div class="col-sm-6 text-right text-center-xs">
<ul class="social-list list-inline list--hover">
<li>
<a href="https://www.reddit.com/r/Bitcoincash/" target="_blank">
<i class="socicon socicon-reddit icon icon--xs"></i>
</a>
</li>
<li>
<a href="https://github.com/zquestz/bitcoincash" target="_blank">
<i class="socicon socicon-github icon icon--xs"></i>
</a>
</li>
</ul>
</div>
</div>
</div>
</footer>
</div>
<a class="back-to-top inner-link" href="#start" data-scroll-class="100vh:active">
<i class="stack-interface stack-up-open-big"></i>
</a>
<script src="/js/modernizr-2.6.2.min.js"></script>
<script src="/js/jquery.min.js"></script>
<script src="/js/ticker.min.js?v=cb6bbb443c634c283b18136d73fef86e015895664314e13ca3cf9e3ee37dcc19" async></script>
<script src="/js/fontawesome.min.js"></script>
<script src="/js/solid.min.js"></script>
<script src="/js/jquery.easing.1.3.min.js"></script>
<script src="/js/jquery.stellar.min.js"></script>
<script src="/js/jquery.waypoints.min.js"></script>
<script src="/js/smooth-scroll.min.js"></script>
<script src="/js/bootstrap.min.js"></script>
<script src="/js/scripts.min.js?v=141293ad3a5f4842cf2d21eff388ce5718a2cefc43445ea3bbb3ba419a9d1b93"></script>
</body>
</html>

247
tests/bitcoinsv_com.html Normal file
View file

@ -0,0 +1,247 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
<title>The Original Bitcoin Blockchain : Bitcoin SV (BSV)</title>
<meta name="description" content="Bitcoin SV is Fast, Scalable, Environmentally-efficient and Regulation-friendly. It is Bitcoin exactly as envisioned in Satoshi Nakamoto’s Bitcoin White Paper." />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:site" content="@BSVBlockchain" />
<meta name="twitter:creator" content="@BSVBlockchain" />
<meta property="og:title" content="The Original Bitcoin Blockchain : Bitcoin SV (BSV)" />
<meta property="og:description" content="Bitcoin SV is Fast, Scalable, Environmentally-efficient and Regulation-friendly. It is Bitcoin exactly as envisioned in Satoshi Nakamoto’s Bitcoin White Paper." />
<meta property="og:url" content="https://www.bitcoinsv.com" />
<meta property="og:image" content="images/NbKzG5x.png" />
<meta property="og:image:alt" content="BitcoinSV SEO Image" />
<meta property="og:image:type" content="image/jpeg" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta property="og:site_name" content="BitcoinSV" />
<link rel="canonical" href="https://www.bitcoinsv.com" />
<meta name="next-head-count" content="18" />
<link rel="preload" href="./70b889b5d4de457a.css" as="style" />
<link rel="stylesheet" href="./70b889b5d4de457a.css" data-n-g />
<noscript data-n-css></noscript>
</head>
<body>
<div id="__next">
<div translate="yes" class="relative" data-headlessui-state>
<div class="fixed top-0 left-0 right-0 z-20 backdrop-blur-md">
<div class="relative container-main">
<div class="flex items-center justify-between h-20 lg:py-0 sm:py-4">
<div class="z-10">
<div class="flex">
<span class="sr-only">BitcoinSV</span>
<div class="relative w-32 h-10 p-2 cursor-pointer sm:h-10">
<img alt="logo" loading="lazy" decoding="async" data-nimg="fill" class="w-auto mr-1" style="position: absolute; height: 100%; width: 100%; left: 0; top: 0; right: 0; bottom: 0; color: transparent" src="images/logo.svg" />
</div>
</div></a>
</div>
<div class="-my-2 lg:hidden">
<button class="inline-flex items-center justify-center p-2 text-gray-400 rounded-md hover:text-gray-100 hover:bg-gray-700/80" type="button" aria-expanded="false" data-headlessui-state>
<span class="sr-only">Open menu</span><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="true" data-slot="icon" class="w-6 h-6">
<path stroke-linecap="round" stroke-linejoin="round" d="M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5"></path>
</svg>
</button>
</div>
<a href="https://bsvblockchain.org"><button class="cursor-pointer bg-bitcoin-400 hover:bg-bitcoin-700 ease-in-out duration-300 font-bold text-sm rounded-sm text-center hidden py-[9px] px-[17px] shadow-sm lg:flex">
BSVblockchain.org
</button></a>
</div>
</div>
</div>
</div>
<div style="
position: fixed;
top: 1px;
left: 1px;
width: 1px;
height: 0;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border-width: 0;
display: none;
"></div>
<div class="bg-black">
<div>
<div class="bg-black bg-img min-h-screen">
<div class="z-50 bg-black hero-bg md:min-h-[900px] md:h-screen">
<div class="home-hero-main font-inter container-main">
<div class="pt-12 pb-10 md:pt-20">
<div class="flex justify-center md:justify-start sm:mt-14 top-10 lg:top-[83px] min-[916px]:absolute">
<div class="max-w-[626px] sm:mt-14 overflow-hidden">
<h1 class="mb-6 text-4xl sm:text-5xl font-bold text-white md:text-6xl">
Global Infrastructure On The Original
<br /><span class="font-semibold text-white">Bitcoin Blockchain</span>
</h1>
<div class="border-l-2 border-bitcoin-400">
<p class="text-xl pl-4 text-white leading-lh-30 max-w-[538px]">
Discover how Bitcoin SV (BSV) has delivered Satoshi’s vision of One Global Bitcoin blockchain. It’s fast, scalable, transformative,
efficient, and regulation-friendly (thus stable), setting many records along the way. BSV is a truly powerful blockchain.
</p>
</div>
<div class="flex flex-col items-start justify-start mt-12 space-y-10 text-white lg:justify-start sm:items-baseline sm:flex-row gap-x-12">
<a href="https://bsvblockchain.org">
<div class="flex items-center space-x-3.5 w-fit py-4 text-lg font-semibold text-black duration-500 rounded-sm px-7 hover:bg-gradient-to-r hover:from-bitcoin-500/30 hover:to-bitcoin-400/30 outline outline-2 outline-bitcoin-400/25 bg-bitcoin-400 cursor-pointer">
<svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="text-2xl" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg">
<circle cx="12" cy="12" r="2"></circle>
<path d="M16.24 7.76a6 6 0 0 1 0 8.49m-8.48-.01a6 6 0 0 1 0-8.49m11.31-2.82a10 10 0 0 1 0 14.14m-14.14 0a10 10 0 0 1 0-14.14"></path>
</svg><span>Main Page</span>
</div>
</a><a href="https://bsvblockchain.org/about">
<div class="flex items-center space-x-3 text-lg font-semibold text-white duration-500 rounded-sm cursor-pointer w-fit">
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg">
<path fill="none" stroke-miterlimit="10" stroke-width="32" d="M112 111v290c0 17.44 17 28.52 31 20.16l247.9-148.37c12.12-7.25 12.12-26.33 0-33.58L143 90.84c-14-8.36-31 2.72-31 20.16z"></path>
</svg><span class>Intro to BSV</span>
</div>
</a>
</div>
<div class="mt-[50px] mb-3 sm:ml-0"></div>
</div>
</div>
</div>
</div>
</div>
<div class="pt-16 md:pt-0">
<div class="bg-globe">
<div class="container-main lg:w-2/4 sm:max-md:w-11/12 pb-16">
<div class="lg:w-[732px] lg:h-[93.9px] px-3">
<h1 class="text-tertiery text-[28px] font-light uppercase md:text-[28px] text-center tracking-[5px]">The Timeline</h1>
</div>
<div class="exp md:max-lg:pl-10">
<div class="relative">
<div class="py-2.5 px-5 w-fit border border-stone-200 box-border">
<h4 class="text-tertiery text-sm text-400">8th January 2009</h4>
</div>
<div class="ml-[200px] w-[5%] top-[15px] absolute hidden md:block">
<div class="bg-white mr-[10px] rounded-[10px] w-[6px] h-[6px] text-[10px] text-center leading-[15px]"></div>
</div>
<div class="rounded-[3px] top-0 mb-30p mt-0 md:mt-[-50px] ml-0 md:ml-[250px] max-md:mt-3">
<div class="box-border text-sm tracking-[1px] text-stone-300 max-w-[438px]">
<h4 class="text-bitcoin-400 text-400 text-lg mb-2 leading-[21.59px]">Bitcoin white paper released</h4>
<p class="text-secondary tracking-[0.2px] leading-[1.74em] font-karla">
The vision for what Bitcoin is was outlined by its inventor, Satoshi Nakamoto, in the white paper entitled
“Bitcoin: A Peer to Peer Electronic Cash System”. Four months later the first open source Bitcoin client software is released.
</p>
</div>
</div>
</div>
</div>
<div class="relative">
<div class="py-2.5 px-5 w-fit border border-stone-200 box-border">
<h4 class="text-tertiery text-sm text-400">August 1st, 2017</h4>
</div>
<div class="ml-[200px] w-[5%] top-[15px] absolute hidden md:block">
<div class="bg-white mr-[10px] rounded-[10px] w-[6px] h-[6px] text-[10px] text-center leading-[15px]"></div>
</div>
<div class="rounded-[3px] top-0 mb-30p mt-0 md:mt-[-50px] ml-0 md:ml-[250px] max-md:mt-3">
<div class="box-border text-sm tracking-[1px] text-stone-300 max-w-[438px]">
<h4 class="text-bitcoin-400 text-400 text-lg mb-2 leading-[21.59px]">BCH remains as Bitcoin, BTC forks away</h4>
<p class="text-secondary tracking-[0.2px] leading-[1.74em] font-karla">
“Segregated Witness” or SegWit, was designed to remove the tracing capabilities of Bitcoin allowing the introduction of off-chain,
opaque exchange solutions such as the Lightning Network. The introduction of this broke Bitcoin’s original protocol and clearly
renders BTC as non-Bitcoin compliant and intentionally ineffective.
</p>
</div>
</div>
</div>
<div class="relative">
<div class="py-2.5 px-5 w-fit border border-stone-200 box-border">
<h4 class="text-tertiery text-sm text-400">November 15th, 2018</h4>
</div>
<div class="ml-[200px] w-[5%] top-[15px] absolute hidden md:block">
<div class="bg-white mr-[10px] rounded-[10px] w-[6px] h-[6px] text-[10px] text-center leading-[15px]"></div>
</div>
<div class="rounded-[3px] top-0 mb-30p mt-0 md:mt-[-50px] ml-0 md:ml-[250px] max-md:mt-3">
<div class="box-border text-sm tracking-[1px] text-stone-300 max-w-[438px]">
<h4 class="text-bitcoin-400 text-400 text-lg mb-2 leading-[21.59px]">BSV remains as Bitcoin, BCH forks away</h4>
<p class="text-secondary tracking-[0.2px] leading-[1.74em] font-karla">
Bitcoin SV (BSV) becomes the new ticker symbol for the original Bitcoin Protocol when BCH decided to divert from Bitcoin’s white
paper, introduce non-Bitcoin compliant features which included introducing anonymity that hinders government and financial
regulation. This is why it’s considered Bitcoin’s Independence Day.
</p>
</div>
</div>
</div>
<div class="relative">
<div class="py-2.5 px-5 w-fit border border-stone-200 box-border">
<h4 class="text-tertiery text-sm text-400">February 2020</h4>
</div>
<div class="ml-[200px] w-[5%] top-[15px] absolute hidden md:block">
<div class="bg-white mr-[10px] rounded-[10px] w-[6px] h-[6px] text-[10px] text-center leading-[15px]"></div>
</div>
<div class="rounded-[3px] top-0 mb-30p mt-0 md:mt-[-50px] ml-0 md:ml-[250px] max-md:mt-3">
<div class="box-border text-sm tracking-[1px] text-stone-300 max-w-[438px]">
<h4 class="text-bitcoin-400 text-400 text-lg mb-2 leading-[21.59px]">Genesis Upgrade</h4>
<p class="text-secondary tracking-[0.2px] leading-[1.74em] font-karla">
The Genesis upgrade restored the original Bitcoin Protocol as closely as possible to Satoshi’s original design, locking it down to
create stability for developers and enterprises to build upon. Unbounded scaling returned, as did the original Bitcoin script
language that allows developers to build on-chain applications easier.
</p>
</div>
</div>
</div>
<div class="relative">
<div class="py-2.5 px-5 w-fit border border-stone-200 box-border">
<h4 class="text-tertiery text-sm text-400">2022 onwards</h4>
</div>
<div class="ml-[200px] w-[5%] top-[15px] absolute hidden md:block">
<div class="bg-white mr-[10px] rounded-[10px] w-[6px] h-[6px] text-[10px] text-center leading-[15px]"></div>
</div>
<div class="rounded-[3px] top-0 mb-30p mt-0 md:mt-[-50px] ml-0 md:ml-[250px] max-md:mt-3">
<div class="box-border text-sm tracking-[1px] text-stone-300 max-w-[438px]">
<h4 class="text-bitcoin-400 text-400 text-lg mb-2 leading-[21.59px]">Bitcoin sets numerous World Records</h4>
<p class="text-secondary tracking-[0.2px] leading-[1.74em] font-karla">
Numerous world records have now been set on Bitcoin’s original protocol including regularly surpassing millions of transactions a
day, the largest blocks (+4GB), largest NFT (1GB) and the lowest environmental impact of any proof-of-work (POW) chain.
</p>
</div>
</div>
</div>
<div class="relative">
<div class="py-2.5 px-5 w-fit border border-stone-200 box-border">
<h4 class="text-tertiery text-sm text-400">31st July 2023</h4>
</div>
<div class="ml-[200px] w-[5%] top-[15px] absolute hidden md:block">
<div class="bg-white mr-[10px] rounded-[10px] w-[6px] h-[6px] text-[10px] text-center leading-[15px]"></div>
</div>
<div class="rounded-[3px] top-0 mb-30p mt-0 md:mt-[-50px] ml-0 md:ml-[250px] max-md:mt-3">
<div class="box-border text-sm tracking-[1px] text-stone-300 max-w-[438px]">
<h4 class="text-bitcoin-400 text-400 text-lg mb-2 leading-[21.59px]">Unifying the BitcoinSV brands under BSVblockchain</h4>
<p class="text-secondary tracking-[0.2px] leading-[1.74em] font-karla">
The BitcoinSV brands have been unified under the BSVblockchain umbrella, streamlining their approach and providing a clear, cohesive
identity for the project.
</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<footer>
<div class="bg-img bg-black">
<div class="bg-black/40 pt-16 pb-12">
<div class="container-main">
<div class="flex flex-col gap-16">
<div class="flex justify-between font-inter text-white text-base pt-8 gap-8 border border-transparent border-t-white">
<p>© 2025 BSV Blockchain Association.</p>
</div>
</div>
</div>
</div>
</div>
</footer>
</div>
</body>
</html>

23
tests/cardano_org.html Normal file

File diff suppressed because one or more lines are too long

102
tests/celsius_network.html Normal file

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show more