Estimate the total emissions for popular CryptoArt platforms.

Overview

cryptoart-footprint

Estimate the total CO2 footprint for popular CryptoArt platforms. The goal is to accurately quantify the ecological damage of Ethereum 1.0 PoW-backed CryptoArt platforms.

To estimate the footprint for a specific Ethereum wallet or contract (up to 10,000 transactions) try carbon.fyi. To estimate the footprint of a specific artwork try cryptoart.wtf.

Status as of March 8, 2021:

Platform Gas Transactions kgCO2
OpenSea 143,595,457,124 650,670 45,538,734
Nifty Gateway 22,066,205,976 80,700 8,317,022
Rarible 20,481,970,952 162,561 6,593,793
Makersplace 20,085,695,013 64,142 5,403,452
SuperRare 13,477,071,163 147,399 3,877,450
Foundation 3,238,001,997 20,239 1,570,449
Known Origin 4,430,905,450 18,110 1,341,819
Zora 1,315,299,735 4,859 583,004
Async 1,413,941,801 14,404 350,863

Run

First, sign up for an API key at Etherscan. Create env.json and add the API key. It should look like:

{
    "etherscan-api-key": "<etherscan-api-key>"
}

Install requests pip install requests if it is not already available.

Then run the script: python cryptoart-footprint.py > footprint.tsv

This may take longer the first time, while your local cache is updated.

To also estimate the footprint for Nifty Gateway, add the --ng flag. This takes much longer than other platforms, because Nifty Gateway uses a separate smart contract per exhibition/drop.

Methodology

The footprint of a platform is the sum of the footprints for all artwork on the platform. Most platforms use a few Ethereum contracts to handle all artworks. For each contract, we download all the transactions associated with the contract from Etherscan. Then for each transaction, we compute the kgCO2/gas footprint for that day, based on three values:

  1. The emissions intensity in kgCO2/kWh for the entire Ethereum network. This is an average of the emissions intensity for each mining pool in 2019, weighted by their percentage of the hashrate.
  2. The total power used during that day, estimated by Digiconomist.
  3. The total gas used during that day, measured by Etherscan.

The total kgCO2 for a platform is equal to the sum of the gas used for each transaction times the kgCO2/gas on that day. Finally, we add 20% to handle "network inefficiencies and unnaccounted for mining pools" as described by Offsetra.

Limitations

  • Digiconomist's Bitcoin estimates have been criticized as low (5x too low) or high (2x too high) compared to other estimates. It may be possible to make a more accurate estimate for Ethereum following a different methodology, based on the available mining hardware and corresponding power usage. That said, even the official Ethereum website references Digiconomist when discussing the power usage.
  • Mining pool locations and the corresponding emissions intensity may have changed significantly from the 2019 values. A full correction might correspond to a +/-50% change.
