Latest commit

History

36 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

dapp-plotly-dash

An interactive analysis of auction listings for digital collectibles on the Etherium platform. Built on Plotly's Dash framework and hosted on Google's App Engine. Dataset is static & managed in-memory via pandas.

Currently deployed on Google App Engine: https://dapp-scatter-dashboard.appspot.com/

Animated example of scatterplot selection

  1. Auction Overview
  2. Dashboard Specifics
  3. Credits

Overview

Decentralized Applications

Decentralized applications, or "dApps" for short, are applications which eschew a traditional centralized data backend in favor of a decentralized, peer-to-peer architecture. While many of these decentralized applications are designed to power fungible cryptocurrencies, such as Bitcoin, there also exist standards which use blockchain technology for enabling the creation of contracts for unique, non-fungible digital goods. Etherium's ERC-721 standard, which is profiled in this dashboard, has been the protocol of choice for many popular applications, such as Cryptokitties. One consumer benefit of these digital collectibles is 'true ownership' of goods, which are not reliant on central infrastructure to guarantee uniqueness, validate legitimacy, and facilitate transferral. Better yet (for proponents of open data), the historical record of these transfers is written to the public blockchain.

Auction Data

Most ERC-721 auctions follow a Dutch Auction model, in which the listing price linearly drops in value until the good is either purchased by the first bidder or the auction ends. This data set covers all auction listings for goods across 15 selected applications, between June '17 and June '18.

  • Auctions are priced in Etherium, the value of which can fluctuate with respect to other currency.
  • Auctions are categorized by their ending state, which can either be a sale or a delisting. In-progress auctions are marked as 'unresolved.'
  • Several axes are only germane to successfully sold auctions ('Sold Price', 'Start-Sold Range', 'Start-Sold Range %'). If any of these fields are selected, the dashboard will remove unsuccessful auctions from the scatterplot.

Dashboard Specifics

Dimensions

  • The X- and Y- axes can be customized with the dropdowns.
    • Each selectable dimension has a default axis scale, though you can manually toggle between log and linear scales.
    • The box plot inherits the selected Y-axis dimension by default, though this can also be customized.

Drilling Down

  • Discrete auction listings can be investigated by clicking on individual markers on the scatter plot.
  • Listings can be filtered for any of the below characteristics of a given selected point. Please note that selecting any of these options will automatically disable sampling of the data set. Similarly, removing these options will re-apply the sampling filter, out of consideration for application performance.
    • Token Item Id (eg. a unique item)
    • Buyer
    • Seller (frequently an auction house or escrow service)

Sampling

  • The central scatterplot will display a maximum of 100,000 auction listings per application, by default. The primary purpose of this feature, which can be disabled, is to prevent the data from CryptoKitties (which has more than 600,000 listings) from impacting performance. No other application comes close to reaching this sampling limit.
  • The box and whisker plot does not observe the sampling limit, as it does not need to render every individual data point

Credits

About

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

36 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

dapp-plotly-dash

An interactive analysis of auction listings for digital collectibles on the Etherium platform. Built on Plotly's Dash framework and hosted on Google's App Engine. Dataset is static & managed in-memory via pandas.

Currently deployed on Google App Engine: https://dapp-scatter-dashboard.appspot.com/

Animated example of scatterplot selection

  1. Auction Overview
  2. Dashboard Specifics
  3. Credits

Overview

Decentralized Applications

Decentralized applications, or "dApps" for short, are applications which eschew a traditional centralized data backend in favor of a decentralized, peer-to-peer architecture. While many of these decentralized applications are designed to power fungible cryptocurrencies, such as Bitcoin, there also exist standards which use blockchain technology for enabling the creation of contracts for unique, non-fungible digital goods. Etherium's ERC-721 standard, which is profiled in this dashboard, has been the protocol of choice for many popular applications, such as Cryptokitties. One consumer benefit of these digital collectibles is 'true ownership' of goods, which are not reliant on central infrastructure to guarantee uniqueness, validate legitimacy, and facilitate transferral. Better yet (for proponents of open data), the historical record of these transfers is written to the public blockchain.

