From 0a087888cd961c208343e0da61b50d075bd74b0e Mon Sep 17 00:00:00 2001 From: "Carlos R. Mercado" <107061601+charlieflipside@users.noreply.github.com> Date: Thu, 8 Sep 2022 11:12:49 -0400 Subject: [PATCH] in progress --- MKR_delegate_targeting.Rmd | 215 ++++++++++ mkr_holders_screenshot.png | Bin 0 -> 22183 bytes renv.lock | 780 +++++++++++++++++++++++++++++++++++++ 3 files changed, 995 insertions(+) create mode 100644 MKR_delegate_targeting.Rmd create mode 100644 mkr_holders_screenshot.png diff --git a/MKR_delegate_targeting.Rmd b/MKR_delegate_targeting.Rmd new file mode 100644 index 0000000..6fd5d22 --- /dev/null +++ b/MKR_delegate_targeting.Rmd @@ -0,0 +1,215 @@ +--- +title: "Understanding MKR spread for Delegate Targeting" +author: "Carlos Mercado" +date: '2022-08-30' +output: + html_document: + code_folding: hide +editor_options: + chunk_output_type: console +--- + +# Intro + +Flipside's governance team works deeply with the MakerDAO team to create, discuss, and vote on proposals that +ultimately improve Maker's market position and revenue model. In order to increase our influence +at Maker, we seek delegation of MKR to our voting address. + +This markdown details use of the new Flipside `ethscore` package to identify potential +addresses to target to request/earn delegation of their MKR to our voting address. + +# Package Requirements + +ethscore uses shroomDK to access Flipside data for its analysis. The best way to install these +packages is via devtools install_github(). + +```{r, eval = FALSE, message = FALSE, warning= FALSE} +# This chunk does not eval +# library(devtools) # install if you haven't already +# devtools::install_github(repo = 'FlipsideCrypto/sdk', subdir = 'r/shroomDK') +# devtools::install_github(repo = 'FlipsideCrypto/ethscore') +``` + +# Addressable Market of MKR Delegation + +Not all holders of an ERC20 are externally owned accounts (EOAs). Some are contract addresses, +others are gnosis-safes. Among EOAs, there are central exchange managed EOAs for coordinating deposits and withdrawals +on and off chain which would be inappropriate targets for delegation. Also some EOAs are 'cold storage' in that they hold a balance but have never initiated a transaction. If an EOA has never done a transaction, it is unlikely its first +will be delegation of a token which requires approvals and other contract interactions that the user may find risky. + +Thus, for the purposes of growing our delegation, it is imperative we understand the addressable market +as: + + - EOAs that are active and likely human owned + - Gnosis safes, e.g., DAO multi-sigs. + - MKR in the delegate contract(s) + - Note: this is 'pvp' in that each MKR we are delegated from this contract is explicitly a MKR taken from another delegate. While we support competition, our first goal is to activate more MKR, not simply fight over a fixed pool. + +## Current balance of MKR held by those with 1+ MKR + +'Dust' is common in crypto. Users make swaps of non-integer sizes and end up with balances that use many of the +18 decimals permitted by ERC20s, e.g., having 0.0042069 MKR (~ $3 at time of writing). This naturally inflates +the 'holders' number we commonly see in tools like etherscan. + +![Etherscan screenshot of MKR Holders](mkr_holders_screenshot.png) + +Of the 87,000 Holders of MKR, only 6,375 (7%) have at least 1 whole MKR (~$700 at time of writing). +Given that MKR uses on-chain voting on the Ethereum Layer 1, it may be cost prohibitive in ETH gas +terms for smaller holders to delegate and vote on-chain. + +```{r, message = FALSE, warning= FALSE} +library(shroomDK) +library(ethscore) +library(dplyr) +library(reactable) +library(plotly) + + +mkr <- tolower("0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2") +max_block <- 15440000 # August 30th 11AM UTC +api_key <- readLines("api_key.txt") # get a free key @ https://sdk.flipsidecrypto.xyz/shroomdk + +mkr_balances <- address_token_balance(token_address = mkr, min_tokens = 1, + block_max = max_block, api_key = api_key) + +message( + paste0('There are ', nrow(mkr_balances), ' holders of MKR with at least 1 MKR (as of block: ', max_block, ")") +) + +plot_ly(mkr_balances, x = ~ADDRESS_TYPE, y = ~log(NEW_VALUE), color = ~ADDRESS_TYPE, + boxpoints = "all", jitter = 0.3, + hoverinfo = 'text', + hovertext = ~paste0( + 'Log-MKR Balance: ', + round(log(NEW_VALUE), 2),'\n Raw MKR Balance: ', + scales::label_comma()(floor(NEW_VALUE)) + ), + type = 'box') %>% + layout(title = '\nDistribution of MKR among those with 1+ MKR', + xaxis = list(title = 'Address Type'), + yaxis = list(title = 'LOG(MKR Balance)') + ) + +``` + +Because holdings of most ERC20s is highly skewed (i.e., most addresses have very few MKR and a few have very large amounts) +a LOG scale is used to more cleanly see differences in the distribution of MKR across Address Types. + +The key insights to note: + + - Non-targets like contracts, cold storage EOAs, and central exchange EOAs have a wide variance in their MKR holdings. + - Target EOAs (Orange, hover over to see non-LOG values) have a median of 2 MKR each and a 75% percentile of ~95 MKR. + - The top holders of MKR are contracts and central exchange EOAs. + +In practical terms, of the 977,000 MKR total supply held by 87,000 holders (Etherscan above), there are only +5,150 EOAs active and with enough MKR (1+) to be delegate targets. These EOAs hold 356,015 MKR, only 36% of supply. + + +```{r} +mkr_smmry <- mkr_balances %>% group_by(ADDRESS_TYPE) %>% + summarise(num = n(), + total = scales::label_comma()(floor(sum(NEW_VALUE))), + avg = scales::label_comma()(floor(mean(NEW_VALUE))), + median = scales::label_comma()(floor(median(NEW_VALUE))), + max = scales::label_comma()(floor(max(NEW_VALUE))), + sd = scales::label_comma()(floor(sd(NEW_VALUE)))) + +reactable(mkr_smmry, +columns = list( + ADDRESS_TYPE = colDef(name = 'Address Type'), + num = colDef(name = 'Count', align = 'right'), + total = colDef(name = 'Total', align = 'right'), + avg = colDef(name = 'Average', align = 'right'), + median = colDef(name = 'Median', align = 'right'), + max = colDef(name = 'Max', align = 'right'), + sd = colDef(name = 'Standard Deviation', align = 'right') +)) + +``` + +The MKR governance contract: 0x0a3f6849f78076aefaDf113F5BED87720274dDC0 held 188,866 MKR as of +block 15440000. The Largest contract and overall address holder of maker. + +This means of the total 977,631 MKR: 544,881 (~56%) is practically available for delegation. + + +```{r} +message( + paste0( + 'MKR Governance Contract has ', + scales::label_comma()(floor(mkr_balances[ + mkr_balances$ADDRESS == tolower('0x0a3f6849f78076aefaDf113F5BED87720274dDC0'), "NEW_VALUE"] + )), + ' MKR' +) +) +``` + +Combining + +## Time-Weighted MKR Holders + +Instead of analyzing holders based on current balance on MKR, we can add weight for *having held* MKR +for a long time. For example, weighing a user whose held 10 MKR for 10,000 blocks as a better delegate +target than one who has held 100 MKR for only 100 blocks. + +Giving users 1 point per MKR for every 1,000 blocks where they held at least 0.1 MKR +in the range of Jan 1, 2021 (block #:11,566,000) to +Aug 30th 11am UTC (block # 15,440,000). + +```{r, message = FALSE, warning= FALSE} + +min_block <- 11566000 + +mkr_timeweighted <- address_time_weighted_token_balance(mkr, + min_tokens = 0.1, + block_min = min_block, + block_max = max_block, + amount_weighting = TRUE, + api_key = api_key + ) + +plot_ly(mkr_timeweighted, x = ~ADDRESS_TYPE, y = ~log(TIME_WEIGHTED_SCORE), + color = ~ADDRESS_TYPE, + boxpoints = "all", jitter = 0.3, + hoverinfo = 'text', + hovertext = ~paste0( + 'Log-MKR TW Score: ', + round(log(TIME_WEIGHTED_SCORE), 2), + '\n Raw MKR TW Score: ', + scales::label_comma()(floor(TIME_WEIGHTED_SCORE)) + ), + type = 'box') %>% + layout(title = '\nDistribution of MKR Time Weighted Scoring', + xaxis = list(title = 'Address Type'), + yaxis = list(title = 'LOG(MKR TW Score)') + ) + +# merging and imputing current balance 0 to compare tw score and balance +mkr_tw_bal <- merge(x = mkr_timeweighted[, c("ADDRESS","TIME_WEIGHTED_SCORE","ADDRESS_TYPE")], + y = mkr_balances[,c("ADDRESS","NEW_VALUE")], + all.x = TRUE, by = "ADDRESS") + +mkr_tw_bal$NEW_VALUE[is.na(mkr_tw_bal$NEW_VALUE)] <- 0 + +plot_ly(mkr_tw_bal, x = ~log(NEW_VALUE), y = ~log(TIME_WEIGHTED_SCORE), + color = ~ADDRESS_TYPE, type = 'scatter', + hoverinfo = 'text', + hovertext = ~paste0( + 'RAW-MKR Balance: ', + scales::label_comma()(floor(NEW_VALUE)), + '\n Raw MKR TW Score: ', + scales::label_comma()(floor(TIME_WEIGHTED_SCORE)) + ) +) %>% + layout(title = '\n Current MKR Balance vs Time-Weighted Score', + xaxis = list(title = 'LOG(Current MKR Balance)'), + yaxis = list(title = 'LOG(MKR TW Score)') + ) + + +``` + +## Recent Accumulators + +TODO diff --git a/mkr_holders_screenshot.png b/mkr_holders_screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..781151a15eef18ea9ab7482d213f3817bb6d5747 GIT binary patch literal 22183 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