mirror of
https://github.com/FlipsideCrypto/mkr-analysis.git
synced 2026-02-06 10:56:56 +00:00
in progress
This commit is contained in:
parent
46fdcc49ab
commit
0a087888cd
215
MKR_delegate_targeting.Rmd
Normal file
215
MKR_delegate_targeting.Rmd
Normal file
@ -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.
|
||||
|
||||

|
||||
|
||||
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
|
||||
BIN
mkr_holders_screenshot.png
Normal file
BIN
mkr_holders_screenshot.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 22 KiB |
780
renv.lock
780
renv.lock
@ -9,6 +9,571 @@
|
||||
]
|
||||
},
|
||||
"Packages": {
|
||||
"MASS": {
|
||||
"Package": "MASS",
|
||||
"Version": "7.3-57",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "71476c1d88d1ebdf31580e5a257d5d31",
|
||||
"Requirements": []
|
||||
},
|
||||
"Matrix": {
|
||||
"Package": "Matrix",
|
||||
"Version": "1.4-1",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "699c47c606293bdfbc9fd78a93c9c8fe",
|
||||
"Requirements": [
|
||||
"lattice"
|
||||
]
|
||||
},
|
||||
"R6": {
|
||||
"Package": "R6",
|
||||
"Version": "2.5.1",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "470851b6d5d0ac559e9d01bb352b4021",
|
||||
"Requirements": []
|
||||
},
|
||||
"RColorBrewer": {
|
||||
"Package": "RColorBrewer",
|
||||
"Version": "1.1-3",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "45f0398006e83a5b10b72a90663d8d8c",
|
||||
"Requirements": []
|
||||
},
|
||||
"Rcpp": {
|
||||
"Package": "Rcpp",
|
||||
"Version": "1.0.9",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "e9c08b94391e9f3f97355841229124f2",
|
||||
"Requirements": []
|
||||
},
|
||||
"askpass": {
|
||||
"Package": "askpass",
|
||||
"Version": "1.1",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "e8a22846fff485f0be3770c2da758713",
|
||||
"Requirements": [
|
||||
"sys"
|
||||
]
|
||||
},
|
||||
"base64enc": {
|
||||
"Package": "base64enc",
|
||||
"Version": "0.1-3",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "543776ae6848fde2f48ff3816d0628bc",
|
||||
"Requirements": []
|
||||
},
|
||||
"bslib": {
|
||||
"Package": "bslib",
|
||||
"Version": "0.4.0",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "be5ee090716ce1671be6cd5d7c34d091",
|
||||
"Requirements": [
|
||||
"cachem",
|
||||
"htmltools",
|
||||
"jquerylib",
|
||||
"jsonlite",
|
||||
"memoise",
|
||||
"rlang",
|
||||
"sass"
|
||||
]
|
||||
},
|
||||
"cachem": {
|
||||
"Package": "cachem",
|
||||
"Version": "1.0.6",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "648c5b3d71e6a37e3043617489a0a0e9",
|
||||
"Requirements": [
|
||||
"fastmap",
|
||||
"rlang"
|
||||
]
|
||||
},
|
||||
"cli": {
|
||||
"Package": "cli",
|
||||
"Version": "3.3.0",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "23abf173c2b783dcc43379ab9bba00ee",
|
||||
"Requirements": [
|
||||
"glue"
|
||||
]
|
||||
},
|
||||
"colorspace": {
|
||||
"Package": "colorspace",
|
||||
"Version": "2.0-3",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "bb4341986bc8b914f0f0acf2e4a3f2f7",
|
||||
"Requirements": []
|
||||
},
|
||||
"cpp11": {
|
||||
"Package": "cpp11",
|
||||
"Version": "0.4.2",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "fa53ce256cd280f468c080a58ea5ba8c",
|
||||
"Requirements": []
|
||||
},
|
||||
"crosstalk": {
|
||||
"Package": "crosstalk",
|
||||
"Version": "1.2.0",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "6aa54f69598c32177e920eb3402e8293",
|
||||
"Requirements": [
|
||||
"R6",
|
||||
"htmltools",
|
||||
"jsonlite",
|
||||
"lazyeval"
|
||||
]
|
||||
},
|
||||
"curl": {
|
||||
"Package": "curl",
|
||||
"Version": "4.3.2",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "022c42d49c28e95d69ca60446dbabf88",
|
||||
"Requirements": []
|
||||
},
|
||||
"data.table": {
|
||||
"Package": "data.table",
|
||||
"Version": "1.14.2",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "36b67b5adf57b292923f5659f5f0c853",
|
||||
"Requirements": []
|
||||
},
|
||||
"digest": {
|
||||
"Package": "digest",
|
||||
"Version": "0.6.29",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "cf6b206a045a684728c3267ef7596190",
|
||||
"Requirements": []
|
||||
},
|
||||
"dplyr": {
|
||||
"Package": "dplyr",
|
||||
"Version": "1.0.9",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "f0bda1627a7f5d3f9a0b5add931596ac",
|
||||
"Requirements": [
|
||||
"R6",
|
||||
"generics",
|
||||
"glue",
|
||||
"lifecycle",
|
||||
"magrittr",
|
||||
"pillar",
|
||||
"rlang",
|
||||
"tibble",
|
||||
"tidyselect",
|
||||
"vctrs"
|
||||
]
|
||||
},
|
||||
"ellipsis": {
|
||||
"Package": "ellipsis",
|
||||
"Version": "0.3.2",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "bb0eec2fe32e88d9e2836c2f73ea2077",
|
||||
"Requirements": [
|
||||
"rlang"
|
||||
]
|
||||
},
|
||||
"ethscore": {
|
||||
"Package": "ethscore",
|
||||
"Version": "0.1.0",
|
||||
"Source": "GitHub",
|
||||
"RemoteType": "github",
|
||||
"RemoteHost": "api.github.com",
|
||||
"RemoteRepo": "ethscore",
|
||||
"RemoteUsername": "Flipsidecrypto",
|
||||
"RemoteRef": "HEAD",
|
||||
"RemoteSha": "5413b3c77ecb97392314fd6586d4e83fda1b6613",
|
||||
"Hash": "ecb3c4ceff737d2b202fcd8baad012cb",
|
||||
"Requirements": []
|
||||
},
|
||||
"evaluate": {
|
||||
"Package": "evaluate",
|
||||
"Version": "0.15",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "699a7a93d08c962d9f8950b2d7a227f1",
|
||||
"Requirements": []
|
||||
},
|
||||
"fansi": {
|
||||
"Package": "fansi",
|
||||
"Version": "1.0.3",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "83a8afdbe71839506baa9f90eebad7ec",
|
||||
"Requirements": []
|
||||
},
|
||||
"farver": {
|
||||
"Package": "farver",
|
||||
"Version": "2.1.1",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "8106d78941f34855c440ddb946b8f7a5",
|
||||
"Requirements": []
|
||||
},
|
||||
"fastmap": {
|
||||
"Package": "fastmap",
|
||||
"Version": "1.1.0",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "77bd60a6157420d4ffa93b27cf6a58b8",
|
||||
"Requirements": []
|
||||
},
|
||||
"fs": {
|
||||
"Package": "fs",
|
||||
"Version": "1.5.2",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "7c89603d81793f0d5486d91ab1fc6f1d",
|
||||
"Requirements": []
|
||||
},
|
||||
"generics": {
|
||||
"Package": "generics",
|
||||
"Version": "0.1.3",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "15e9634c0fcd294799e9b2e929ed1b86",
|
||||
"Requirements": []
|
||||
},
|
||||
"ggplot2": {
|
||||
"Package": "ggplot2",
|
||||
"Version": "3.3.6",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "0fb26d0674c82705c6b701d1a61e02ea",
|
||||
"Requirements": [
|
||||
"MASS",
|
||||
"digest",
|
||||
"glue",
|
||||
"gtable",
|
||||
"isoband",
|
||||
"mgcv",
|
||||
"rlang",
|
||||
"scales",
|
||||
"tibble",
|
||||
"withr"
|
||||
]
|
||||
},
|
||||
"glue": {
|
||||
"Package": "glue",
|
||||
"Version": "1.6.2",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "4f2596dfb05dac67b9dc558e5c6fba2e",
|
||||
"Requirements": []
|
||||
},
|
||||
"gtable": {
|
||||
"Package": "gtable",
|
||||
"Version": "0.3.0",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "ac5c6baf7822ce8732b343f14c072c4d",
|
||||
"Requirements": []
|
||||
},
|
||||
"highr": {
|
||||
"Package": "highr",
|
||||
"Version": "0.9",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "8eb36c8125038e648e5d111c0d7b2ed4",
|
||||
"Requirements": [
|
||||
"xfun"
|
||||
]
|
||||
},
|
||||
"htmltools": {
|
||||
"Package": "htmltools",
|
||||
"Version": "0.5.3",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "6496090a9e00f8354b811d1a2d47b566",
|
||||
"Requirements": [
|
||||
"base64enc",
|
||||
"digest",
|
||||
"fastmap",
|
||||
"rlang"
|
||||
]
|
||||
},
|
||||
"htmlwidgets": {
|
||||
"Package": "htmlwidgets",
|
||||
"Version": "1.5.4",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "76147821cd3fcd8c4b04e1ef0498e7fb",
|
||||
"Requirements": [
|
||||
"htmltools",
|
||||
"jsonlite",
|
||||
"yaml"
|
||||
]
|
||||
},
|
||||
"httr": {
|
||||
"Package": "httr",
|
||||
"Version": "1.4.3",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "88d1b310583777edf01ccd1216fb0b2b",
|
||||
"Requirements": [
|
||||
"R6",
|
||||
"curl",
|
||||
"jsonlite",
|
||||
"mime",
|
||||
"openssl"
|
||||
]
|
||||
},
|
||||
"isoband": {
|
||||
"Package": "isoband",
|
||||
"Version": "0.2.5",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "7ab57a6de7f48a8dc84910d1eca42883",
|
||||
"Requirements": []
|
||||
},
|
||||
"jquerylib": {
|
||||
"Package": "jquerylib",
|
||||
"Version": "0.1.4",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "5aab57a3bd297eee1c1d862735972182",
|
||||
"Requirements": [
|
||||
"htmltools"
|
||||
]
|
||||
},
|
||||
"jsonlite": {
|
||||
"Package": "jsonlite",
|
||||
"Version": "1.8.0",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "d07e729b27b372429d42d24d503613a0",
|
||||
"Requirements": []
|
||||
},
|
||||
"knitr": {
|
||||
"Package": "knitr",
|
||||
"Version": "1.39",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "029ab7c4badd3cf8af69016b2ba27493",
|
||||
"Requirements": [
|
||||
"evaluate",
|
||||
"highr",
|
||||
"stringr",
|
||||
"xfun",
|
||||
"yaml"
|
||||
]
|
||||
},
|
||||
"labeling": {
|
||||
"Package": "labeling",
|
||||
"Version": "0.4.2",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "3d5108641f47470611a32d0bdf357a72",
|
||||
"Requirements": []
|
||||
},
|
||||
"later": {
|
||||
"Package": "later",
|
||||
"Version": "1.3.0",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "7e7b457d7766bc47f2a5f21cc2984f8e",
|
||||
"Requirements": [
|
||||
"Rcpp",
|
||||
"rlang"
|
||||
]
|
||||
},
|
||||
"lattice": {
|
||||
"Package": "lattice",
|
||||
"Version": "0.20-45",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "b64cdbb2b340437c4ee047a1f4c4377b",
|
||||
"Requirements": []
|
||||
},
|
||||
"lazyeval": {
|
||||
"Package": "lazyeval",
|
||||
"Version": "0.2.2",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "d908914ae53b04d4c0c0fd72ecc35370",
|
||||
"Requirements": []
|
||||
},
|
||||
"lifecycle": {
|
||||
"Package": "lifecycle",
|
||||
"Version": "1.0.1",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "a6b6d352e3ed897373ab19d8395c98d0",
|
||||
"Requirements": [
|
||||
"glue",
|
||||
"rlang"
|
||||
]
|
||||
},
|
||||
"magrittr": {
|
||||
"Package": "magrittr",
|
||||
"Version": "2.0.3",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "7ce2733a9826b3aeb1775d56fd305472",
|
||||
"Requirements": []
|
||||
},
|
||||
"memoise": {
|
||||
"Package": "memoise",
|
||||
"Version": "2.0.1",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "e2817ccf4a065c5d9d7f2cfbe7c1d78c",
|
||||
"Requirements": [
|
||||
"cachem",
|
||||
"rlang"
|
||||
]
|
||||
},
|
||||
"mgcv": {
|
||||
"Package": "mgcv",
|
||||
"Version": "1.8-40",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "c6b2fdb18cf68ab613bd564363e1ba0d",
|
||||
"Requirements": [
|
||||
"Matrix",
|
||||
"nlme"
|
||||
]
|
||||
},
|
||||
"mime": {
|
||||
"Package": "mime",
|
||||
"Version": "0.12",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "18e9c28c1d3ca1560ce30658b22ce104",
|
||||
"Requirements": []
|
||||
},
|
||||
"munsell": {
|
||||
"Package": "munsell",
|
||||
"Version": "0.5.0",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "6dfe8bf774944bd5595785e3229d8771",
|
||||
"Requirements": [
|
||||
"colorspace"
|
||||
]
|
||||
},
|
||||
"nlme": {
|
||||
"Package": "nlme",
|
||||
"Version": "3.1-157",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "dbca60742be0c9eddc5205e5c7ca1f44",
|
||||
"Requirements": [
|
||||
"lattice"
|
||||
]
|
||||
},
|
||||
"openssl": {
|
||||
"Package": "openssl",
|
||||
"Version": "2.0.2",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "6d3bef2e305f55c705c674653c7d7d3d",
|
||||
"Requirements": [
|
||||
"askpass"
|
||||
]
|
||||
},
|
||||
"pillar": {
|
||||
"Package": "pillar",
|
||||
"Version": "1.8.0",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "f95cf85794546c4ac2b9a6ca42e671ff",
|
||||
"Requirements": [
|
||||
"cli",
|
||||
"fansi",
|
||||
"glue",
|
||||
"lifecycle",
|
||||
"rlang",
|
||||
"utf8",
|
||||
"vctrs"
|
||||
]
|
||||
},
|
||||
"pkgconfig": {
|
||||
"Package": "pkgconfig",
|
||||
"Version": "2.0.3",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "01f28d4278f15c76cddbea05899c5d6f",
|
||||
"Requirements": []
|
||||
},
|
||||
"plotly": {
|
||||
"Package": "plotly",
|
||||
"Version": "4.10.0",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "fbb11e44d057996ca5fe40d959cacfb0",
|
||||
"Requirements": [
|
||||
"RColorBrewer",
|
||||
"base64enc",
|
||||
"crosstalk",
|
||||
"data.table",
|
||||
"digest",
|
||||
"dplyr",
|
||||
"ggplot2",
|
||||
"htmltools",
|
||||
"htmlwidgets",
|
||||
"httr",
|
||||
"jsonlite",
|
||||
"lazyeval",
|
||||
"magrittr",
|
||||
"promises",
|
||||
"purrr",
|
||||
"rlang",
|
||||
"scales",
|
||||
"tibble",
|
||||
"tidyr",
|
||||
"vctrs",
|
||||
"viridisLite"
|
||||
]
|
||||
},
|
||||
"promises": {
|
||||
"Package": "promises",
|
||||
"Version": "1.2.0.1",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "4ab2c43adb4d4699cf3690acd378d75d",
|
||||
"Requirements": [
|
||||
"R6",
|
||||
"Rcpp",
|
||||
"later",
|
||||
"magrittr",
|
||||
"rlang"
|
||||
]
|
||||
},
|
||||
"purrr": {
|
||||
"Package": "purrr",
|
||||
"Version": "0.3.4",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "97def703420c8ab10d8f0e6c72101e02",
|
||||
"Requirements": [
|
||||
"magrittr",
|
||||
"rlang"
|
||||
]
|
||||
},
|
||||
"rappdirs": {
|
||||
"Package": "rappdirs",
|
||||
"Version": "0.3.3",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "5e3c5dc0b071b21fa128676560dbe94d",
|
||||
"Requirements": []
|
||||
},
|
||||
"renv": {
|
||||
"Package": "renv",
|
||||
"Version": "0.15.5",
|
||||
@ -16,6 +581,221 @@
|
||||
"Repository": "CRAN",
|
||||
"Hash": "6a38294e7d12f5d8e656b08c5bd8ae34",
|
||||
"Requirements": []
|
||||
},
|
||||
"rlang": {
|
||||
"Package": "rlang",
|
||||
"Version": "1.0.4",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "6539dd8c651e67e3b55b5ffea106362b",
|
||||
"Requirements": []
|
||||
},
|
||||
"rmarkdown": {
|
||||
"Package": "rmarkdown",
|
||||
"Version": "2.14",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "31b60a882fabfabf6785b8599ffeb8ba",
|
||||
"Requirements": [
|
||||
"bslib",
|
||||
"evaluate",
|
||||
"htmltools",
|
||||
"jquerylib",
|
||||
"jsonlite",
|
||||
"knitr",
|
||||
"stringr",
|
||||
"tinytex",
|
||||
"xfun",
|
||||
"yaml"
|
||||
]
|
||||
},
|
||||
"sass": {
|
||||
"Package": "sass",
|
||||
"Version": "0.4.2",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "1b191143d7d3444d504277843f3a95fe",
|
||||
"Requirements": [
|
||||
"R6",
|
||||
"fs",
|
||||
"htmltools",
|
||||
"rappdirs",
|
||||
"rlang"
|
||||
]
|
||||
},
|
||||
"scales": {
|
||||
"Package": "scales",
|
||||
"Version": "1.2.0",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "6e8750cdd13477aa440d453da93d5cac",
|
||||
"Requirements": [
|
||||
"R6",
|
||||
"RColorBrewer",
|
||||
"farver",
|
||||
"labeling",
|
||||
"lifecycle",
|
||||
"munsell",
|
||||
"rlang",
|
||||
"viridisLite"
|
||||
]
|
||||
},
|
||||
"shroomDK": {
|
||||
"Package": "shroomDK",
|
||||
"Version": "0.1.0",
|
||||
"Source": "GitHub",
|
||||
"RemoteType": "github",
|
||||
"RemoteHost": "api.github.com",
|
||||
"RemoteRepo": "sdk",
|
||||
"RemoteUsername": "Flipsidecrypto",
|
||||
"RemoteRef": "HEAD",
|
||||
"RemoteSha": "7f06948b1e34d1248fbcef8db7263f45e0d36492",
|
||||
"RemoteSubdir": "r/shroomDK",
|
||||
"Hash": "f1ef16e492647dd7c251bd1c0cc9b093",
|
||||
"Requirements": [
|
||||
"httr",
|
||||
"jsonlite"
|
||||
]
|
||||
},
|
||||
"stringi": {
|
||||
"Package": "stringi",
|
||||
"Version": "1.7.8",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "a68b980681bcbc84c7a67003fa796bfb",
|
||||
"Requirements": []
|
||||
},
|
||||
"stringr": {
|
||||
"Package": "stringr",
|
||||
"Version": "1.4.0",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "0759e6b6c0957edb1311028a49a35e76",
|
||||
"Requirements": [
|
||||
"glue",
|
||||
"magrittr",
|
||||
"stringi"
|
||||
]
|
||||
},
|
||||
"sys": {
|
||||
"Package": "sys",
|
||||
"Version": "3.4",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "b227d13e29222b4574486cfcbde077fa",
|
||||
"Requirements": []
|
||||
},
|
||||
"tibble": {
|
||||
"Package": "tibble",
|
||||
"Version": "3.1.8",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "56b6934ef0f8c68225949a8672fe1a8f",
|
||||
"Requirements": [
|
||||
"fansi",
|
||||
"lifecycle",
|
||||
"magrittr",
|
||||
"pillar",
|
||||
"pkgconfig",
|
||||
"rlang",
|
||||
"vctrs"
|
||||
]
|
||||
},
|
||||
"tidyr": {
|
||||
"Package": "tidyr",
|
||||
"Version": "1.2.0",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "d8b95b7fee945d7da6888cf7eb71a49c",
|
||||
"Requirements": [
|
||||
"cpp11",
|
||||
"dplyr",
|
||||
"ellipsis",
|
||||
"glue",
|
||||
"lifecycle",
|
||||
"magrittr",
|
||||
"purrr",
|
||||
"rlang",
|
||||
"tibble",
|
||||
"tidyselect",
|
||||
"vctrs"
|
||||
]
|
||||
},
|
||||
"tidyselect": {
|
||||
"Package": "tidyselect",
|
||||
"Version": "1.1.2",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "17f6da8cfd7002760a859915ce7eef8f",
|
||||
"Requirements": [
|
||||
"ellipsis",
|
||||
"glue",
|
||||
"purrr",
|
||||
"rlang",
|
||||
"vctrs"
|
||||
]
|
||||
},
|
||||
"tinytex": {
|
||||
"Package": "tinytex",
|
||||
"Version": "0.40",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "e7b654da5e77bc4e5435a966329cd25f",
|
||||
"Requirements": [
|
||||
"xfun"
|
||||
]
|
||||
},
|
||||
"utf8": {
|
||||
"Package": "utf8",
|
||||
"Version": "1.2.2",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "c9c462b759a5cc844ae25b5942654d13",
|
||||
"Requirements": []
|
||||
},
|
||||
"vctrs": {
|
||||
"Package": "vctrs",
|
||||
"Version": "0.4.1",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "8b54f22e2a58c4f275479c92ce041a57",
|
||||
"Requirements": [
|
||||
"cli",
|
||||
"glue",
|
||||
"rlang"
|
||||
]
|
||||
},
|
||||
"viridisLite": {
|
||||
"Package": "viridisLite",
|
||||
"Version": "0.4.0",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "55e157e2aa88161bdb0754218470d204",
|
||||
"Requirements": []
|
||||
},
|
||||
"withr": {
|
||||
"Package": "withr",
|
||||
"Version": "2.5.0",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "c0e49a9760983e81e55cdd9be92e7182",
|
||||
"Requirements": []
|
||||
},
|
||||
"xfun": {
|
||||
"Package": "xfun",
|
||||
"Version": "0.31",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "a318c6f752b8dcfe9fb74d897418ab2b",
|
||||
"Requirements": []
|
||||
},
|
||||
"yaml": {
|
||||
"Package": "yaml",
|
||||
"Version": "2.3.5",
|
||||
"Source": "Repository",
|
||||
"Repository": "CRAN",
|
||||
"Hash": "458bb38374d73bf83b1bb85e353da200",
|
||||
"Requirements": []
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user