Comments
  • suggestion: report the total gas of Etheruem as well and percentages

    suggestion: report the total gas of Etheruem as well and percentages

    I think it would be great to see what percentage these NFT's are taking up of the total ethereum network -- it could help create some context.

    143,595,457,124 is a very big Gas number but what does that mean? Off hand I think Open Sea is something like 0.5-2% of Ethereum's gas usage for the day depending on the day -- you should show how much of the network it's using

    opened by sterlingcrispin 6
  • Digiconomist  kWh data accuracy

    Digiconomist kWh data accuracy

    I've brought this up elsewhere but I'd love your perspective.

    Since you're relying on Digiconomist energy estimation maybe you can help me get to the bottom of this:

    Digiconomist says they:

    1. Calculate total USD Mining revenues
    2. Estimate what part is spent on electricity
    3. Find out how much miners pay per kWh
    4. Convert costs to consumption

    If you go to you can see their source of data https://digiconomist.net/ethereum-energy-consumption

    However for those four steps:

    1. There's no source for the mining revenue for Ethereum
    2. There's no source for the how much of that revenue is spent on electricity
    3. There's no source for their estimate of "miners are assumed to be paying 10 cents per KWh on average"
    4. There's no source for how they get the kWh consumption, at the end of these layers of assumptions with no sources

    I think it's really problematic all these calculators like carbon.fyi, cryptoart.wtf and now yours are being built on top of these layers of assumptions and "energy assumed backwards from profit with no sources".

    I've seen a handful of other Bitcoin studies that are more "bottom up" than "top down" like https://www.sciencedirect.com/science/article/pii/S2542435119302557 but their estimates are on the low end of Digiconomist and they say at length:

    Previous academic studies, such as predictions of future carbon emissions or comparisons of cryptocurrency and metal mining, are based on simplistic estimates of power consumption and lack empirical foundations. Consequently, the estimates produced vary significantly among studies

    I don't think you should use Digiconomist as a source of data if they have no sources. If you can find a more rigorous estimate of Ethereum network energy usage I think it would be really a great resource. Digiconomist lacks credibility even though its so highly pointed to

    opened by sterlingcrispin 6
  • replace all kgco2_per_gas calculations with csv

    replace all kgco2_per_gas calculations with csv

    all of this should be replaced https://github.com/kylemcdonald/cryptoart-footprint/blob/main/ethereum_footprint.py#L20-L45 so we don't do the math every time we run.

    not for efficiency's sake, but for simplicity.

    update: working on new process for this in https://github.com/kylemcdonald/ethereum-energy/

    opened by kylemcdonald 2
  • Swap old Digiconomist model for new ethereum-emissions model

    Swap old Digiconomist model for new ethereum-emissions model

    ethereum_footprint.py needs to be almost completely replaced:

    • [x] 1. In __init__, instead of loading the digiconomist energy consumption and etherscan gasUsed data, load the ethereum-emissions file daily-ktco2.csv which is regularly update on the gh-pages branch. Also, load an instance of the EthereumStats class, which will give you access to the tx_fees dict (mapping dates to total tx_fees).
    • [x] 2. Remove kgco2_per_gas() from EthereumFootprint
    • [x] 3. Remove get_etherscan_data() from EthereumFootprint
    • [x] 3. sum_kgco2() should run a different calculation. First, sum all transactions fees (using tx.get_fees()) based on the date of the transaction (using tx.get_datetime()). Then for each day, divide the total fees from those transactions by the total fees on that day (using tx_fees from the EthereumStats instance). Finally, sum all values, then convert from kilotons to kilograms.

    Separately:

    • [x] 1. In contracts_footprint.py: add fees to each row and remove gas. Then re-run contracts_footprint.py and update the table in the readme.

    Note: any server that regularly computes these numbers is going to need to run ethereum_stats.py on a daily basis to update the total transaction fees. Also, any emissions estimated for the current day should be treated with suspicion, as different data sources may be out of sync with each other.

    opened by kylemcdonald 1
  • Remove 10k limit from readme

    Remove 10k limit from readme

    Hello, we recently updated our carbon.fyi calculator and it is now able to compute emissions for adresses with more than 10,000 transactions. Would it be possible to reflect this change in your readme please?

    Thanks!

    opened by de-souza 1
  • Persist data to JSON by default

    Persist data to JSON by default

    Previously the script ran and had the user output to a .tsv file. This has been replaced with JSON to the /output direction.

    The JSON format follows the following format:

    {
        "data": [
            {
                "name": "Async",
                "kind": "1",
                "address": "0x6c424c25e9f1fff9642cb5b7750b0db7312c29ad",
                "gas": 596562089,
                "transactions": 7410,
                "kgco2": 127053
            },
            {
                "name": "Async",
                "kind": "2",
                "address": "0xb6dae651468e9593e4581705a09c10a76ac1e0c8",
                "gas": 862954286,
                "transactions": 7304,
                "kgco2": 247305
            },
            ...
        ]
    }
    
    opened by pippinlee 1
  • build in 5 call/s rate limit

    build in 5 call/s rate limit

    Etherscan has a 5 calls per second rate limit for the free tier. Instead of pausing every time we hit a rate limit, we could rate limit the fetch_transactions_in_range function itself.

    opened by kylemcdonald 0
  • switch from json to a database

    switch from json to a database

    the files are big enough now to make this worth doing. not so much for speed, because etherscan is the true bottleneck, but for the purpose of maintaining a low memory footprint (and maybe low disk footprint too).

    probably can switch this over quickly with sqlite3 if de-duplication is handled in python.

    opened by kylemcdonald 0
  • do not report statistics from current day

    do not report statistics from current day

    when the stats are computed, the current day is just starting and has few or no transactions. this makes it look like the graph is always heading downwards, which is inaccurate.

    opened by kylemcdonald 1
Owner
Kyle McDonald
Artist working with code.
Kyle McDonald
This repository will be a draft of a package about the latest total marine fish production in Indonesia. Data will be collected from PIPP (Pusat Informasi Pelabuhan Perikanan).

indomarinefish This package will give us information about the latest total marine fish production in Indonesia. The Name of the fish is written in In

null 1 Oct 13, 2021
Total time of all YouTube videos in a playlist.

Youtube Playlist Total Times Total time of all YouTube videos in a playlist. How to Use Download chromedriver depending on your os and chrome version

Mohammad Dori 3 Jul 15, 2022
Total servers you're in!