Auction Data

Most ERC-721 auctions follow a Dutch Auction model, in which the listing price linearly drops in value until the good is either purchased by the first bidder or the auction ends. This data set covers all auction listings for goods across 15 selected applications, between June '17 and June '18.

  • Auctions are priced in Etherium, the value of which can fluctuate with respect to other currency.
  • Auctions are categorized by their ending state, which can either be a sale or a delisting. In-progress auctions are marked as 'unresolved.'
  • Several axes are only germane to successfully sold auctions ('Sold Price', 'Start-Sold Range', 'Start-Sold Range %'). If any of these fields are selected, the dashboard will remove unsuccessful auctions from the scatterplot.

Dashboard Specifics

Dimensions

  • The X- and Y- axes can be customized with the dropdowns.
    • Each selectable dimension has a default axis scale, though you can manually toggle between log and linear scales.
    • The box plot inherits the selected Y-axis dimension by default, though this can also be customized.

Drilling Down

  • Discrete auction listings can be investigated by clicking on individual markers on the scatter plot.
  • Listings can be filtered for any of the below characteristics of a given selected point. Please note that selecting any of these options will automatically disable sampling of the data set. Similarly, removing these options will re-apply the sampling filter, out of consideration for application performance.
    • Token Item Id (eg. a unique item)
    • Buyer
    • Seller (frequently an auction house or escrow service)

Sampling

  • The central scatterplot will display a maximum of 100,000 auction listings per application, by default. The primary purpose of this feature, which can be disabled, is to prevent the data from CryptoKitties (which has more than 600,000 listings) from impacting performance. No other application comes close to reaching this sampling limit.
  • The box and whisker plot does not observe the sampling limit, as it does not need to render every individual data point

Credits

About

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

36 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

dapp-plotly-dash

An interactive analysis of auction listings for digital collectibles on the Etherium platform. Built on Plotly's Dash framework and hosted on Google's App Engine. Dataset is static & managed in-memory via pandas.

Currently deployed on Google App Engine: https://dapp-scatter-dashboard.appspot.com/

Animated example of scatterplot selection

  1. Auction Overview
  2. Dashboard Specifics
  3. Credits

Overview

Decentralized Applications

Decentralized applications, or "dApps" for short, are applications which eschew a traditional centralized data backend in favor of a decentralized, peer-to-peer architecture. While many of these decentralized applications are designed to power fungible cryptocurrencies, such as Bitcoin, there also exist standards which use blockchain technology for enabling the creation of contracts for unique, non-fungible digital goods. Etherium's ERC-721 standard, which is profiled in this dashboard, has been the protocol of choice for many popular applications, such as Cryptokitties. One consumer benefit of these digital collectibles is 'true ownership' of goods, which are not reliant on central infrastructure to guarantee uniqueness, validate legitimacy, and facilitate transferral. Better yet (for proponents of open data), the historical record of these transfers is written to the public blockchain.

Auction Data

Most ERC-721 auctions follow a Dutch Auction model, in which the listing price linearly drops in value until the good is either purchased by the first bidder or the auction ends. This data set covers all auction listings for goods across 15 selected applications, between June '17 and June '18.

  • Auctions are priced in Etherium, the value of which can fluctuate with respect to other currency.
  • Auctions are categorized by their ending state, which can either be a sale or a delisting. In-progress auctions are marked as 'unresolved.'
  • Several axes are only germane to successfully sold auctions ('Sold Price', 'Start-Sold Range', 'Start-Sold Range %'). If any of these fields are selected, the dashboard will remove unsuccessful auctions from the scatterplot.

Dashboard Specifics

