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": {
|
"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": {
|
"renv": {
|
||||||
"Package": "renv",
|
"Package": "renv",
|
||||||
"Version": "0.15.5",
|
"Version": "0.15.5",
|
||||||
@ -16,6 +581,221 @@
|
|||||||
"Repository": "CRAN",
|
"Repository": "CRAN",
|
||||||
"Hash": "6a38294e7d12f5d8e656b08c5bd8ae34",
|
"Hash": "6a38294e7d12f5d8e656b08c5bd8ae34",
|
||||||
"Requirements": []
|
"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