Discord-Servercount With this script you can check the amount of servers you are in, along with statistics of how many servers you are owner in and in

Nickyux 1 Feb 12, 2022
KalmanFilterExercise - A Kalman Filter is a algorithmic filter that is used to estimate the state of an unknown variable

Kalman Filter Exercise What are Kalman Filters? A Kalman Filter is a algorithmic

null 4 Feb 26, 2022
Download videos from Youtube and other platforms through a Telegram Bot

ytdl-bot Download videos from YouTube and other platforms through a Telegram Bot Usage: https://t.me/benny_ytdlbot Send link from YouTube directly to

Telegram Bot Collection 289 Jan 3, 2023
search different Streaming Platforms for movie titles.

Install git clone and cd to directory install Selenium download chromedriver.exe to same directory First Run Use --setup True for the first run. Platf

null 34 Dec 25, 2022
Experimental bridges between Telegram calls and other platforms.

Bridges by Calls Music Experimental bridges between Telegram calls and other platforms. Current bridges Bridge 1 (YouTube, Twitch, Facebook, etc...) B

Calls Music 14 Oct 8, 2022
Telegram Group Calls Streaming bot with some useful features, written in Python with Pyrogram and Py-Tgcalls. Supporting platforms like Youtube, Spotify, Resso, AppleMusic, Soundcloud and M3u8 Links.

Yukki Music Bot Yukki Music Bot is a Powerful Telegram Music+Video Bot written in Python using Pyrogram and Py-Tgcalls by which you can stream songs,

Team Yukki 996 Dec 28, 2022
Data from popular CS:GO website hltv.org

Welcome to hltv-data ?? ?? Data from popular CS:GO website hltv.org Install pip install hltv-data Usage The public methods can be reached using HLTVCl

Dariusz Choruży 28 Dec 23, 2022
A reddit bot that imitates the popular reddit bot "u/repostsleuthbot" to trick people into clicking on a rickroll

Reddit-Rickroll-Bot A reddit bot that imitates the popular reddit bot "u/repostsleuthbot" to trick people into clicking on a rickroll Made with The Py

null 0 Jul 16, 2022
The records of 42 million users from a third-party version of the popular Telegram messaging app have just been Iranian accounts leaked

TelegramDatabase About The records of 42 million users from a third-party version of the popular Telegram messaging app have just been Iranian account

Hamed Mohammadvand 10 Jan 14, 2022
Graph-total-spanning-trees - A Python script to get total number of Spanning Trees in a Graph

Total number of Spanning Trees in a Graph This is a python script just written f

Mehdi I. 0 Jul 18, 2022
Total Text Dataset. It consists of 1555 images with more than 3 different text orientations: Horizontal, Multi-Oriented, and Curved, one of a kind.

Total-Text-Dataset (Official site) Updated on April 29, 2020 (Detection leaderboard is updated - highlighted E2E methods. Thank you shine-lcy.) Update

Chee Seng Chan 671 Dec 27, 2022
The PyTorch improved version of TPAMI 2017 paper: Face Alignment in Full Pose Range: A 3D Total Solution.

Face Alignment in Full Pose Range: A 3D Total Solution By Jianzhu Guo. [Updates] 2020.8.30: The pre-trained model and code of ECCV-20 are made public

Jianzhu Guo 3.4k Jan 2, 2023
This repository will be a draft of a package about the latest total marine fish production in Indonesia. Data will be collected from PIPP (Pusat Informasi Pelabuhan Perikanan).

indomarinefish This package will give us information about the latest total marine fish production in Indonesia. The Name of the fish is written in In

null 1 Oct 13, 2021
A simple tool to utilize the basic functionality of the Private API From Virus Total

Welcome To VT-SCAN (viurs total api) Information This is a simple tool to utilize the basic functionality of the Private API From Virus Total. with th

0X0ŽĒR∅⁰ 1 Sep 21, 2022
An app to show the total number of lines of code written by an user.

Lines of code Have you ever wondered how many lines of code you wrote in github? This tool will calculate it for you! To calculate the total number of

B.Jothin kumar 10 Jan 26, 2022
Uma ferramenta de segurança da informação escrita em python3,capaz de dar acesso total ao computador de alguém!

shell-reverse Uma ferramenta de segurança da informação escrita em python3, capaz de dar acesso total ao computador de alguém! A cybersecurity tool wr

Marcus Vinícius Ribeiro Andrade 1 Nov 3, 2021
voice assistant made with python that search for covid19 data(like total cases, deaths and etc) in a specific country

covid19-voice-assistant voice assistant made with python that search for covid19 data(like total cases, deaths and etc) in a specific country installi

Miguel 2 Dec 5, 2021