Dimensions

  • The X- and Y- axes can be customized with the dropdowns.
    • Each selectable dimension has a default axis scale, though you can manually toggle between log and linear scales.
    • The box plot inherits the selected Y-axis dimension by default, though this can also be customized.

Drilling Down

  • Discrete auction listings can be investigated by clicking on individual markers on the scatter plot.
  • Listings can be filtered for any of the below characteristics of a given selected point. Please note that selecting any of these options will automatically disable sampling of the data set. Similarly, removing these options will re-apply the sampling filter, out of consideration for application performance.
    • Token Item Id (eg. a unique item)
    • Buyer
    • Seller (frequently an auction house or escrow service)

Sampling

  • The central scatterplot will display a maximum of 100,000 auction listings per application, by default. The primary purpose of this feature, which can be disabled, is to prevent the data from CryptoKitties (which has more than 600,000 listings) from impacting performance. No other application comes close to reaching this sampling limit.
  • The box and whisker plot does not observe the sampling limit, as it does not need to render every individual data point

Credits

About

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

36 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

dapp-plotly-dash

An interactive analysis of auction listings for digital collectibles on the Etherium platform. Built on Plotly's Dash framework and hosted on Google's App Engine. Dataset is static & managed in-memory via pandas.

Currently deployed on Google App Engine: https://dapp-scatter-dashboard.appspot.com/

Animated example of scatterplot selection

  1. Auction Overview
  2. Dashboard Specifics
  3. Credits

Overview

Decentralized Applications

Decentralized applications, or "dApps" for short, are applications which eschew a traditional centralized data backend in favor of a decentralized, peer-to-peer architecture. While many of these decentralized applications are designed to power fungible cryptocurrencies, such as Bitcoin, there also exist standards which use blockchain technology for enabling the creation of contracts for unique, non-fungible digital goods. Etherium's ERC-721 standard, which is profiled in this dashboard, has been the protocol of choice for many popular applications, such as Cryptokitties. One consumer benefit of these digital collectibles is 'true ownership' of goods, which are not reliant on central infrastructure to guarantee uniqueness, validate legitimacy, and facilitate transferral. Better yet (for proponents of open data), the historical record of these transfers is written to the public blockchain.

Auction Data

Most ERC-721 auctions follow a Dutch Auction model, in which the listing price linearly drops in value until the good is either purchased by the first bidder or the auction ends. This data set covers all auction listings for goods across 15 selected applications, between June '17 and June '18.

  • Auctions are priced in Etherium, the value of which can fluctuate with respect to other currency.
  • Auctions are categorized by their ending state, which can either be a sale or a delisting. In-progress auctions are marked as 'unresolved.'
  • Several axes are only germane to successfully sold auctions ('Sold Price', 'Start-Sold Range', 'Start-Sold Range %'). If any of these fields are selected, the dashboard will remove unsuccessful auctions from the scatterplot.

Dashboard Specifics

Dimensions

  • The X- and Y- axes can be customized with the dropdowns.
    • Each selectable dimension has a default axis scale, though you can manually toggle between log and linear scales.
    • The box plot inherits the selected Y-axis dimension by default, though this can also be customized.

Drilling Down

  • Discrete auction listings can be investigated by clicking on individual markers on the scatter plot.
  • Listings can be filtered for any of the below characteristics of a given selected point. Please note that selecting any of these options will automatically disable sampling of the data set. Similarly, removing these options will re-apply the sampling filter, out of consideration for application performance.
    • Token Item Id (eg. a unique item)
    • Buyer
    • Seller (frequently an auction house or escrow service)

Sampling

  • The central scatterplot will display a maximum of 100,000 auction listings per application, by default. The primary purpose of this feature, which can be disabled, is to prevent the data from CryptoKitties (which has more than 600,000 listings) from impacting performance. No other application comes close to reaching this sampling limit.
  • The box and whisker plot does not observe the sampling limit, as it does not need to render every individual data point

Credits

About

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

36 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

dapp-plotly-dash

An interactive analysis of auction listings for digital collectibles on the Etherium platform. Built on Plotly's Dash framework and hosted on Google's App Engine. Dataset is static & managed in-memory via pandas.

Currently deployed on Google App Engine: https://dapp-scatter-dashboard.appspot.com/

Animated example of scatterplot selection

  1. Auction Overview
  2. Dashboard Specifics
  3. Credits

Overview

Decentralized Applications

Decentralized applications, or "dApps" for short, are applications which eschew a traditional centralized data backend in favor of a decentralized, peer-to-peer architecture. While many of these decentralized applications are designed to power fungible cryptocurrencies, such as Bitcoin, there also exist standards which use blockchain technology for enabling the creation of contracts for unique, non-fungible digital goods. Etherium's ERC-721 standard, which is profiled in this dashboard, has been the protocol of choice for many popular applications, such as Cryptokitties. One consumer benefit of these digital collectibles is 'true ownership' of goods, which are not reliant on central infrastructure to guarantee uniqueness, validate legitimacy, and facilitate transferral. Better yet (for proponents of open data), the historical record of these transfers is written to the public blockchain.

Auction Data

Most ERC-721 auctions follow a Dutch Auction model, in which the listing price linearly drops in value until the good is either purchased by the first bidder or the auction ends. This data set covers all auction listings for goods across 15 selected applications, between June '17 and June '18.

  • Auctions are priced in Etherium, the value of which can fluctuate with respect to other currency.
  • Auctions are categorized by their ending state, which can either be a sale or a delisting. In-progress auctions are marked as 'unresolved.'
  • Several axes are only germane to successfully sold auctions ('Sold Price', 'Start-Sold Range', 'Start-Sold Range %'). If any of these fields are selected, the dashboard will remove unsuccessful auctions from the scatterplot.

Dashboard Specifics

Dimensions

  • The X- and Y- axes can be customized with the dropdowns.
    • Each selectable dimension has a default axis scale, though you can manually toggle between log and linear scales.
    • The box plot inherits the selected Y-axis dimension by default, though this can also be customized.

Drilling Down

  • Discrete auction listings can be investigated by clicking on individual markers on the scatter plot.
  • Listings can be filtered for any of the below characteristics of a given selected point. Please note that selecting any of these options will automatically disable sampling of the data set. Similarly, removing these options will re-apply the sampling filter, out of consideration for application performance.
    • Token Item Id (eg. a unique item)
    • Buyer
    • Seller (frequently an auction house or escrow service)

Sampling

  • The central scatterplot will display a maximum of 100,000 auction listings per application, by default. The primary purpose of this feature, which can be disabled, is to prevent the data from CryptoKitties (which has more than 600,000 listings) from impacting performance. No other application comes close to reaching this sampling limit.
  • The box and whisker plot does not observe the sampling limit, as it does not need to render every individual data point

Credits

About

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

36 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

dapp-plotly-dash

An interactive analysis of auction listings for digital collectibles on the Etherium platform. Built on Plotly's Dash framework and hosted on Google's App Engine. Dataset is static & managed in-memory via pandas.

Currently deployed on Google App Engine: https://dapp-scatter-dashboard.appspot.com/

Animated example of scatterplot selection

  1. Auction Overview
  2. Dashboard Specifics
  3. Credits

Overview

Decentralized Applications

Decentralized applications, or "dApps" for short, are applications which eschew a traditional centralized data backend in favor of a decentralized, peer-to-peer architecture. While many of these decentralized applications are designed to power fungible cryptocurrencies, such as Bitcoin, there also exist standards which use blockchain technology for enabling the creation of contracts for unique, non-fungible digital goods. Etherium's ERC-721 standard, which is profiled in this dashboard, has been the protocol of choice for many popular applications, such as Cryptokitties. One consumer benefit of these digital collectibles is 'true ownership' of goods, which are not reliant on central infrastructure to guarantee uniqueness, validate legitimacy, and facilitate transferral. Better yet (for proponents of open data), the historical record of these transfers is written to the public blockchain.

Auction Data

Most ERC-721 auctions follow a Dutch Auction model, in which the listing price linearly drops in value until the good is either purchased by the first bidder or the auction ends. This data set covers all auction listings for goods across 15 selected applications, between June '17 and June '18.

  • Auctions are priced in Etherium, the value of which can fluctuate with respect to other currency.
  • Auctions are categorized by their ending state, which can either be a sale or a delisting. In-progress auctions are marked as 'unresolved.'
  • Several axes are only germane to successfully sold auctions ('Sold Price', 'Start-Sold Range', 'Start-Sold Range %'). If any of these fields are selected, the dashboard will remove unsuccessful auctions from the scatterplot.

Dashboard Specifics

Dimensions

  • The X- and Y- axes can be customized with the dropdowns.
    • Each selectable dimension has a default axis scale, though you can manually toggle between log and linear scales.
    • The box plot inherits the selected Y-axis dimension by default, though this can also be customized.

Drilling Down

  • Discrete auction listings can be investigated by clicking on individual markers on the scatter plot.
  • Listings can be filtered for any of the below characteristics of a given selected point. Please note that selecting any of these options will automatically disable sampling of the data set. Similarly, removing these options will re-apply the sampling filter, out of consideration for application performance.
    • Token Item Id (eg. a unique item)
    • Buyer
    • Seller (frequently an auction house or escrow service)

Sampling

  • The central scatterplot will display a maximum of 100,000 auction listings per application, by default. The primary purpose of this feature, which can be disabled, is to prevent the data from CryptoKitties (which has more than 600,000 listings) from impacting performance. No other application comes close to reaching this sampling limit.
  • The box and whisker plot does not observe the sampling limit, as it does not need to render every individual data point

Credits

About

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

36 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

dapp-plotly-dash

An interactive analysis of auction listings for digital collectibles on the Etherium platform. Built on Plotly's Dash framework and hosted on Google's App Engine. Dataset is static & managed in-memory via pandas.

Currently deployed on Google App Engine: https://dapp-scatter-dashboard.appspot.com/

Animated example of scatterplot selection

  1. Auction Overview
  2. Dashboard Specifics
  3. Credits

Overview

Decentralized Applications

Decentralized applications, or "dApps" for short, are applications which eschew a traditional centralized data backend in favor of a decentralized, peer-to-peer architecture. While many of these decentralized applications are designed to power fungible cryptocurrencies, such as Bitcoin, there also exist standards which use blockchain technology for enabling the creation of contracts for unique, non-fungible digital goods. Etherium's ERC-721 standard, which is profiled in this dashboard, has been the protocol of choice for many popular applications, such as Cryptokitties. One consumer benefit of these digital collectibles is 'true ownership' of goods, which are not reliant on central infrastructure to guarantee uniqueness, validate legitimacy, and facilitate transferral. Better yet (for proponents of open data), the historical record of these transfers is written to the public blockchain.

Auction Data

Most ERC-721 auctions follow a Dutch Auction model, in which the listing price linearly drops in value until the good is either purchased by the first bidder or the auction ends. This data set covers all auction listings for goods across 15 selected applications, between June '17 and June '18.

  • Auctions are priced in Etherium, the value of which can fluctuate with respect to other currency.
  • Auctions are categorized by their ending state, which can either be a sale or a delisting. In-progress auctions are marked as 'unresolved.'
  • Several axes are only germane to successfully sold auctions ('Sold Price', 'Start-Sold Range', 'Start-Sold Range %'). If any of these fields are selected, the dashboard will remove unsuccessful auctions from the scatterplot.

Dashboard Specifics

Dimensions

  • The X- and Y- axes can be customized with the dropdowns.
    • Each selectable dimension has a default axis scale, though you can manually toggle between log and linear scales.
    • The box plot inherits the selected Y-axis dimension by default, though this can also be customized.

Drilling Down

  • Discrete auction listings can be investigated by clicking on individual markers on the scatter plot.
  • Listings can be filtered for any of the below characteristics of a given selected point. Please note that selecting any of these options will automatically disable sampling of the data set. Similarly, removing these options will re-apply the sampling filter, out of consideration for application performance.
    • Token Item Id (eg. a unique item)
    • Buyer
    • Seller (frequently an auction house or escrow service)

Sampling

  • The central scatterplot will display a maximum of 100,000 auction listings per application, by default. The primary purpose of this feature, which can be disabled, is to prevent the data from CryptoKitties (which has more than 600,000 listings) from impacting performance. No other application comes close to reaching this sampling limit.
  • The box and whisker plot does not observe the sampling limit, as it does not need to render every individual data point

Credits

About

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

36 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

dapp-plotly-dash

An interactive analysis of auction listings for digital collectibles on the Etherium platform. Built on Plotly's Dash framework and hosted on Google's App Engine. Dataset is static & managed in-memory via pandas.

Currently deployed on Google App Engine: https://dapp-scatter-dashboard.appspot.com/

Animated example of scatterplot selection

  1. Auction Overview
  2. Dashboard Specifics
  3. Credits

Overview

Decentralized Applications

Decentralized applications, or "dApps" for short, are applications which eschew a traditional centralized data backend in favor of a decentralized, peer-to-peer architecture. While many of these decentralized applications are designed to power fungible cryptocurrencies, such as Bitcoin, there also exist standards which use blockchain technology for enabling the creation of contracts for unique, non-fungible digital goods. Etherium's ERC-721 standard, which is profiled in this dashboard, has been the protocol of choice for many popular applications, such as Cryptokitties. One consumer benefit of these digital collectibles is 'true ownership' of goods, which are not reliant on central infrastructure to guarantee uniqueness, validate legitimacy, and facilitate transferral. Better yet (for proponents of open data), the historical record of these transfers is written to the public blockchain.

Auction Data

Most ERC-721 auctions follow a Dutch Auction model, in which the listing price linearly drops in value until the good is either purchased by the first bidder or the auction ends. This data set covers all auction listings for goods across 15 selected applications, between June '17 and June '18.

  • Auctions are priced in Etherium, the value of which can fluctuate with respect to other currency.
  • Auctions are categorized by their ending state, which can either be a sale or a delisting. In-progress auctions are marked as 'unresolved.'
  • Several axes are only germane to successfully sold auctions ('Sold Price', 'Start-Sold Range', 'Start-Sold Range %'). If any of these fields are selected, the dashboard will remove unsuccessful auctions from the scatterplot.

Dashboard Specifics

Dimensions

  • The X- and Y- axes can be customized with the dropdowns.
    • Each selectable dimension has a default axis scale, though you can manually toggle between log and linear scales.
    • The box plot inherits the selected Y-axis dimension by default, though this can also be customized.

Drilling Down

  • Discrete auction listings can be investigated by clicking on individual markers on the scatter plot.
  • Listings can be filtered for any of the below characteristics of a given selected point. Please note that selecting any of these options will automatically disable sampling of the data set. Similarly, removing these options will re-apply the sampling filter, out of consideration for application performance.
    • Token Item Id (eg. a unique item)
    • Buyer
    • Seller (frequently an auction house or escrow service)

Sampling

  • The central scatterplot will display a maximum of 100,000 auction listings per application, by default. The primary purpose of this feature, which can be disabled, is to prevent the data from CryptoKitties (which has more than 600,000 listings) from impacting performance. No other application comes close to reaching this sampling limit.
  • The box and whisker plot does not observe the sampling limit, as it does not need to render every individual data point

Credits

About

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages