merging
1
.gitignore
vendored
@ -7,3 +7,4 @@
|
||||
*.txt
|
||||
secrets.json
|
||||
*.dcf
|
||||
.dcf
|
||||
|
||||
1
apps/flow/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
.DS_Store
|
||||
1
apps/flow/flowscored/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
.DS_Store
|
||||
@ -0,0 +1 @@
|
||||
optimistic_score_prototype.dcf
|
||||
@ -20,6 +20,11 @@ function(input, output, session) {
|
||||
updateActionButton(session = session, inputId = "connect",
|
||||
label = paste0("connected as ", substr(input$eth_address, 1, 7), "..."),
|
||||
icon = character(0))
|
||||
tmp <- data.table(address = input$eth_address,
|
||||
time = Sys.time(),
|
||||
score = userScore())
|
||||
write.csv(tmp, file = paste0("/rstudio-data/optimistic-data/", input$eth_address, "_", Sys.time(), ".csv"), row.names = FALSE)
|
||||
|
||||
} else {
|
||||
|
||||
updateActionButton(session = session, inputId = "connect",
|
||||
@ -119,6 +124,7 @@ function(input, output, session) {
|
||||
})
|
||||
|
||||
|
||||
|
||||
userScore <- reactive({
|
||||
if(nrow(thisAddyData()) > 0) {
|
||||
thisAddyData()$total_score
|
||||
@ -127,10 +133,13 @@ function(input, output, session) {
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
|
||||
|
||||
output$tx_handler <- renderUI({
|
||||
TransactionHandler(
|
||||
"tx_button",
|
||||
chainId = 420,
|
||||
chainId = 10,
|
||||
label = "Attest Your Score On Chain",
|
||||
contract_address = "0xD870A73a32d0b8C34CcF1E6098E9A26977CB605b",
|
||||
contract_abi = abi,
|
||||
|
||||
@ -3,22 +3,28 @@ fluidPage(
|
||||
tags$link(rel = "stylesheet", type = "text/css", href = "shiny.css"),
|
||||
tags$link(rel = "stylesheet", href = "https://fonts.googleapis.com/css?family=Roboto+Mono"),
|
||||
tags$link(rel = "stylesheet", href = "https://fonts.googleapis.com/css?family=Open+Sans"),
|
||||
tags$link(rel = "stylesheet", href = "https://fonts.googleapis.com/css?family=Rubik")
|
||||
tags$link(rel = "stylesheet", href = "https://fonts.googleapis.com/css?family=Rubik"),
|
||||
tags$script(src = "rudderstack.js")
|
||||
),
|
||||
|
||||
# background: linear-gradient(90deg, rgba(255,196,202,0.19511554621848737) 0%, rgba(255,255,255,0) 100%); color: #919EAB;
|
||||
|
||||
fluidRow(class = "titlebar",
|
||||
column(9, img(src = "app_logo.svg", height = "44px", style = "margin-left: 13px; margin-top: 13px; margin-bottom: 13px;")),
|
||||
column(3, style = "text-align: right;", actionButton("connect", icon = icon("wallet"), label = " Connect Wallet")),
|
||||
bsModal(id = "connectpop", title = "", trigger = "connect",
|
||||
WalletHandler("eth_address", chainId = 420))
|
||||
WalletHandler("eth_address", chainId = 10),
|
||||
br(),
|
||||
a("How to connect MetaMask to Optimism",
|
||||
href = "https://help.optimism.io/hc/en-us/articles/6223777057179-How-do-I-use-Optimism-with-MetaMask-",
|
||||
target = "_blank", style = "font-style: italic;"))
|
||||
),
|
||||
fluidRow(class = "wrapper",
|
||||
|
||||
fluidRow(class = "scoreholder",
|
||||
fluidRow(class = "description", div("Score up to 5 points by doing things that contribute to the Optimism Network. Then click 'Attest Your Score On Chain' to use the ",
|
||||
a("AttestationStation", href = "https://community.optimism.io/docs/governance/attestation-station/", target = "_blank"),
|
||||
a("AttestationStation",
|
||||
href = "https://community.optimism.io/docs/governance/attestation-station/",
|
||||
onclick = "rudderstack.track('optimist-click-attestation-station')",
|
||||
target = "_blank"),
|
||||
" to get your score onchain.")),
|
||||
br(),
|
||||
fluidRow(class = "scorebox",
|
||||
@ -61,15 +67,23 @@ fluidPage(
|
||||
div(class = "LINKS", "FAQ:"),
|
||||
div(class = "links",
|
||||
a(href = "https://community.optimism.io/docs/governance/attestation-station/",
|
||||
"What is Attestation Station?", target = "_blank")),
|
||||
"What is Attestation Station?",
|
||||
onclick = "rudderstack.track('optimist-click-attestation-station')",
|
||||
target = "_blank")),
|
||||
div(class = "links",
|
||||
a(href = "https://github.com/FlipsideCrypto/user_metrics/tree/main/apps/optimism/optimistic_score_prototype",
|
||||
"Can I have this code?", target = "_blank")),
|
||||
"Can I have this code?",
|
||||
onclick = "rudderstack.track('optimist-click-github')",
|
||||
target = "_blank")),
|
||||
div(class = "links",
|
||||
a(href = "https://app.flipsidecrypto.com/dashboard/optimist-score-queries-data-Jp7kIN",
|
||||
"Can I have this data?", target = "_blank")),
|
||||
"Can I have this data?",
|
||||
onclick = "rudderstack.track('optimist-click-velocity')",
|
||||
target = "_blank")),
|
||||
div(class = "links",
|
||||
a(href = "https://flipsidecrypto.xyz/", "What is Flipside?", target = "_blank"))
|
||||
a(href = "https://flipsidecrypto.xyz/", "What is Flipside?",
|
||||
onclick = "rudderstack.track('optimist-click-flipsidexyz')",
|
||||
target = "_blank"))
|
||||
)
|
||||
|
||||
|
||||
|
||||
@ -38,7 +38,7 @@ op.metrics.w[, delegation_score := ifelse(n_delegations > 0, 1, 0)]
|
||||
op.metrics.w[, nft_score := ifelse(n_trades > 0, 1, 0)]
|
||||
op.metrics.w[, dex_score := ifelse(n_swaps > 0, 1, 0)]
|
||||
|
||||
op.metrics.w[, total_score := airdrop_score + cex_score + delegation_score + nft_score + dex_score]
|
||||
op.metrics.w[, total_score := airdrop_score + 1 + delegation_score + nft_score + dex_score]
|
||||
|
||||
op.metrics.w <- op.metrics.w[total_score > 0]
|
||||
|
||||
|
||||
@ -0,0 +1,267 @@
|
||||
---
|
||||
title: "Update Optimist Score Prototype Data"
|
||||
author: "Angeal"
|
||||
output: html_document
|
||||
---
|
||||
|
||||
```{r setup, include=FALSE}
|
||||
knitr::opts_chunk$set(echo = TRUE)
|
||||
```
|
||||
|
||||
## Run Updates
|
||||
Hello I am running this at `r Sys.time()`
|
||||
|
||||
```{r update}
|
||||
library(fasttime)
|
||||
library(gridExtra)
|
||||
library(ggplot2)
|
||||
library(data.table)
|
||||
library(reshape2)
|
||||
library(dplyr)
|
||||
library(dbplyr)
|
||||
library(dplyr)
|
||||
library(odbc)
|
||||
library(RJSONIO)
|
||||
library(magrittr)
|
||||
library(RJSONIO)
|
||||
library(xts)
|
||||
library(quantmod)
|
||||
library(fTrading)
|
||||
library(curl)
|
||||
library(stringr)
|
||||
library(aws.s3)
|
||||
library(RPostgres)
|
||||
|
||||
source("/home/data-science/data_science/util/util_functions.R")
|
||||
|
||||
airdrop.claims <- QuerySnowflake("
|
||||
SELECT
|
||||
event_inputs:recipient::string as user_address,
|
||||
count(distinct(tx_hash)) AS n_claims,
|
||||
sum(event_inputs:amount::numeric / pow(10,18)) as token_volume
|
||||
from optimism.core.fact_event_logs
|
||||
WHERE
|
||||
block_timestamp > '2022-05-30'
|
||||
AND
|
||||
origin_function_signature = '0x2e7ba6ef' -- claim
|
||||
AND
|
||||
contract_address = lower('0xFeDFAF1A10335448b7FA0268F56D2B44DBD357de') -- distr contract
|
||||
AND
|
||||
user_address NOT IN (
|
||||
SELECT address
|
||||
FROM FLIPSIDE_PROD_DB.CROSSCHAIN.ADDRESS_LABELS
|
||||
WHERE blockchain = 'optimism')
|
||||
GROUP BY user_address
|
||||
")
|
||||
cex.activity <- QuerySnowflake("
|
||||
WITH wdraws AS (SELECT
|
||||
to_address AS user_address,
|
||||
tt.contract_address AS token_contract,
|
||||
symbol AS token_symbol,
|
||||
count(tt.tx_hash) AS n_withdrawals,
|
||||
sum(raw_amount) / pow(10, decimals) AS wdraw_token_volume,
|
||||
sum(raw_amount) / pow(10, decimals) * price AS wdraw_usd_volume
|
||||
FROM
|
||||
optimism.core.fact_token_transfers tt
|
||||
JOIN optimism.core.FACT_HOURLY_TOKEN_PRICES pp
|
||||
ON date_trunc('hour', tt.block_timestamp) = pp.hour
|
||||
AND tt.contract_address = pp.token_address
|
||||
WHERE
|
||||
from_address IN
|
||||
(SELECT address
|
||||
FROM FLIPSIDE_PROD_DB.CROSSCHAIN.ADDRESS_LABELS
|
||||
WHERE blockchain = 'optimism' AND label_type = 'cex' AND label_subtype = 'hot_wallet')
|
||||
AND
|
||||
to_address NOT IN (
|
||||
SELECT address
|
||||
FROM FLIPSIDE_PROD_DB.CROSSCHAIN.ADDRESS_LABELS
|
||||
WHERE blockchain != 'optimism')
|
||||
GROUP BY user_address, token_contract, token_symbol, decimals, price),
|
||||
|
||||
deps AS (
|
||||
SELECT
|
||||
from_address AS user_address,
|
||||
tt.contract_address AS token_contract,
|
||||
symbol AS token_symbol,
|
||||
count(tt.tx_hash) AS n_deposits,
|
||||
sum(raw_amount) / pow(10, decimals) AS dep_token_volume,
|
||||
sum(raw_amount) / pow(10, decimals) * price AS dep_usd_volume
|
||||
FROM
|
||||
optimism.core.fact_token_transfers tt
|
||||
JOIN optimism.core.FACT_HOURLY_TOKEN_PRICES pp
|
||||
ON date_trunc('hour', tt.block_timestamp) = pp.hour
|
||||
AND tt.contract_address = pp.token_address
|
||||
WHERE
|
||||
to_address IN
|
||||
(SELECT address
|
||||
FROM FLIPSIDE_PROD_DB.CROSSCHAIN.ADDRESS_LABELS
|
||||
WHERE blockchain = 'optimism' AND label_type = 'cex' AND label_subtype = 'deposit_wallet')
|
||||
AND
|
||||
from_address NOT IN (
|
||||
SELECT address
|
||||
FROM FLIPSIDE_PROD_DB.CROSSCHAIN.ADDRESS_LABELS
|
||||
WHERE blockchain != 'optimism')
|
||||
GROUP BY user_address, token_contract, token_symbol, decimals, price
|
||||
)
|
||||
SELECT
|
||||
COALESCE(ds.user_address, ws.user_address) AS user_address,
|
||||
'tbd' AS exchange_name,
|
||||
COALESCE(ds.token_contract, ws.token_contract) AS token_contract,
|
||||
SPLIT_PART(COALESCE(ds.token_contract, ws.token_contract), '.', 2) AS token_symbol,
|
||||
|
||||
COALESCE(n_deposits, 0) AS n_deposits,
|
||||
COALESCE(n_withdrawals, 0) AS n_withdrawals,
|
||||
|
||||
COALESCE(dep_token_volume, 0) AS dep_token_volume,
|
||||
COALESCE(dep_usd_volume, 0) AS dep_usd_volume,
|
||||
COALESCE(wdraw_token_volume, 0) AS wdraw_token_volume,
|
||||
COALESCE(wdraw_usd_volume, 0) AS wdraw_usd_volume
|
||||
|
||||
FROM deps ds
|
||||
FULL OUTER JOIN wdraws ws ON ds.user_address = ws.user_address
|
||||
AND ds.token_contract = ws.token_contract
|
||||
")
|
||||
|
||||
chain.stakes <- QuerySnowflake("
|
||||
WITH format_delegations AS (
|
||||
select
|
||||
*,
|
||||
(raw_new_balance - raw_previous_balance) / pow(10, 18) AS net_delegation
|
||||
FROM optimism.core.fact_delegations
|
||||
WHERE
|
||||
delegation_type != 'Re-Delegation'
|
||||
)
|
||||
SELECT
|
||||
delegator AS user_address,
|
||||
'0x4200000000000000000000000000000000000042' AS token_contract,
|
||||
'OP' AS token_symbol,
|
||||
count(distinct(tx_hash)) AS n_stakes,
|
||||
0 AS n_unstakes,
|
||||
sum(net_delegation) AS stake_token_volume,
|
||||
0 AS stake_usd_volume,
|
||||
0 AS unstake_token_volume,
|
||||
0 AS unstake_usd_volume
|
||||
FROM format_delegations
|
||||
WHERE
|
||||
delegator NOT IN (SELECT address FROM FLIPSIDE_PROD_DB.CROSSCHAIN.ADDRESS_LABELS where blockchain = 'optimism')
|
||||
GROUP BY
|
||||
delegator
|
||||
")
|
||||
|
||||
nft.trades <- QuerySnowflake("
|
||||
WITH sells AS (
|
||||
SELECT
|
||||
seller_address AS user_address,
|
||||
platform_name AS marketplace,
|
||||
nft_address AS nf_token_contract,
|
||||
count(distinct(tokenid)) AS n_nfts_sold,
|
||||
currency_symbol AS sell_symbol,
|
||||
currency_address AS currency,
|
||||
count(tx_hash) AS n_sells,
|
||||
sum(price) AS token_sell_volume,
|
||||
sum(price_usd) AS sell_usd_volume
|
||||
FROM
|
||||
optimism.core.ez_nft_sales ns
|
||||
WHERE
|
||||
user_address NOT IN (SELECT address FROM FLIPSIDE_PROD_DB.CROSSCHAIN.ADDRESS_LABELS where blockchain = 'optimism')
|
||||
GROUP BY
|
||||
seller_address, marketplace, nf_token_contract, sell_symbol, currency
|
||||
),
|
||||
buys AS (
|
||||
SELECT
|
||||
buyer_address AS user_address,
|
||||
platform_name AS marketplace,
|
||||
nft_address AS nf_token_contract,
|
||||
count(distinct(tokenid)) AS n_nfts_bought,
|
||||
currency_symbol AS buy_symbol,
|
||||
currency_address AS currency,
|
||||
count(tx_hash) AS n_buys,
|
||||
sum(price) AS token_buy_volume,
|
||||
sum(price_usd) AS buy_usd_volume
|
||||
FROM
|
||||
optimism.core.ez_nft_sales ns
|
||||
WHERE
|
||||
user_address NOT IN (SELECT address FROM FLIPSIDE_PROD_DB.CROSSCHAIN.ADDRESS_LABELS where blockchain = 'optimism')
|
||||
GROUP BY
|
||||
buyer_address, marketplace, nf_token_contract, buy_symbol, currency
|
||||
)
|
||||
|
||||
SELECT
|
||||
COALESCE(sells.user_address, buys.user_address) AS user_address,
|
||||
COALESCE(sells.marketplace, buys.marketplace) AS marketplace,
|
||||
COALESCE(sells.nf_token_contract, buys.nf_token_contract) AS nf_token_contract,
|
||||
COALESCE(buys.n_nfts_bought, 0) AS n_nfts_bought,
|
||||
COALESCE(sells.n_nfts_sold, 0) AS n_nfts_sold,
|
||||
SPLIT_PART(COALESCE(sells.nf_token_contract, buys.nf_token_contract), '.', 2) AS nft_project,
|
||||
COALESCE(sells.currency, buys.currency) AS token_contract,
|
||||
COALESCE(sells.sell_symbol, buys.buy_symbol) AS token_symbol,
|
||||
COALESCE(n_buys, 0) AS n_buys,
|
||||
COALESCE(token_buy_volume, 0) AS buy_token_volume,
|
||||
COALESCE(buy_usd_volume, 0) AS buy_usd_volume,
|
||||
COALESCE(n_sells, 0) AS n_sells,
|
||||
COALESCE(token_sell_volume, 0) AS sell_token_volume,
|
||||
COALESCE(sell_usd_volume, 0) AS sell_usd_volume
|
||||
FROM sells
|
||||
FULL OUTER JOIN buys ON sells.user_address = buys.user_address
|
||||
AND sells.marketplace = buys.marketplace
|
||||
AND sells.nf_token_contract = buys.nf_token_contract
|
||||
AND sells.currency = buys.currency
|
||||
")
|
||||
|
||||
|
||||
dex.swaps <- QuerySnowflake("
|
||||
|
||||
WITH swaps AS (
|
||||
SELECT
|
||||
tx_hash,
|
||||
ORIGIN_FROM_ADDRESS AS user_address
|
||||
|
||||
FROM
|
||||
OPTIMISM.CORE.FACT_EVENT_LOGS
|
||||
|
||||
WHERE
|
||||
(lower(event_name) LIKE '%swap%'
|
||||
OR
|
||||
tx_hash IN (select tx_hash FROM OPTIMISM.VELODROME.EZ_SWAPS WHERE block_timestamp > current_date - 180) )
|
||||
AND
|
||||
ORIGIN_FROM_ADDRESS NOT IN (SELECT address FROM FLIPSIDE_PROD_DB.CROSSCHAIN.ADDRESS_LABELS where blockchain = 'optimism')
|
||||
)
|
||||
|
||||
SELECT
|
||||
user_address,
|
||||
count(distinct(tx_hash)) AS n_swaps
|
||||
FROM
|
||||
swaps
|
||||
GROUP BY
|
||||
user_address
|
||||
")
|
||||
|
||||
op.metrics.w <- MergeDataFrames(
|
||||
list(airdrop.claims[, list(user_address, airdrop_tokens_claimed = token_volume)],
|
||||
cex.activity[, list(net_cex_wdraw = sum(wdraw_usd_volume) - sum(dep_usd_volume)), by = user_address],
|
||||
chain.stakes[, list(user_address, n_delegations = n_stakes)],
|
||||
nft.trades[, list(n_trades = sum(n_buys + n_sells)), by = user_address],
|
||||
dex.swaps),
|
||||
by = "user_address", all = TRUE
|
||||
)
|
||||
|
||||
ReplaceValues(op.metrics.w)
|
||||
|
||||
op.metrics.w[, airdrop_score := ifelse(airdrop_tokens_claimed > 0, 1, 0)]
|
||||
op.metrics.w[, cex_score := ifelse(net_cex_wdraw >= 0, 1, 0)]
|
||||
op.metrics.w[, delegation_score := ifelse(n_delegations > 0, 1, 0)]
|
||||
op.metrics.w[, nft_score := ifelse(n_trades > 0, 1, 0)]
|
||||
op.metrics.w[, dex_score := ifelse(n_swaps > 0, 1, 0)]
|
||||
|
||||
op.metrics.w[, total_score := airdrop_score + 1 + delegation_score + nft_score + dex_score]
|
||||
|
||||
op.metrics.w <- op.metrics.w[total_score > 0]
|
||||
|
||||
save(op.metrics.w, file = "/rstudio-data/optimist_score_prototype_data.RData")
|
||||
print(file.info("/rstudio-data/optimist_score_prototype_data.RData"))
|
||||
|
||||
```
|
||||
|
||||
Done updating at `r Sys.time()`
|
||||
|
||||
The end. Byeeeee.
|
||||
@ -0,0 +1,3 @@
|
||||
!function(){var e=window.rudderanalytics=window.rudderanalytics||[];e.methods=["load","page","track","identify","alias","group","ready","reset","getAnonymousId","setAnonymousId"],e.factory=function(t){return function(){var r=Array.prototype.slice.call(arguments);return r.unshift(t),e.push(r),e}};for(var t=0;t<e.methods.length;t++){var r=e.methods[t];e[r]=e.factory(r)}e.loadJS=function(e,t){var r=document.createElement("script");r.type="text/javascript",r.async=!0,r.src="https://cdn.rudderlabs.com/v1.1/rudder-analytics.min.js";var a=document.getElementsByTagName("script")[0];a.parentNode.insertBefore(r,a)},e.loadJS(),
|
||||
e.load('29a6Pl6fLlx4iYiOdfxRt0IBad9','https://flipsidecrworumuyiulf.dataplane.rudderstack.com'),
|
||||
e.page()}();
|
||||
@ -1,5 +1,5 @@
|
||||
body {
|
||||
background: white;
|
||||
background: url('Background_03.png');
|
||||
font-family: 'Open Sans', sans-serif;
|
||||
font-size: 16px;
|
||||
font-weight: 400;
|
||||
@ -7,7 +7,11 @@ body {
|
||||
}
|
||||
|
||||
a, a:hover, a:visited, a:active {
|
||||
color: red;
|
||||
color: #F60001;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: #F6000195;
|
||||
}
|
||||
|
||||
.container-fluid {
|
||||
@ -34,10 +38,18 @@ a, a:hover, a:visited, a:active {
|
||||
color: #F60001;
|
||||
font-size: 1.02em;
|
||||
padding: 8px;
|
||||
background: linear-gradient(white, white) padding-box,
|
||||
linear-gradient(to right, #F60001, #F60001) border-box;
|
||||
border-radius: 4px;
|
||||
border: 3px solid transparent;
|
||||
border: 3px solid #F60001;
|
||||
}
|
||||
|
||||
#connect:hover {
|
||||
background-color: #F60001;
|
||||
color: white;
|
||||
}
|
||||
|
||||
#connect:visited {
|
||||
background-color: transparent;
|
||||
color: #F60001;
|
||||
}
|
||||
|
||||
.walletpart {
|
||||
@ -63,9 +75,9 @@ a, a:hover, a:visited, a:active {
|
||||
line-height: 50px;
|
||||
width: 20%;
|
||||
background-color: white;
|
||||
border: 2px red solid;
|
||||
border: 2px #F60001 solid;
|
||||
border-radius: 4px 0 0 4px;
|
||||
color: red;
|
||||
color: #F60001;
|
||||
text-align: center;
|
||||
font-family: Rubik;
|
||||
font-weight: 600;
|
||||
@ -77,9 +89,9 @@ a, a:hover, a:visited, a:active {
|
||||
height: 50px;
|
||||
line-height: 50px;
|
||||
width: 80%;
|
||||
background-color: red;
|
||||
background-color: #F60001;
|
||||
border-radius: 0 4px 4px 0;
|
||||
border: 2px red solid;
|
||||
border: 2px #F60001 solid;
|
||||
color: white;
|
||||
text-align: left;
|
||||
padding-left: 10px;
|
||||
@ -87,7 +99,7 @@ a, a:hover, a:visited, a:active {
|
||||
|
||||
|
||||
.scoreholder {
|
||||
border: 2px solid red;
|
||||
border: 2px solid #F60001;
|
||||
border-radius: 17px;
|
||||
padding: 10px 30px 0 37px;
|
||||
max-width: 630px;
|
||||
@ -120,7 +132,7 @@ a, a:hover, a:visited, a:active {
|
||||
}
|
||||
|
||||
.scorecircle {
|
||||
background-color: red;
|
||||
background-color: #F60001;
|
||||
color: white;
|
||||
font-family: Rubik;
|
||||
font-size: 4em;
|
||||
@ -138,9 +150,9 @@ a, a:hover, a:visited, a:active {
|
||||
}
|
||||
|
||||
button {
|
||||
border: 1px red solid;
|
||||
border: 1px #F60001 solid;
|
||||
padding: 5px;
|
||||
color: red;
|
||||
color: #F60001;
|
||||
background-color: white;
|
||||
margin: 10px;
|
||||
border-radius: 4px;
|
||||
@ -158,6 +170,8 @@ button {
|
||||
border: 3px solid transparent;
|
||||
}
|
||||
|
||||
|
||||
|
||||
.scorecolumns {
|
||||
padding-left: 30px;
|
||||
padding-right: 30px;
|
||||
@ -179,7 +193,7 @@ button {
|
||||
border: 1px solid #F60001;
|
||||
}
|
||||
.modal-title {
|
||||
color: red;
|
||||
color: #F60001;
|
||||
font-weight: bold;
|
||||
border: none;
|
||||
}
|
||||
@ -194,9 +208,19 @@ button {
|
||||
|
||||
|
||||
.links {
|
||||
color: red;
|
||||
color: #F60001;
|
||||
font-size: 0.95em;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
|
||||
#tx_button > button:disabled {
|
||||
background-color: #F6000197;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
#tx_button > button:hover:enabled {
|
||||
background-color: #CF0018
|
||||
}
|
||||
|
||||
|
||||
|
||||
1
apps/solana/solarscored/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
solarscored_data.RData
|
||||
69
apps/solana/solarscored/edit_svg.R
Normal file
@ -0,0 +1,69 @@
|
||||
library(stringr)
|
||||
setwd("~/user_metrics/apps/solana/solarscored")
|
||||
|
||||
# read in the svg text
|
||||
svg.text <- readLines("wheelpart.svg")
|
||||
|
||||
# split into parts on the layer opening tag
|
||||
split.at.1 <- "Layer_"
|
||||
sgv.text.split <- strsplit(svg.text, split = split.at.1, fixed = TRUE)[[1]]
|
||||
|
||||
|
||||
# grab the layer with the slices
|
||||
# you have to know which one it is
|
||||
# we're looking for layer 1
|
||||
center.slices <- sgv.text.split[which(substr(sgv.text.split, 1, 1) == "1")]
|
||||
center.slices <- '<g id="Layer_1"><path class="cls-7" d="M421.63,216.81c51.13,0,99.47,23.28,131.35,63.25l-47.29,37.71c-20.4-25.58-51.34-40.48-84.06-40.48v-60.48Z"/><path class="cls-9" d="M552.98,280.07c31.88,39.97,43.82,92.29,32.44,142.13l-58.96-13.46c7.28-31.9-.36-65.38-20.76-90.96l47.29-37.71Z"/><path class="cls-17" d="M585.42,422.19c-11.38,49.84-44.83,91.8-90.9,113.98l-26.24-54.49c29.48-14.2,50.89-41.05,58.17-72.95l58.96,13.46Z"/><path class="cls-5" d="M494.52,536.17c-46.06,22.18-99.72,22.18-145.78,0l26.24-54.49c29.48,14.2,63.82,14.2,93.3,0l26.24,54.49Z"/><path class="cls-11" d="M348.74,536.17c-46.06-22.18-79.52-64.13-90.9-113.98l58.96-13.46c7.28,31.9,28.69,58.75,58.17,72.95l-26.24,54.49Z"/><path class="cls-13" d="M257.84,422.19c-11.38-49.84,.56-102.16,32.44-142.13l47.29,37.71c-20.4,25.58-28.04,59.06-20.76,90.96l-58.96,13.46Z"/><path class="cls-15" d="M290.28,280.07c31.88-39.97,80.22-63.25,131.35-63.25v60.48c-32.72,0-63.66,14.9-84.06,40.48l-47.29-37.71Z"/><path class="cls-7" d="M421.63,156.33c69.53,0,135.28,31.66,178.63,86.03l-47.29,37.71c-31.88-39.97-80.22-63.25-131.35-63.25v-60.48Z"/><path class="cls-9" d="M600.27,242.36c43.35,54.36,59.59,125.51,44.12,193.3l-58.96-13.46c11.38-49.84-.56-102.16-32.44-142.13l47.29-37.71Z"/><path class="cls-17" d="M644.38,435.65c-15.47,67.79-60.97,124.84-123.62,155.01l-26.24-54.49c46.06-22.18,79.52-64.13,90.9-113.98l58.96,13.46Z"/><path class="cls-5" d="M520.77,590.66c-62.65,30.17-135.62,30.17-198.27,0l26.24-54.49c46.06,22.18,99.72,22.18,145.78,0l26.24,54.49Z"/><path class="cls-11" d="M322.5,590.66c-62.65-30.17-108.15-87.22-123.62-155.01l58.96-13.46c11.38,49.84,44.83,91.8,90.9,113.98l-26.24,54.49Z"/><path class="cls-13" d="M198.88,435.65c-15.47-67.79,.77-138.93,44.12-193.3l47.29,37.71c-31.88,39.97-43.82,92.29-32.44,142.13l-58.96,13.46Z"/><path class="cls-15" d="M243,242.36c43.35-54.36,109.1-86.03,178.63-86.03v60.48c-51.13,0-99.47,23.28-131.35,63.25l-47.29-37.71Z"/><path class="cls-7" d="M421.63,95.85c87.94,0,171.09,40.04,225.92,108.8l-47.29,37.71c-43.35-54.36-109.1-86.03-178.63-86.03v-60.48Z"/><path class="cls-9" d="M647.55,204.65c54.83,68.75,75.37,158.73,55.8,244.46l-58.96-13.46c15.47-67.79-.77-138.93-44.12-193.3l47.29-37.71Z"/><path class="cls-17" d="M703.35,449.11c-19.57,85.73-77.11,157.89-156.34,196.04l-26.24-54.49c62.65-30.17,108.15-87.22,123.62-155.01l58.96,13.46Z"/><path class="cls-5" d="M547.01,645.16c-79.23,38.15-171.52,38.15-250.75,0l26.24-54.49c62.65,30.17,135.62,30.17,198.27,0l26.24,54.49Z"/><path class="cls-11" d="M296.26,645.16c-79.23-38.15-136.77-110.31-156.34-196.04l58.96-13.46c15.47,67.79,60.97,124.84,123.62,155.01l-26.24,54.49Z"/><path class="cls-13" d="M139.92,449.11c-19.57-85.73,.97-175.71,55.8-244.46l47.29,37.71c-43.35,54.36-59.59,125.51-44.12,193.3l-58.96,13.46Z"/><path class="cls-15" d="M195.71,204.65c54.83-68.75,137.98-108.8,225.92-108.8v60.48c-69.53,0-135.28,31.66-178.63,86.03l-47.29-37.71Z"/></g>'
|
||||
|
||||
split.at.2 <- "path"
|
||||
|
||||
block.orders <- c("nfts", "governance", "variety", "staking", "longevity", "bridging", "activity")
|
||||
wheel.colors <- c("#30CFCF", "#A682EE", "#23D1BA", "#9764E8", "#3EAFE0", "#8880E5", "#26D994")
|
||||
|
||||
editing <- str_split(center.slices, "path")[[1]]
|
||||
|
||||
intro.bit <- editing[1]
|
||||
|
||||
editing <- editing[2:22]
|
||||
|
||||
# insert class name to each slice shape
|
||||
edited <- sapply(1:21, function(i) {
|
||||
|
||||
#class name:
|
||||
cat.name <- block.orders[ifelse(i %% 7 == 0, 7, i %% 7)]
|
||||
class.name <- paste0(cat.name, ceiling((i)/7))
|
||||
|
||||
str_replace( editing[i], "cls-(.*?) ", paste0(class.name, "\" "))
|
||||
|
||||
})
|
||||
|
||||
edited.slices <- paste(c(intro.bit, edited), collapse = split.at.2)
|
||||
|
||||
# add this to the top section with the css
|
||||
new.header <- str_replace(string = sgv.text.split[1],
|
||||
pattern = "<style>.",
|
||||
replacement = paste0("<style>",
|
||||
paste(".", paste0(rep(block.orders, each = 3), 1:3), "{fill:",
|
||||
rep(wheel.colors, each = 3),
|
||||
";opacity:%s;}", sep = "", collapse = ""),
|
||||
".")
|
||||
)
|
||||
|
||||
edited.svg <- paste(c(new.header,
|
||||
sgv.text.split[which(substr(sgv.text.split, 1, 1) == "3")],
|
||||
edited.slices,
|
||||
sgv.text.split[which(substr(sgv.text.split, 1, 1) == "2")],
|
||||
sgv.text.split[which(substr(sgv.text.split, 1, 1) == "5")]),
|
||||
collapse = split.at.1)
|
||||
|
||||
writeLines(edited.svg, con = "wheel.svg")
|
||||
|
||||
# 1 slices
|
||||
# 2 text
|
||||
# 3 border
|
||||
# 5 icon
|
||||
|
||||
substr(sgv.text.split, 1, 1)
|
||||
|
||||
|
||||
|
||||
@ -1,144 +1,41 @@
|
||||
# lunatics
|
||||
setwd('/Users/kellen/git/user_metrics/apps/solana/solarscored')
|
||||
|
||||
library(shiny)
|
||||
library(data.table)
|
||||
library(stringr)
|
||||
library(shinyWidgets)
|
||||
library(reactable)
|
||||
library(plotly)
|
||||
library(shinyjs)
|
||||
library(capture)
|
||||
library(shinyBS)
|
||||
library(dplyr)
|
||||
library(solAttestR)
|
||||
# library(terraConnectr)
|
||||
library(shinycssloaders)
|
||||
|
||||
#install.packages("~/user_metrics/apps/solana/solAttestR_0.0.0.9000.tar.gz", repos = NULL, type="source")
|
||||
#install.packages("~/user_metrics/apps/optimism/opAttestR_0.0.0.9000.tar.gz", repos = NULL, type="source")
|
||||
wheel.colors <- c("#30CFCF", "#A682EE", "#23D1BA", "#9764E8", "#3EAFE0", "#8880E5", "#26D994")
|
||||
|
||||
svgdata <- readLines("wheel.svg")
|
||||
|
||||
#not used:
|
||||
#library(stringr)
|
||||
#library(showtext)
|
||||
#library(htmltools)
|
||||
|
||||
rating.max <- 420
|
||||
|
||||
#load("data.RData")
|
||||
file.location <- ifelse(Sys.info()[["user"]] == "rstudio-connect",
|
||||
"/rstudio-data/solarscored_data.RData",
|
||||
"solarscored_data.RData")
|
||||
user <- Sys.info()[['user']]
|
||||
isRstudio <- user == 'rstudio-connect'
|
||||
baseDir <- ifelse(isRstudio, '/rstudio-data/solarscored_data.RData', './')
|
||||
file.location <- paste0(baseDir, 'solarscored_data.RData')
|
||||
load(file.location)
|
||||
# print(exists("score.criteria"))
|
||||
score_criteria <- read.csv('./score_criteria.csv') %>% as.data.table()
|
||||
score_criteria <- read.csv(
|
||||
paste0(baseDir, 'score_criteria.csv')
|
||||
) %>% as.data.table()
|
||||
|
||||
bar.plot.colors <- c("#14F195", "#B2FBDC")
|
||||
|
||||
|
||||
round_any <- function(x, accuracy, f=round){f(x/ accuracy) * accuracy}
|
||||
# setnames(df2, c("user_address", "longevity", "activity", "governor", "bridgor", "staker", "explorer", "nfts",
|
||||
# "longevity1", "longevity2", "longevity3", "activity1", "activity2", "activity3", "governance1", "governance2", "governance3",
|
||||
# "bridging1", "bridging2", "bridging3", "staking1", "staking2", "staking3",
|
||||
# "diversification1", "diversification2", "diversification3", "nfts1", "nfts2", "nfts3", "total_score"))
|
||||
|
||||
RemoveNAs <- function(table = dt,
|
||||
na.to = 0) {
|
||||
for (j in seq_len(ncol(table)))
|
||||
set(table,which(is.na(table[[j]])),j,na.to)
|
||||
}
|
||||
base.style <- rep("20%", times = 21)
|
||||
|
||||
Rescale <- function(x, newrange, oldrange = NULL) {
|
||||
if(is.null(oldrange)){
|
||||
if (is.numeric(x) && is.numeric(newrange)) {
|
||||
xna <- is.na(x)
|
||||
if (all(xna))
|
||||
return(x)
|
||||
if (any(xna))
|
||||
xrange <- range(x[!xna])
|
||||
else xrange <- range(x)
|
||||
if (xrange[1] == xrange[2])
|
||||
return(x)
|
||||
mfac <- (newrange[2] - newrange[1])/(xrange[2] - xrange[1])
|
||||
return(newrange[1] + (x - xrange[1]) * mfac)
|
||||
} else {
|
||||
warning("Only numeric objects can be rescaled")
|
||||
return(x)
|
||||
}
|
||||
} else if(!is.null(oldrange)){
|
||||
if (is.numeric(x) && is.numeric(newrange)) {
|
||||
xna <- is.na(x)
|
||||
if (all(xna))
|
||||
return(x)
|
||||
mfac <- (newrange[2] - newrange[1])/(oldrange[2] - oldrange[1])
|
||||
new.vals <- newrange[1] + (x - oldrange[1]) * mfac
|
||||
if(length(new.vals[ new.vals > max(newrange)]))
|
||||
new.vals[ new.vals > max(newrange)] <- max(newrange)
|
||||
if(length(new.vals[ new.vals < min(newrange)]))
|
||||
new.vals[ new.vals < min(newrange)] <- min(newrange)
|
||||
return(new.vals)
|
||||
} else {
|
||||
warning("Only numeric objects can be rescaled")
|
||||
return(x)
|
||||
}
|
||||
}
|
||||
}
|
||||
categories <- c("nfts", "governance", "variety", "staking", "longevity", "bridge", "activity")
|
||||
|
||||
|
||||
MergeDataFrames <- function(list.of.data.frames,
|
||||
by=NULL,
|
||||
all=NULL){
|
||||
if(is.null(by)) stop("You need to explicitly define your 'by' statement")
|
||||
if(is.null(all)) {
|
||||
all <- FALSE
|
||||
message("MergeDataFrames: only complete rows will be returned. Use all=TRUE to return all rows.")
|
||||
}
|
||||
Reduce(
|
||||
function(...)
|
||||
merge(...,
|
||||
by=by,
|
||||
all=all),
|
||||
list.of.data.frames)
|
||||
}
|
||||
empty.df <- data.table(total_score=0,longevity=0,longevity_value=0,activity=0,activity_value=0,governance=0,governance_value=0,bridge=0,bridge_value=0,staking=0,staking_value=0,variety=0,variety_value=0,nfts=0,nft_value=0)
|
||||
|
||||
|
||||
# theme_univ3_small <- function(base_size = 12,
|
||||
# bgcolor.dark = "white",
|
||||
# bgcolor.light = "white",
|
||||
# text.color = "white",
|
||||
# title.color = "#white",
|
||||
# lines.color = "#EDEDF3") {
|
||||
# half_line <- base_size/2
|
||||
# theme(text = element_text(family = 'roboto-mono',
|
||||
# face = "plain",
|
||||
# colour = text.color, size = base_size,
|
||||
# lineheight = 0.9, hjust = 0.5,
|
||||
# vjust = 0.5, angle = 0,
|
||||
# margin = margin(), debug = FALSE),
|
||||
#
|
||||
# plot.background = element_rect(color = NA, fill = "black"),
|
||||
# plot.title = element_text(size = rel(1.2),
|
||||
# color = title.color,
|
||||
# margin = margin(b = half_line/2)),
|
||||
#
|
||||
# strip.background = element_rect(fill = bgcolor.dark, colour = NA),
|
||||
# strip.text = element_text(colour = text.color, size = rel(0.8)),
|
||||
# strip.text.x = element_text(margin = margin(t = half_line/2,
|
||||
# b = half_line/2)),
|
||||
# strip.text.y = element_text(angle = -90,
|
||||
# margin = margin(l = half_line/2,
|
||||
# r = half_line/2)),
|
||||
#
|
||||
# axis.line = element_blank(),
|
||||
# axis.ticks.x = element_blank(),
|
||||
# axis.ticks.y = element_blank(),
|
||||
#
|
||||
# axis.text = element_text(color = text.color, size = base_size - 2),
|
||||
#
|
||||
# panel.background = element_rect(fill = "transparent", colour = NA),
|
||||
# panel.border = element_blank(),
|
||||
# panel.grid.major.x = element_blank(),
|
||||
# panel.grid.major.y = element_blank(),
|
||||
# panel.grid.minor.x = element_blank(),
|
||||
# panel.grid.minor.y = element_blank(),
|
||||
#
|
||||
# legend.background = element_rect(colour = NA, fill = "transparent"),
|
||||
# legend.key = element_rect(colour = NA, fill = "transparent"),
|
||||
#
|
||||
# axis.title.x=element_blank(),
|
||||
# axis.text.x=element_blank(),
|
||||
# axis.title.y=element_blank(),
|
||||
# axis.text.y=element_blank())
|
||||
# }
|
||||
|
||||
@ -17,6 +17,3 @@ Staker,Stakooooor,staker_3,3,1000+ SOL currently staked onto Solana,
|
||||
Explorer,Exploror,explorer_1,1,1+ unique programs interacted with,
|
||||
Explorer,Explorooor,explorer_2,2,10+ unique programs interacted with,
|
||||
Explorer,Explorooooor,explorer_3,3,25+ unique programs interacted with,
|
||||
NFTs,NFT Enjoyooor,nfts_1,1,"1+ $SOL on NFTs (buys, sells, mints, last 180 days)",
|
||||
NFTs,Sharp,nfts_2,2,"100+ $SOL on NFTs (buys, sells, mints, last 180 days)",
|
||||
NFTs,NFT Whale,nfts_3,3,"1k+ $SOL on NFTs (buys, sells, mints, last 180 days)",
|
||||
|
@ -1,863 +0,0 @@
|
||||
|
||||
CASE WHEN marketplace in ('yawww', 'solanart', 'hadeswap', 'solport', 'coral cube') THEN '0% Marketplace'
|
||||
WHEN marketplace in ('opensea', 'magic eden v1', 'solana monkey business marketplace', 'magic eden v1') THEN 'Royalty Marketplace' END marketplace_type,
|
||||
|
||||
|
||||
|
||||
|
||||
SELECT (post.value - pre.value) * POWER (10, -9) AS dff
|
||||
, COALESCE(dff, 0) / s.sales_amount AS pct_m
|
||||
, a.value:pubkey::string AS pubkey
|
||||
, s.*
|
||||
FROM solana.core.fact_nft_sales s
|
||||
LEFT JOIN solana.core.fact_transactions t
|
||||
ON t.tx_id = s.tx_id
|
||||
LEFT JOIN TABLE(FLATTEN(account_keys)) a
|
||||
ON a.value:pubkey::string = 'Fz7HjwoXiDZNRxXMfLAAJLbArqjCTVWrG4wekit2VpSd'
|
||||
LEFT JOIN TABLE(FLATTEN(t.pre_balances)) pre
|
||||
ON pre.index = a.index
|
||||
LEFT JOIN TABLE(FLATTEN(t.post_balances)) post
|
||||
ON post.index = a.index
|
||||
WHERE s.block_timestamp >= '2022-11-01'
|
||||
AND t.block_timestamp >= '2022-11-01'
|
||||
AND s.marketplace = 'solanart'
|
||||
AND s.succeeded
|
||||
ORDER BY pct_m ASC
|
||||
-- LIMIT 100
|
||||
|
||||
-- solanart
|
||||
-- 39fEpihLATXPJCQuSiXLUSiCbGchGYjeL39eyXh3KbyT
|
||||
SELECT CONCAT('https://solana.fm/tx/', s.tx_id) AS sfm_link
|
||||
, l.label
|
||||
, s.*
|
||||
FROM solana.core.fact_nft_sales s
|
||||
JOIN solana.core.dim_labels l
|
||||
ON l.address = s.mint
|
||||
WHERE s.block_timestamp >= '2022-05-01'
|
||||
AND s.block_timestamp <= '2022-05-02'
|
||||
AND s.marketplace = 'solanart'
|
||||
AND s.succeeded
|
||||
LIMIT 100
|
||||
|
||||
SELECT s.*
|
||||
FROM solana.core.fact_nft_sales s
|
||||
LEFT JOIN solana.core.fact_transfers t
|
||||
ON t.tx_id = s.tx_id
|
||||
WHERE s.block_timestamp >= '2022-07-01'
|
||||
AND s.block_timestamp <= '2022-08-01'
|
||||
AND t.tx_id IS NULL
|
||||
AND s.marketplace = 'yawww'
|
||||
LIMIT 100
|
||||
|
||||
-- solanart
|
||||
WITH b0 AS (
|
||||
SELECT s.tx_id
|
||||
, s.sales_amount
|
||||
, s.mint
|
||||
, SUM(CASE WHEN tx_to = '39fEpihLATXPJCQuSiXLUSiCbGchGYjeL39eyXh3KbyT' THEN t.amount ELSE 0 END) AS m_amt
|
||||
, SUM(CASE WHEN tx_to = '39fEpihLATXPJCQuSiXLUSiCbGchGYjeL39eyXh3KbyT' OR amount > sales_amount * 0.5 THEN 0 ELSE amount END) AS r_amt
|
||||
FROM solana.core.fact_nft_sales s
|
||||
JOIN solana.core.fact_transfers t
|
||||
ON t.tx_id = s.tx_id
|
||||
AND t.mint = 'So11111111111111111111111111111111111111112'
|
||||
WHERE s.block_timestamp >= '2022-11-01'
|
||||
AND s.block_timestamp <= '2022-11-05'
|
||||
AND t.block_timestamp >= '2022-11-01'
|
||||
AND t.block_timestamp <= '2022-11-05'
|
||||
AND s.marketplace = 'solanart'
|
||||
AND s.succeeded
|
||||
GROUP BY 1, 2, 3
|
||||
)
|
||||
SELECT CONCAT('https://solana.fm/tx/', tx_id) AS sfm_link
|
||||
, CONCAT('https://solscan.io/token/', mint) AS mint_link
|
||||
, tx_id
|
||||
, sales_amount
|
||||
, m_amt
|
||||
, r_amt
|
||||
, ROUND(m_amt / sales_amount, 5) AS m_pct
|
||||
, ROUND(r_amt / sales_amount, 5) AS r_pct
|
||||
FROM b0
|
||||
|
||||
https://solana.fm/tx/5uoq1G9wBzuei7WS8MxN7XZwVoD3KuHTJzTZGphpvXmG42tTL5nXuJB43W7BanSLP7zRzc5R6TQNZmMNQ74L4vES
|
||||
|
||||
|
||||
Updates
|
||||
Dashboard on royalties and thread
|
||||
Version 0.1 of SolarScored is out
|
||||
Working on Business Intelligence Report
|
||||
Problems Encountered
|
||||
Priorities
|
||||
Concerns
|
||||
Excitements
|
||||
|
||||
|
||||
|
||||
SELECT *
|
||||
FROM solana.core.fact_transfers
|
||||
WHERE t.block_timestamp >= '2022-05-01'
|
||||
AND t.block_timestamp <= '2022-05-05'
|
||||
AND tx_id = '5uoq1G9wBzuei7WS8MxN7XZwVoD3KuHTJzTZGphpvXmG42tTL5nXuJB43W7BanSLP7zRzc5R6TQNZmMNQ74L4vES'
|
||||
|
||||
WITH prices AS (
|
||||
SELECT date_trunc('week', recorded_hour)::date AS date
|
||||
, AVG(close) AS price
|
||||
FROM crosschain.core.fact_hourly_prices
|
||||
WHERE id = 'solana'
|
||||
AND close IS NOT NULL
|
||||
GROUP BY 1
|
||||
), amount AS (
|
||||
SELECT date_trunc('week', block_timestamp)::date AS date
|
||||
, SUM(amount) AS sol_volume
|
||||
FROM solana.core.fact_transfers t
|
||||
WHERE mint = 'So11111111111111111111111111111111111111111'
|
||||
AND NOT tx_to IN (
|
||||
'F8Vyqk3unwxkXukZFQeYyGmFfTG3CAX4v24iyrjEYBJV'
|
||||
, '9BVcYqEQxyccuwznvxXqDkSJFavvTyheiTYk231T1A8S'
|
||||
, '3uTzTX5GBSfbW7eM9R9k95H7Txe32Qw3Z25MtyD2dzwC'
|
||||
, '5Xm6nU1Bi6UewCrhJQFk1CAV97ZJaRiFw4tFNhUbXy3u'
|
||||
)
|
||||
AND NOT tx_from IN (
|
||||
'F8Vyqk3unwxkXukZFQeYyGmFfTG3CAX4v24iyrjEYBJV'
|
||||
, '9BVcYqEQxyccuwznvxXqDkSJFavvTyheiTYk231T1A8S'
|
||||
, '3uTzTX5GBSfbW7eM9R9k95H7Txe32Qw3Z25MtyD2dzwC'
|
||||
, '5Xm6nU1Bi6UewCrhJQFk1CAV97ZJaRiFw4tFNhUbXy3u'
|
||||
)
|
||||
GROUP BY 1
|
||||
)
|
||||
SELECT a.date
|
||||
, a.sol_volume
|
||||
, (a.sol_volume * p.price) AS usd_volume
|
||||
FROM amount a
|
||||
JOIN prices p ON p.date = a.date
|
||||
|
||||
|
||||
SELECT *
|
||||
FROM solana.core.fact_swaps
|
||||
WHERE block_timestamp >= '2022-11-08'
|
||||
AND tx_id = '66DAgKyZ4qccKdtb4hdLkDpGbppGym4jPxTfqxS8DKLbBw5atrWN6QS2mLrrHPSrUmbUcsWKgYQs3wye2yowpr1i'
|
||||
|
||||
SELECT *
|
||||
FROM solana.core.fact_transfers
|
||||
WHERE block_timestamp >= CURRENT_DATE - 90
|
||||
AND mint = 'So11111111111111111111111111111111111111111'
|
||||
-- AND tx_to = 'F8Vyqk3unwxkXukZFQeYyGmFfTG3CAX4v24iyrjEYBJV'
|
||||
ORDER BY amount DESC
|
||||
LIMIT 100
|
||||
|
||||
WITH nft_sales AS (
|
||||
SELECT block_timestamp::date AS date
|
||||
, 'NFT Sale' AS tx_type
|
||||
, SUM(sales_amount) AS sol_volume
|
||||
FROM solana.core.fact_nft_sales s
|
||||
WHERE block_timestamp >= '2022-01-01'
|
||||
GROUP BY 1, 2
|
||||
), swaps AS (
|
||||
SELECT block_timestamp::date AS date
|
||||
, 'Token Swap' AS tx_type
|
||||
, SUM(CASE WHEN swap_from_mint = 'So11111111111111111111111111111111111111112' THEN swap_from_amount ELSE swap_to_amount END) AS sol_volume
|
||||
FROM solana.core.fact_swaps
|
||||
WHERE block_timestamp >= '2022-01-01'
|
||||
GROUP BY 1, 2
|
||||
), prices AS (
|
||||
SELECT recorded_hour::date AS date
|
||||
, AVG(close) AS price
|
||||
FROM crosschain.core.fact_hourly_prices
|
||||
WHERE id = 'solana'
|
||||
GROUP BY 1
|
||||
)
|
||||
SELECT date_trunc('week', COALESCE(n.date, w.date)) AS week
|
||||
, SUM( COALESCE(n.sol_volume, 0) ) AS nft_volume_sol
|
||||
, SUM( COALESCE(s.sol_volume, 0) ) AS swap_volume_sol
|
||||
, SUM( COALESCE(n.sol_volume, 0) + COALESCE(s.sol_volume, 0) ) AS tot_volume_sol
|
||||
, SUM( price * COALESCE(n.sol_volume, 0) ) AS nft_volume_usd
|
||||
, SUM( price * COALESCE(s.sol_volume, 0) ) AS swap_volume_usd
|
||||
, SUM( price * (COALESCE(n.sol_volume, 0) + COALESCE(s.sol_volume, 0)) ) AS tot_volume_usd
|
||||
FROM nft_sales n
|
||||
FULL OUTER JOIN swaps s
|
||||
ON s.date = n.date
|
||||
LEFT JOIN prices p
|
||||
ON p.date = COALESCE(n.date, s.date)
|
||||
GROUP BY 1
|
||||
|
||||
SELECT s.*
|
||||
, a.value:pubkey::string AS pubkey
|
||||
, (post.value - pre.value) * POWER (10, -9) AS dff
|
||||
FROM solana.core.fact_nft_sales s
|
||||
JOIN solana.core.fact_transactions t
|
||||
ON t.tx_id = s.tx_id
|
||||
LEFT JOIN TABLE(FLATTEN(account_keys)) a
|
||||
ON a.value:pubkey::string = 'Fz7HjwoXiDZNRxXMfLAAJLbArqjCTVWrG4wekit2VpSd'
|
||||
LEFT JOIN TABLE(FLATTEN(t.pre_balances)) pre
|
||||
ON pre.index = a.index
|
||||
LEFT JOIN TABLE(FLATTEN(t.post_balances)) post
|
||||
ON post.index = a.index
|
||||
WHERE s.block_timestamp >= '2022-11-01'
|
||||
AND t.block_timestamp >= '2022-11-01'
|
||||
AND s.marketplace = 'yawww'
|
||||
|
||||
WITH buys AS (
|
||||
SELECT purchaser AS user_address
|
||||
, SUM(sales_amount) AS buy_volume
|
||||
FROM solana.core.fact_nft_sales
|
||||
WHERE block_timestamp >= CURRENT_DATE - 180
|
||||
AND succeeded
|
||||
GROUP BY 1
|
||||
), sells AS (
|
||||
SELECT seller AS user_address
|
||||
, SUM(sales_amount) AS sell_volume
|
||||
FROM solana.core.fact_nft_sales
|
||||
WHERE block_timestamp >= CURRENT_DATE - 180
|
||||
AND succeeded
|
||||
GROUP BY 1
|
||||
), mints AS (
|
||||
SELECT purchaser AS user_address
|
||||
, SUM(mint_price) AS mint_volume
|
||||
FROM solana.core.fact_nft_sales
|
||||
WHERE block_timestamp >= CURRENT_DATE - 180
|
||||
AND succeeded
|
||||
AND mint_currency = 'So11111111111111111111111111111111111111111'
|
||||
AND mint_price <= 15
|
||||
GROUP BY 1
|
||||
)
|
||||
SELECT COALESCE(b.user_address, s.user_address, m.user_address) AS user_address
|
||||
, COALESCE(b.buy_volume, 0) + COALESCE(s.sell_volume, 0) + COALESCE(s.mint_volume, 0) AS volume
|
||||
FROM buys b
|
||||
FULL OUTER JOIN sells s
|
||||
ON s.user_address = b.user_address
|
||||
FULL OUTER JOIN mints m
|
||||
ON m.user_address = COALESCE(b.user_address, s.user_address)
|
||||
|
||||
SELECT *
|
||||
FROM solana.core.fact_nft_mints
|
||||
WHERE block_timestamp >= CURRENT_DATE - 2
|
||||
AND succeeded
|
||||
LIMIT 11
|
||||
|
||||
|
||||
SELECT CONCAT('https://solana.fm/tx/', e.tx_id) AS sfm_link
|
||||
, ARRAY_SIZE(e.inner_instruction:instructions)
|
||||
, e.tx_id
|
||||
, e.block_id
|
||||
, e.block_timestamp::date AS date
|
||||
, e.inner_instruction:instructions[0]:parsed:info:mint::string AS mint
|
||||
, s.sales_amount
|
||||
, CASE WHEN e.inner_instruction:instructions[0]:parsed:info:lamports > 0 THEN 0 WHEN inner_instruction:instructions[3]:parsed:info:lamports > 0 THEN 3 ELSE 5 END AS ind
|
||||
, COALESCE(e.inner_instruction:instructions[ind]:parsed:info:lamports * POWER(10, -9), 0) AS price_0
|
||||
, COALESCE(e.inner_instruction:instructions[ind + 1]:parsed:info:lamports * POWER(10, -9), 0) AS yawww_fee
|
||||
, COALESCE(e.inner_instruction:instructions[ind + 2]:parsed:info:lamports * POWER(10, -9), 0)
|
||||
+ COALESCE(e.inner_instruction:instructions[ind + 3]:parsed:info:lamports * POWER(10, -9), 0)
|
||||
+ COALESCE(e.inner_instruction:instructions[ind + 4]:parsed:info:lamports * POWER(10, -9), 0)
|
||||
+ COALESCE(e.inner_instruction:instructions[ind + 5]:parsed:info:lamports * POWER(10, -9), 0)
|
||||
+ COALESCE(e.inner_instruction:instructions[ind + 6]:parsed:info:lamports * POWER(10, -9), 0) AS collection_royalty
|
||||
, price_0 + yawww_fee + collection_royalty AS price
|
||||
, CASE WHEN price = 0 THEN 0 ELSE yawww_fee / price END AS pct_m
|
||||
, CASE WHEN price = 0 THEN 0 ELSE collection_royalty / price END AS pct_r
|
||||
, CASE
|
||||
WHEN mint = '2ZkSXXKvdxCCkHYkhfL3xmGvioMQoERCMPVzxmRjVF2K' THEN 'Liberty Square'
|
||||
WHEN mint = '3TmpAxD2Z4zPfFVR7uNQMFw4tj7sNSwc2MzSFyjoV2Np' THEN 'Heroes Of Astron'
|
||||
WHEN mint = '9XX3iGGCVaqivVkgVk8ci6SF3zMRbKnxp1fQhJFXmsam' THEN 'The Resurrected'
|
||||
WHEN mint = 'Afw1QQLzHAFEUWJCriRunLzz3PL4v1ZDQvs1izk29Wvi' THEN 'Heroes Of Astron'
|
||||
ELSE INITCAP(l.label) END AS collection
|
||||
, e.inner_instruction
|
||||
, t.inner_instruction
|
||||
, e.instruction
|
||||
FROM solana.core.fact_events e
|
||||
JOIN solana.core.fact_nft_sales s
|
||||
ON s.tx_id = e.tx_id
|
||||
JOIN solana.core.fact_transactions t
|
||||
ON t.tx_id = e.tx_id
|
||||
LEFT JOIN solana.core.dim_labels l
|
||||
ON l.address = inner_instruction:instructions[0]:parsed:info:mint::string
|
||||
WHERE e.block_timestamp >= '2022-06-04 13:49:14'
|
||||
AND instruction:programId = '5SKmrbAxnHV2sgqyDXkGrLrokZYtWWVEEk5Soed7VLVN'
|
||||
AND e.succeeded
|
||||
AND mint IS NOT NULL
|
||||
AND price < 1000
|
||||
AND ROUND(pct_m, 5) = 0.0
|
||||
-- AND pct_r > 0
|
||||
ORDER BY pct_r DESC, e.block_timestamp DESC, e.tx_id
|
||||
LIMIT 100
|
||||
|
||||
|
||||
SELECT *
|
||||
FROM solana.core.fact_transfers
|
||||
WHERE block_timestamp >= '2022-12-06'
|
||||
AND tx_id = '5trNueei7P3ukTaHBQSZBirhfbxgetF9D53DMvFHZRfNH8JwKdnjVjTV2zrG56idwvYbtquGieXSHRKSEzV4EZgz'
|
||||
|
||||
|
||||
|
||||
|
||||
WITH prices AS (
|
||||
SELECT date_trunc('week', recorded_hour)::date AS date
|
||||
, AVG(close) AS price
|
||||
FROM crosschain.core.fact_hourly_prices
|
||||
WHERE id = 'solana'
|
||||
GROUP BY 1
|
||||
), amount (
|
||||
SELECT date_trunc('week', block_timestamp) AS date
|
||||
, SUM(amount) AS sol_amount
|
||||
FROM solana.core.fact_transfers t
|
||||
WHERE mint = 'So11111111111111111111111111111111111111112'
|
||||
GROUP BY 1
|
||||
)
|
||||
SELECT p.date
|
||||
, a.sol_volume
|
||||
, (a.sol_amount * p.price) AS usd_volume
|
||||
FROM amount a
|
||||
LEFT JOIN prices p ON p.date = a.date
|
||||
|
||||
SELECT date
|
||||
FROM solana.core.fact_transfers t
|
||||
|
||||
LIMIT 100
|
||||
|
||||
|
||||
SELECT CONCAT('https://solana.fm/tx/', e.tx_id) AS sfm_link
|
||||
, ARRAY_SIZE(inner_instruction:instructions)
|
||||
, e.tx_id
|
||||
, e.block_id
|
||||
, e.block_timestamp::date AS date
|
||||
, inner_instruction:instructions[0]:parsed:info:mint::string AS mint
|
||||
, COALESCE(inner_instruction:instructions[ind]:parsed:info:lamports * POWER(10, -9), 0) AS price_0
|
||||
, COALESCE(inner_instruction:instructions[ind + 1]:parsed:info:lamports * POWER(10, -9), 0) AS yawww_fee
|
||||
, COALESCE(inner_instruction:instructions[ind + 2]:parsed:info:lamports * POWER(10, -9), 0)
|
||||
+ COALESCE(inner_instruction:instructions[ind + 3]:parsed:info:lamports * POWER(10, -9), 0)
|
||||
+ COALESCE(inner_instruction:instructions[ind + 4]:parsed:info:lamports * POWER(10, -9), 0)
|
||||
+ COALESCE(inner_instruction:instructions[ind + 5]:parsed:info:lamports * POWER(10, -9), 0)
|
||||
+ COALESCE(inner_instruction:instructions[ind + 6]:parsed:info:lamports * POWER(10, -9), 0) AS collection_royalty
|
||||
, price_0 + yawww_fee + collection_royalty AS price
|
||||
, CASE WHEN price = 0 THEN 0 ELSE yawww_fee / price END AS pct_m
|
||||
, CASE WHEN price = 0 THEN 0 ELSE collection_royalty / price END AS pct_r
|
||||
, CASE
|
||||
WHEN mint = '2ZkSXXKvdxCCkHYkhfL3xmGvioMQoERCMPVzxmRjVF2K' THEN 'Liberty Square'
|
||||
WHEN mint = '3TmpAxD2Z4zPfFVR7uNQMFw4tj7sNSwc2MzSFyjoV2Np' THEN 'Heroes Of Astron'
|
||||
WHEN mint = '9XX3iGGCVaqivVkgVk8ci6SF3zMRbKnxp1fQhJFXmsam' THEN 'The Resurrected'
|
||||
WHEN mint = 'Afw1QQLzHAFEUWJCriRunLzz3PL4v1ZDQvs1izk29Wvi' THEN 'Heroes Of Astron'
|
||||
ELSE INITCAP(l.label) END AS collection
|
||||
, inner_instruction
|
||||
, instruction
|
||||
FROM solana.core.fact_events e
|
||||
JOIN solana.core.fact_nft_sales s
|
||||
ON s.tx_id = e.tx_id
|
||||
LEFT JOIN solana.core.dim_labels l ON l.address = inner_instruction:instructions[0]:parsed:info:mint::string
|
||||
WHERE e.block_timestamp >= '2022-06-04 13:49:14'
|
||||
AND instruction:programId = '5SKmrbAxnHV2sgqyDXkGrLrokZYtWWVEEk5Soed7VLVN'
|
||||
AND e.succeeded
|
||||
AND mint IS NOT NULL
|
||||
AND price < 1000
|
||||
AND ROUND(pct_m, 5) = 0.0
|
||||
//AND pct_r > 0
|
||||
ORDER BY pct_r DESC, e.block_timestamp DESC, e.tx_id
|
||||
LIMIT 100
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
SELECT MAX(ARRAY_SIZE(inner_instruction:instructions))
|
||||
FROM solana.core.fact_events e
|
||||
LEFT JOIN solana.core.dim_labels l ON l.address = inner_instruction:instructions[0]:parsed:info:mint::string
|
||||
WHERE e.block_timestamp >= '2022-07-04 13:49:14'
|
||||
AND inner_instruction:instructions[0]:parsed:info:mint::string IS NOT NULL
|
||||
AND instruction:programId = '5SKmrbAxnHV2sgqyDXkGrLrokZYtWWVEEk5Soed7VLVN'
|
||||
|
||||
SELECT date_trunc('month', e.block_timestamp)::date AS date
|
||||
, SUM(COALESCE(inner_instruction:instructions[5]:parsed:info:lamports * POWER(10, -9), 0)) AS price_0
|
||||
, SUM(COALESCE(inner_instruction:instructions[6]:parsed:info:lamports * POWER(10, -9), 0)) AS yawww_fee
|
||||
, SUM(COALESCE(inner_instruction:instructions[7]:parsed:info:lamports * POWER(10, -9), 0) + COALESCE(inner_instruction:instructions[8]:parsed:info:lamports * POWER(10, -9), 0) + COALESCE(inner_instruction:instructions[9]:parsed:info:lamports * POWER(10, -9), 0) + COALESCE(inner_instruction:instructions[10]:parsed:info:lamports * POWER(10, -9), 0) + COALESCE(inner_instruction:instructions[11]:parsed:info:lamports * POWER(10, -9), 0)) AS collection_royalty
|
||||
, price_0 + yawww_fee + collection_royalty AS price
|
||||
, yawww_fee / price AS pct_m
|
||||
, collection_royalty / price AS pct_r
|
||||
FROM solana.core.fact_events e
|
||||
WHERE e.block_timestamp >= '2022-07-04 13:49:14'
|
||||
AND instruction:programId = '5SKmrbAxnHV2sgqyDXkGrLrokZYtWWVEEk5Soed7VLVN'
|
||||
AND price < 1000
|
||||
GROUP BY 1
|
||||
|
||||
WITH b0 AS (
|
||||
SELECT date_trunc('month', e.block_timestamp)::date AS date
|
||||
, COALESCE(inner_instruction:instructions[5]:parsed:info:lamports * POWER(10, -9), 0) AS price_0
|
||||
, COALESCE(inner_instruction:instructions[6]:parsed:info:lamports * POWER(10, -9), 0) AS yawww_fee
|
||||
, COALESCE(inner_instruction:instructions[7]:parsed:info:lamports * POWER(10, -9), 0) + COALESCE(inner_instruction:instructions[8]:parsed:info:lamports * POWER(10, -9), 0) + COALESCE(inner_instruction:instructions[9]:parsed:info:lamports * POWER(10, -9), 0) + COALESCE(inner_instruction:instructions[10]:parsed:info:lamports * POWER(10, -9), 0) + COALESCE(inner_instruction:instructions[11]:parsed:info:lamports * POWER(10, -9), 0) AS collection_royalty
|
||||
, price_0 + yawww_fee + collection_royalty AS price
|
||||
, ROUND(yawww_fee / price, 4) AS pct_m
|
||||
, ROUND(collection_royalty / price, 4) AS pct_r
|
||||
FROM solana.core.fact_events e
|
||||
WHERE e.block_timestamp >= '2022-06-01'
|
||||
AND instruction:programId = '5SKmrbAxnHV2sgqyDXkGrLrokZYtWWVEEk5Soed7VLVN'
|
||||
)
|
||||
SELECT date
|
||||
, pct_m
|
||||
, COUNT(1) AS n
|
||||
FROM b0
|
||||
GROUP BY 1, 2
|
||||
|
||||
|
||||
SELECT date_trunc('month', block_timestamp)::date AS date
|
||||
, COUNT(1) AS n
|
||||
FROM solana.core.fact_nft_sales
|
||||
WHERE marketplace = 'yawww'
|
||||
GROUP BY 1
|
||||
|
||||
|
||||
|
||||
SELECT date_trunc('month', e.block_timestamp)::date AS date
|
||||
, SUM(COALESCE(inner_instruction:instructions[5]:parsed:info:lamports * POWER(10, -9), 0)) AS price_0
|
||||
, SUM(COALESCE(inner_instruction:instructions[6]:parsed:info:lamports * POWER(10, -9), 0)) AS yawww_fee
|
||||
, SUM(COALESCE(inner_instruction:instructions[7]:parsed:info:lamports * POWER(10, -9), 0) + COALESCE(inner_instruction:instructions[8]:parsed:info:lamports * POWER(10, -9), 0) + COALESCE(inner_instruction:instructions[9]:parsed:info:lamports * POWER(10, -9), 0) + COALESCE(inner_instruction:instructions[10]:parsed:info:lamports * POWER(10, -9), 0) + COALESCE(inner_instruction:instructions[11]:parsed:info:lamports * POWER(10, -9), 0)) AS collection_royalty
|
||||
, price_0 + yawww_fee + collection_royalty AS price
|
||||
, yawww_fee / price AS pct_m
|
||||
, collection_royalty / price AS pct_r
|
||||
FROM solana.core.fact_events e
|
||||
WHERE e.block_timestamp >= '2022-07-04 13:49:14'
|
||||
AND instruction:programId = '5SKmrbAxnHV2sgqyDXkGrLrokZYtWWVEEk5Soed7VLVN'
|
||||
AND price < 1000
|
||||
GROUP BY 1
|
||||
|
||||
|
||||
|
||||
SELECT s.marketplace
|
||||
-- , t.tx_to
|
||||
, s.tx_id
|
||||
, l.label
|
||||
, CONCAT('https://solana.fm/tx/', s.tx_id) AS sfm_link
|
||||
, ARRAY_SIZE(tr.instructions) AS as_in
|
||||
, ARRAY_SIZE(tr.instructions[0]:instructions) AS as_in0
|
||||
, *
|
||||
FROM solana.core.fact_nft_sales s
|
||||
-- JOIN solana.core.fact_transfers t
|
||||
-- ON t.tx_id = s.tx_id
|
||||
-- AND t.tx_to = '5z1vT6R1HcgvzDpto63rrhgVF4CjA4Sho6DbN58Pwzw3'
|
||||
JOIN solana.core.dim_labels l
|
||||
ON l.address = s.mint
|
||||
AND l.label = 'grimzdao'
|
||||
WHERE s.block_timestamp >= '2022-10-01'
|
||||
-- AND t.block_timestamp >= '2022-10-01'
|
||||
AND s.marketplace ILIKE '%yaw%'
|
||||
|
||||
|
||||
hayleyngreenfield@gmail.com
|
||||
|
||||
Is there anything you think I could / should do in these areas to make sure he's productive (or future people are productive)
|
||||
There was space for me to help grow Ben's skillset.
|
||||
Should we do more BI stuff?
|
||||
|
||||
We're enjoying it (sustainable)
|
||||
Right incentives (making money)
|
||||
'
|
||||
|
||||
SELECT CONCAT('https://solana.fm/tx/', tx_id) AS sfm_link
|
||||
, *
|
||||
FROM solana.core.fact_nft_sales s
|
||||
JOIN solana.core.dim_labels l
|
||||
ON l.address = s.mint
|
||||
WHERE s.block_timestamp >= CURRENT_DATE - 3
|
||||
AND marketplace = 'hadeswap'
|
||||
AND l.label = 'Okay Bears'
|
||||
LIMIT 100
|
||||
|
||||
|
||||
SELECT l.label
|
||||
, s.tx_id
|
||||
, *
|
||||
FROM solana.core.fact_nft_sales s
|
||||
JOIN solana.core.fact_transfers t
|
||||
ON t.tx_id = s.tx_id
|
||||
AND t.tx_to = '5z1vT6R1HcgvzDpto63rrhgVF4CjA4Sho6DbN58Pwzw3'
|
||||
JOIN solana.core.dim_labels l
|
||||
ON l.address = s.mint
|
||||
WHERE s.block_timestamp >= CURRENT_DATE - 90
|
||||
AND t.block_timestamp >= CURRENT_DATE - 90
|
||||
AND s.tx_id IN (
|
||||
'5JpNhDGvqTjs7efXr5H2DbZPyQjN7yXHpaUDr8d3ba4BnMXZj8p2hzekJKG872UfDLcS9WugExyBtRkFsNYQhhmY',
|
||||
'3EgBVWgqjA5fGDGLgEC4fmbrg2LrPP37MqdHyj8yyaYTuBnsLCdetorwyssvCf9yLq74YJ2U4juZ3pp7Wb93SRjc',
|
||||
'4qeihebwmvB8ot37DdXUYe3aavqyyNcRTqJM4VoPDLtX7PUJjf8UH2AAXbjjBFQ2QW1CXQCXivPucGwRCMzghNUn',
|
||||
'5zFmimXF8wpMHhXusRiccgb7w7PEhCGkSjbTLQ2UKzAZ8Qd54eQY3dZa83w1X12DKoHmsdpSWtia1CrL4bufyYJz',
|
||||
'45SczJ13kx96N8me7er3Xmgx5BA8VHA42yELckhjgDPsjcVkYDRGeHDSuQUNzjVstgc3ShwgjocDJvqC3JKFc1UR',
|
||||
'2RchxUjZP6uEBQxAvKzQb6fnHviibzNcNQBAWZSPXpzN3TLwrsu9RK5TPvirHj4VpHn4kGR2H9YyNBnBjhtTYTXw',
|
||||
'22YceKsL4Sbrh2aowUaa47GdoX9H7XnBg6cizy68YNUQx7yAbEFURedEVhgJ1R9tRBWz1vX4gSNqEBdoHyeApSoD',
|
||||
'2f72km7dsV2kJx96WFdaHHTW6DmFHSJpRuC3WQxjqUoHFzoD6vE3g6wKkvFd6Jzy3F4SVGFqaaQgGqBBjA3Rkum5',
|
||||
'22uQAfeM33BJyYwJyGjaNCHpb2Kj8mfa4wegMQ2WdtfzBcyYSq8wxYAvTis6yWs1c62JtxdaBNNSNu4YxsEAnxW1',
|
||||
'wuBUpHfpVorY2ntDzhdensuKRcTLnL2KARCUtJQ21ZGQEHcWV5SX8nh8efn1iF5jpAuDizhNTEJDy3LErGfoR9d',
|
||||
'53i7inULH7gurCjRHcQxtxuXchU6SmQgeBNnuD6DAFqiC2ohDPBN3K8vt4SQCq2U3NvhRgNz8mgbKKTHDmejVv2x',
|
||||
'4rRfz7JcJrLfJ8vsKEpmbxMPVGUdYi11CATv87TANLMrs8hTVjkfsGdfnp8pmM1BvcZUFVozHWmA5vJw7pxxfGZp',
|
||||
'3GU2qWxNKRNZFJWSHGGar8PTeE7osXKiCxTVP4sWpjFU7g5KhsCwccZtY2zjyHK44Y5WjLHzdCojRzfz59PH3gVc',
|
||||
'xeAzSv3S87p9xHyZdScKtmvUZFTxtvYf5Lye7iw1LEPtEEv5X9JjBvHeRnUdYF5SCJRrExsu2jb6TaoPDbYUM95',
|
||||
'3iZDdfE5zvykLdPKfrq18vdBE9vKW2hQsnLePphcgG87XchPLk6XubpwXhVnqB7ZJzfJ6Fs7iet2d7hm716ebUsZ',
|
||||
'3HnshEg45APZ1QEAjBQoFDkgm4YWhhkua6xtkXyF1WPEBDo8E359zpovGGwXiUND4oXT4F3hDSZk58J9xP38G99D',
|
||||
'3tqUBXMFEm8wUZcnc7xkMGBmiqoczJkJhYf7LHL6gwV3vFAL1h7EGFzNBu4XE7KWjURVAcQ99GjYsEvo2784XW8Y',
|
||||
'5BaLbjaez8FUVf5rAydL3Y86RbE6pPDknLjiKyVjuCF9PWGPaWcLjeqjhA7uvnCXhTLNtVFxphyD8jn9JgcSWFbW',
|
||||
'JzGZ7qqrB8zhcnVi3uSNYFkJV2xWFHSwmiR7qgsohepFkP8k8VfaAm2Yyv2UK6BNkSJm8BwHR9eENUEwdKiq8Mq',
|
||||
'5DdQDFNS3CmVSUfG8hUNXZgb6A7v2NtCBZAAQmhZPNysiJxqXbJGTAR3gPGxbCVk2qiswnrQzpFoadSGKqpQurdE',
|
||||
'5QKs6gZaFbeRTmEvJJ4PQNCvtryciUrYctjkh1GLb6HrmxpJWPeg3fRX2nnxZB6bSoYagiqWcbpFYmSFAGPgoURo',
|
||||
'423BsEvD3yMjd16JiCayusXbYay2i8g4uajfQxHYU8urvm9RkaPzu5YWHaMFk2XXvRrUDcM3n4D2d21BeYqygToU',
|
||||
'4D57auoxQizjQVUsZBijyGD5xDmqEYiv16aLDJDjLFWXWC3HgkFTyzMS9sCySswY4VhQK1BDDGVrbD2bzBFimYLf',
|
||||
'5jdz3XBFZ6L2CiiyvufhRF1Vp7dGhXdagrU5gkb1rMko6JKkcX1nCWExP646iot6vTHuj43nK9p7VUpwRBb2Wa5i',
|
||||
'45Fzc4fJCDqzJH2WLUV2U3YJf87At7Z3YgsyvevvKJ9cuwVXTVETaAr3hCk6ZKdC3hc4CWmYaC8ZUBzzWFQ3Q8kw',
|
||||
'iLSXKH3eFoGSh2ANy69AFaLG1NPA4LKZcLtzjgpe31TGaJj7fRwz5eiEqA1b681ZbkivRq3VZwRxdK8z3RF7dvf',
|
||||
'WTmKhrXnHtWqmSbMrDpjx2PBikTkGJD2GnXKZbQq3mgvUXt6hCbzTrNRbZdkZQRfgrMMLMVWK9vbub6o98d2dUQ',
|
||||
'Bw3NrJ3hs9MKCmMX2vHnYLJj8MNQKbQnvwkYYNpV7SG7pE4hbUhf49es7SAsRyQejQiJztTQiEPAnoUYejPGNFh',
|
||||
'2v7MQ3AGNpDtUn5q2nZhX8Gcm6UBt4nHSu5CZvnJ1hfr8NGYbiZz98wU9WDtadHRoMaDiHuiFbzknzWiswaQrgZK',
|
||||
'2CrvgP1ynMAVPjeycp9K7nVe8AtX5g3wrtosskAaQLHVyXZh1RtVEDBS2PcA6vq71h89eAKhRYNsJpkyNxsgH886',
|
||||
'3vdajZTb4jQp4XjmEP71uVvxeLdUJHCVgoGEGDReWnZqFRxnRxT3HDL9N6QQe14ereuwHPsgzfSaPChqhLwCfx1m',
|
||||
'4raA9X2hD6RNshwk1qjktcF1gKZrzRKjS2Ggzhjt6hgF821pZGcobq2UWh5k8vbeVye8EXuX846unTpfKbc3wHXA',
|
||||
'3RGEVDxdghyLKNk1aQfwVBzTEtWJJrg83r7E3PM4DWig22QARQGMDKTpfosA5VUWh9RNrbJ6kFrx5amvw31A6rZG',
|
||||
'yPgUWTjBw8HWZ18Usn5RZEjeWPsd1TehFD3e4uq3KGwnUQptvPdFzgdsPkqc95VeLR9LnQFGtYie3baLkUBZA13',
|
||||
'54m4w8yVpj324upaAJe3uwKT1kTFDW6DLEH7tKaAhmYYYdXqJmZSWiR2gUZQF5UnRC3M9nTcnEoM8SVz3guvfh9L',
|
||||
'24gyG5wGfp9e8dmhefG2krDcT1VLAa5KzhGK8RCHoAQE8Vf7jsixdeswhyTXapD9BMX9Ga5bPpYVWrUs2QE2VdPr',
|
||||
'4pyvRNCi5yWM8Jhp3Ff3GDYeiKCwC9FVSBYyr92NWerav3Cuk1RktBFUb3xeKxie6xmauyJgpK5jFXpGSnvjRJsB',
|
||||
'4XUSUMwx7VUjdKAVCRuo6MLAdZZqxWxq9kJvZrv63EbjxyUkaSFAVnBUvkKBJV5XTrN7vdMQD7PyTdVHfeezvyby',
|
||||
'5r5e6LntFgHC7QnFJrygmeZKfLDCvBBdwaee6zRAvVXx8bcPg8iUyxUJC7dvxorEtNK7xifCH4rovdZ9hP2jLFBR',
|
||||
'3MhactaRa7XAuyYve7EjQk62MXNcfre25ENgWM9XPjNAdYj9JASPRCyNzhVMsxTdSBGQX97pnEYoLKEAb8xjwD6D',
|
||||
'4nB6462kW7a1sSCJzUDRtMHFHaWYqk5SfnW61hbmUbxTAn4ce2L9vtzPbWLkmYrhXRqze7RHekZNSAUEdnRohgrQ',
|
||||
'5jxxtZ87Y1GwuUYtFVHipgutTYUiLthp6REAMjPVaAfQyFaCRbFkXNXwQkVjZrFawcPaASpSqM8xQGiuPvYM7ptM',
|
||||
'57eApXip2BsmFyyUh9py7ARbS6MBbgnqVNSHop9t3jVoFsukakHGoQKVPPZVpwWJEvbePTrThaE9r8kQQQZ31vPq',
|
||||
'3kvQJsBu4hq1zkLfSY1j3UJhAqiwcf8MHRVmKAkiYxyULtvMTsQ4Wi6aU7Mixnp2UrpnyFkhu7JXUqi4L4Mthtp1',
|
||||
'3m7kAif6cwT5X6qinwH1kKRuTDKxJRtjW2RydsW3WenHqcLiPsQ4jKpiEu2AnVgrXrUm4yhLiGZwjK8bPNuCuncz',
|
||||
'4rE6C2JBEKpJkMybcuyik6v4Fps7JvZchBrVXzsvHnBLviYovJDYZ6TDb2LoYPRN66D4cZDLKMuD7XmnFrd9cY9f',
|
||||
'58u6pXhzX8zpPoZ9ZrWWnnuc4KUg2q2oa9GtHh19wLTbWmVkzKtYpoRLi3ZU29gsFiQXBPPw72MGyxYwXKa4kWNf',
|
||||
'541uGAip6K2WxDgxp5nNtDBbFcuBXb7FCaeSbY7t9MLttyeXtCFhzp4n52vQQuSrPqUXZZwfH1uMo826S3f6dcZo',
|
||||
'sq9Tw5vbEaLPauv2Qc5PavSNTGpopqvsJrCgtAYLUtTCV6wRx2Mhz1ogcFWrYFYxYJbLj3DeQMFh51AzLYyq1BV',
|
||||
'9HJaE5TrU2QCRmsNP6twrkCateUEesWFoNjTTyxM11FdxxkWHyaePH8UFVeuRvEcmZ94oUAvHzoNFHJegz4p2o9',
|
||||
'3SYyc4JkrcCFvU6GjjJyDq7MWfcp1HVcd59d4gR4EsfdxuqeZcQ6KomhRPamRY2qRPozuAPR5uXQW22hpNHPHL8c',
|
||||
'5tPE45YpVD7LHmYvB4WRcpCwFHvGZV7sKwzZFKkS3Gd23aKSD2GnWQuuDnnV8YXh9Xvg7XhxBzk9nVY7RLEmEaSP',
|
||||
'tuMpRaXBWc92ygcqgfgjSZjwvxpgm247AWtFxwg6d3iRPmGHPjSpB8wojefiMHHA4TeyQtFizJcUczpoVsFgcNU',
|
||||
'3Eg3g1JB18EsZn3iCHpZAm5QiTSjCn6BDdeZbCqiZ5AmMwohNdENrewySDeYNDyLMfGAvox6wuDno21ghgNJ4pR',
|
||||
'4MYzNmhSxQhZ9vu1n4H9cFfyuqQHTqNNo3ExNkh6x5XQTR5EprzNRNKwsgHvzznRrMeGdv5yWSoZJGvM4dL2eZiB',
|
||||
'2KEYGUHXEh5N3MhajtbkfDtf9pq26Wqi2QcJMS4gjWEpw5KEc2pPKUuDkj3ef4yfTNK7VJQfLhG16tuyEGA8vZ5G',
|
||||
'fALSk5BGE3m3QpGwr9Fch2uqweRSLm6PrsJqoHKGnHmrCh28sdTNvSHVBW86NihT2joYkvjxrxH1gq9Qd1sFtEQ',
|
||||
'3nqyc1fPzQ1CvHhj1t8rGFqjVV9vh5ehBUrJdrGrUg3t8xa1ifNR5pE2vf66oqQgzHDTRpNw45a95vt49WdbyQUF'
|
||||
)
|
||||
|
||||
|
||||
'Bring back thread competition (open it up the whole company)
|
||||
Bring back NFT Deal Score
|
||||
|
||||
|
||||
SELECT marketplace
|
||||
, SUM(sales_amount) AS amt
|
||||
FROM solana.core.fact_nft_sales s
|
||||
WHERE block_timestamp >= '2022-08-01'
|
||||
AND sales_amount < 1000
|
||||
GROUP BY 1
|
||||
ORDER BY 2 DESC
|
||||
|
||||
|
||||
SELECT CONCAT('https://solana.fm/tx/', tx_id) AS sfm_link
|
||||
, l.label
|
||||
, s.*
|
||||
FROM solana.core.fact_nft_sales s
|
||||
JOIN solana.core.dim_labels l
|
||||
ON l.address = s.mint
|
||||
WHERE block_timestamp >= CURRENT_DATE - 7
|
||||
AND marketplace = 'hadeswap'
|
||||
LIMIT 100
|
||||
|
||||
WITH tx AS (
|
||||
SELECT DISTINCT s.tx_id
|
||||
, block_timestamp::date AS date
|
||||
, COALESCE(m.token_name, 'Other') AS token_name
|
||||
, s.mint
|
||||
, sales_amount
|
||||
, purchaser
|
||||
FROM solana.core.fact_nft_sales s
|
||||
JOIN solana.core.dim_nft_metadata m ON m.mint = s.mint
|
||||
WHERE block_timestamp >= '2022-01-01'
|
||||
AND block_timestamp <= '2022-01-02'
|
||||
AND m.token_name = 'Okay Bears'
|
||||
AND marketplace LIKE 'magic eden v1'
|
||||
AND succeeded
|
||||
AND sales_amount > 0
|
||||
), base AS (
|
||||
SELECT t.tx_id
|
||||
, SUM(CASE WHEN tx_to = 'rFqFJ9g7TGBD8Ed7TPDnvGKZ5pWLPDyxLcvcH2eRCtt' AND t.mint = 'So11111111111111111111111111111111111111112' THEN amount ELSE 0 END) AS m_amt
|
||||
, SUM(CASE WHEN tx_to <> 'rFqFJ9g7TGBD8Ed7TPDnvGKZ5pWLPDyxLcvcH2eRCtt' AND t.mint = 'So11111111111111111111111111111111111111112' AND amount < (sales_amount * 0.5) THEN amount ELSE 0 END) AS r_amt
|
||||
FROM solana.core.fact_transfers t
|
||||
JOIN tx ON tx.tx_id = t.tx_id
|
||||
WHERE block_timestamp >= '2022-01-01'
|
||||
GROUP BY 1
|
||||
), b0 AS (
|
||||
SELECT tx.tx_id
|
||||
, date
|
||||
, mint
|
||||
, token_name
|
||||
, sales_amount
|
||||
-- , s_amt
|
||||
, m_amt
|
||||
, r_amt
|
||||
, ROUND(sales_amount - COALESCE(r_amt, 0) - COALESCE(m_amt, 0),4) AS s_amt
|
||||
-- , ROUND(sales_amount - COALESCE(s_amt, 0) - COALESCE(m_amt, 0),4) AS r_amt_calc
|
||||
, s_amt / sales_amount AS s_pct
|
||||
, m_amt / sales_amount AS m_pct
|
||||
, r_amt / sales_amount AS r_pct
|
||||
FROM tx
|
||||
JOIN base b ON b.tx_id = tx.tx_id
|
||||
)
|
||||
, b1 AS (
|
||||
SELECT token_name
|
||||
, date_trunc('month', date) AS month
|
||||
, SUM(sales_amount) AS sales_amount
|
||||
, SUM(s_amt) AS s_amt
|
||||
, SUM(m_amt) AS m_amt
|
||||
, SUM(r_amt) AS r_amt
|
||||
, MEDIAN(s_pct) AS s_pct
|
||||
, MEDIAN(m_pct) AS m_pct
|
||||
, MEDIAN(r_pct) AS r_pct
|
||||
, 100 * AVG(CASE WHEN b0.r_amt = 0 THEN 1.0 ELSE 0.0 END) AS pct_no_royalty
|
||||
FROM b0
|
||||
GROUP BY 1, 2
|
||||
)
|
||||
SELECT *
|
||||
, 100 * (r_amt / sales_amount) AS royalty_pct
|
||||
FROM b1
|
||||
|
||||
|
||||
|
||||
|
||||
SELECT CONCAT('https://solscan.io/tx/', tx_id) AS sol_link
|
||||
, *
|
||||
FROM solana.core.fact_nft_mints
|
||||
WHERE mint_currency = 'So11111111111111111111111111111111111111111'
|
||||
AND mint_price <= 15
|
||||
ORDER BY mint_price DESC
|
||||
LIMIT 100
|
||||
|
||||
|
||||
--
|
||||
WITH tx AS (
|
||||
SELECT DISTINCT s.tx_id
|
||||
, block_timestamp::date AS date
|
||||
, COALESCE(m.token_name, 'Other') AS token_name
|
||||
, s.mint
|
||||
, sales_amount
|
||||
, purchaser
|
||||
FROM solana.core.fact_nft_sales s
|
||||
JOIN solana.core.dim_nft_metadata m ON m.mint = s.mint
|
||||
WHERE block_timestamp >= '2022-01-01'
|
||||
-- AND m.token_name = 'Okay Bears'
|
||||
AND marketplace = 'magic eden v2'
|
||||
AND succeeded
|
||||
AND sales_amount > 0
|
||||
), mint AS (
|
||||
SELECT date_trunc('month', block_timestamp)::date AS month
|
||||
, SUM(mint_price) AS mint_volume
|
||||
FROM solana.core.fact_nft_mints m
|
||||
WHERE month >= '2022-01-01'
|
||||
AND mint_currency = 'So11111111111111111111111111111111111111111'
|
||||
AND mint_price <= 15
|
||||
GROUP BY 1
|
||||
)
|
||||
, base AS (
|
||||
SELECT t.tx_id
|
||||
, SUM(CASE WHEN tx_to = 'rFqFJ9g7TGBD8Ed7TPDnvGKZ5pWLPDyxLcvcH2eRCtt' AND t.mint = 'So11111111111111111111111111111111111111112' THEN amount ELSE 0 END) AS m_amt
|
||||
, SUM(CASE WHEN tx_to <> 'rFqFJ9g7TGBD8Ed7TPDnvGKZ5pWLPDyxLcvcH2eRCtt' AND t.mint = 'So11111111111111111111111111111111111111112' AND amount < (sales_amount * 0.5) THEN amount ELSE 0 END) AS r_amt
|
||||
FROM solana.core.fact_transfers t
|
||||
JOIN tx ON tx.tx_id = t.tx_id
|
||||
WHERE block_timestamp >= '2022-01-01'
|
||||
GROUP BY 1
|
||||
), b0 AS (
|
||||
SELECT tx.tx_id
|
||||
, date
|
||||
, mint
|
||||
, token_name
|
||||
, sales_amount
|
||||
-- , s_amt
|
||||
, m_amt
|
||||
, r_amt
|
||||
, ROUND(sales_amount - COALESCE(r_amt, 0) - COALESCE(m_amt, 0),4) AS s_amt
|
||||
-- , ROUND(sales_amount - COALESCE(s_amt, 0) - COALESCE(m_amt, 0),4) AS r_amt_calc
|
||||
, s_amt / sales_amount AS s_pct
|
||||
, m_amt / sales_amount AS m_pct
|
||||
, r_amt / sales_amount AS r_pct
|
||||
FROM tx
|
||||
JOIN base b ON b.tx_id = tx.tx_id
|
||||
)
|
||||
, b1 AS (
|
||||
SELECT date_trunc('month', date) AS month
|
||||
, SUM(sales_amount) AS sales_amount
|
||||
, SUM(s_amt) AS s_amt
|
||||
, SUM(m_amt) AS m_amt
|
||||
, SUM(r_amt) AS r_amt
|
||||
, MEDIAN(s_pct) AS s_pct
|
||||
, MEDIAN(m_pct) AS m_pct
|
||||
, MEDIAN(r_pct) AS r_pct
|
||||
, 100 * AVG(CASE WHEN b0.r_amt = 0 THEN 1.0 ELSE 0.0 END) AS pct_no_royalty
|
||||
FROM b0
|
||||
GROUP BY 1
|
||||
)
|
||||
SELECT b1.*
|
||||
, 100 * (r_amt / sales_amount) AS royalty_pct
|
||||
, m.mint_volume
|
||||
FROM b1
|
||||
JOIN mint m ON m.month = b1.month
|
||||
|
||||
|
||||
|
||||
-- explorer
|
||||
WITH signers AS (
|
||||
SELECT tx_id
|
||||
, signers[0]::string AS user_address
|
||||
FROM solana.core.fact_transactions
|
||||
WHERE block_timestamp >= CURRENT_DATE - 90
|
||||
GROUP BY 1, 2
|
||||
)
|
||||
SELECT user_address
|
||||
, COUNT(DISTINCT COALESCE(l.label, e.program_id)) AS n_unique_programs
|
||||
FROM solana.core.fact_events e
|
||||
JOIN signers s ON s.tx_id = e.tx_id
|
||||
LEFT JOIN solana.core.dim_labels l
|
||||
ON l.address = e.program_id
|
||||
WHERE e.block_timestamp >= CURRENT_DATE - 90
|
||||
GROUP BY 1
|
||||
|
||||
-- Staker - How much SOL have they staked?
|
||||
WITH b0 AS (
|
||||
SELECT *
|
||||
, ROW_NUMBER() OVER (PARTITION BY stake_authority ORDER BY block_timestamp DESC) AS rn
|
||||
FROM solana.core.ez_staking_lp_actions
|
||||
)
|
||||
SELECT stake_authority AS user_address
|
||||
, post_tx_staked_balance * POWER(10, -9) AS staked_sol
|
||||
FROM b0
|
||||
WHERE rn = 1
|
||||
|
||||
|
||||
|
||||
-- Bridgor - How many times are they bridging assets onto Solana (from a bridge or CEX)?
|
||||
WITH tx AS (
|
||||
SELECT DISTINCT tx_id
|
||||
FROM solana.core.fact_events e
|
||||
JOIN solana.core.dim_labels l
|
||||
ON l.address = e.program_id
|
||||
AND l.label_subtype = 'bridge'
|
||||
WHERE e.block_timestamp >= CURRENT_DATE - 2
|
||||
)
|
||||
SELECT CASE WHEN tx.tx_id IS NULL THEN label_type ELSE 'bridge' END AS clean_label
|
||||
, COUNT(1) AS n
|
||||
FROM solana.core.fact_transfers t
|
||||
LEFT JOIN tx ON tx.tx_id = t.tx_id
|
||||
LEFT JOIN solana.core.dim_labels l
|
||||
ON l.address = t.tx_from
|
||||
AND (l.label_type = 'cex' OR l.label_subtype = 'bridge' )
|
||||
WHERE t.block_timestamp >= CURRENT_DATE - 2
|
||||
AND (tx.tx_id IS NOT NULL OR l.label_type IS NOT NULL)
|
||||
GROUP BY 1
|
||||
ORDER BY 2 DESC
|
||||
|
||||
|
||||
|
||||
|
||||
WITH tx AS (
|
||||
SELECT DISTINCT tx_id
|
||||
FROM solana.core.fact_events e
|
||||
JOIN solana.core.dim_labels l
|
||||
ON l.address = e.program_id
|
||||
AND l.label_subtype = 'bridge'
|
||||
WHERE e.block_timestamp >= CURRENT_DATE - 90
|
||||
)
|
||||
SELECT tx_to
|
||||
, COUNT(1) AS n_bridge
|
||||
, SUM(CASE WHEN mint = 'So11111111111111111111111111111111111111112' THEN amount ELSE 0 END) AS sol_bridge_amt
|
||||
FROM solana.core.fact_transfers t
|
||||
LEFT JOIN tx ON tx.tx_id = t.tx_id
|
||||
LEFT JOIN solana.core.dim_labels l
|
||||
ON l.address = t.tx_from
|
||||
AND (l.label_type = 'cex' OR l.label_subtype = 'bridge' )
|
||||
WHERE t.block_timestamp >= CURRENT_DATE - 90
|
||||
AND (tx.tx_id IS NOT NULL OR l.label_type IS NOT NULL)
|
||||
GROUP BY 1
|
||||
ORDER BY 3 DESC
|
||||
|
||||
SELECT *
|
||||
FROM solana.core.dim_labels
|
||||
WHERE label_type = 'nft'
|
||||
AND label_subtype = 'nf_token_contract'
|
||||
LIMIT 100
|
||||
|
||||
SELECT *
|
||||
FROM solana.core.fact_nft_sales s
|
||||
JOIN solana.core.fact_transactions t
|
||||
ON t.tx_id = s.tx_id
|
||||
LEFT JOIN solana.core.dim_labels l
|
||||
ON l.address = s.mint
|
||||
WHERE s.block_timestamp >= CURRENT_DATE - 1
|
||||
AND t.block_timestamp >= CURRENT_DATE - 1
|
||||
AND l.label IS NULL
|
||||
ORDER BY s.sales_amount DESC
|
||||
LIMIT 100
|
||||
|
||||
|
||||
SELECT *
|
||||
FROM solana.core.fact_nft_sales s
|
||||
JOIN solana.core.fact_transactions t
|
||||
ON t.tx_id = s.tx_id
|
||||
LEFT JOIN solana.core.dim_labels l
|
||||
ON l.address = s.mint
|
||||
WHERE s.block_timestamp >= CURRENT_DATE - 1
|
||||
AND t.block_timestamp >= CURRENT_DATE - 1
|
||||
AND l.label IS NULL
|
||||
ORDER BY s.sales_amount DESC
|
||||
LIMIT 100
|
||||
|
||||
SELECT *
|
||||
FROM solana.core.fact_nft_sales s
|
||||
WHERE s.block_timestamp >= '2022-11-30'
|
||||
AND s.block_timestamp <= '2022-12-01'
|
||||
ORDER BY s.sales_amount DESC
|
||||
LIMIT 100
|
||||
|
||||
|
||||
SELECT g.total_score
|
||||
, s.result_url
|
||||
, *
|
||||
FROM bi_analytics.bronze.hevo_grades g
|
||||
JOIN bi_analytics.bronze.hevo_submissions s ON s.id = g.submission_id
|
||||
JOIN bi_analytics.bronze.hevo_claims c ON c.id = s.claim_id
|
||||
JOIN bi_analytics.bronze.hevo_bounties b ON b.id = c.bounty_id
|
||||
-- JOIN bi_analytics.bronze.hevo_campaigns ca ON ca.id = b.campaign_id
|
||||
WHERE b.created_at >= '2022-10-01'
|
||||
AND intended_payment_currency = 'RUNE'
|
||||
ORDER BY b.created_at DESC, g.total_score DESC
|
||||
|
||||
|
||||
SELECT s.*
|
||||
FROM solana.core.fact_nft_sales s
|
||||
LEFT JOIN solana.core.dim_labels l
|
||||
ON l.address = s.mint
|
||||
WHERE s.block_timestamp >= '2022-08-01'
|
||||
AND l.address IS NULL
|
||||
AND sales_amount < 1000
|
||||
ORDER BY COALESCE(sales_amount, 0) DESC
|
||||
LIMIT 100
|
||||
|
||||
|
||||
SELECT ca.title
|
||||
, ca.project_name
|
||||
, ca.end_date::date AS date
|
||||
, g.total_score
|
||||
, *
|
||||
FROM bi_analytics.bronze.hevo_grades g
|
||||
JOIN bi_analytics.bronze.hevo_submissions s ON s.id = g.submission_id
|
||||
JOIN bi_analytics.bronze.hevo_claims c ON c.id = s.claim_id
|
||||
JOIN bi_analytics.bronze.hevo_bounties b ON b.id = c.bounty_id
|
||||
-- JOIN bi_analytics.bronze.hevo_campaigns ca ON ca.id = b.campaign_id
|
||||
WHERE ca.project_name ILIKE '%THOR%'
|
||||
AND ca.end_date >= '2022-10-01'
|
||||
ORDER BY ca.end_date, ca.title, g.total_score DESC
|
||||
|
||||
|
||||
SELECT *
|
||||
FROM bi_analytics.bronze.hevo_bounty_collections
|
||||
LIMIT 100
|
||||
|
||||
|
||||
SELECT project_name
|
||||
, COUNT(1) AS n
|
||||
FROM bi_analytics.bronze.hevo_campaigns ca
|
||||
GROUP BY 1
|
||||
ORDER BY 2 DESC
|
||||
|
||||
SELECT *
|
||||
FROM bi_analytics.bronze.hevo_campaigns ca
|
||||
WHERE project_name = 'THORChain'
|
||||
ORDER BY ca.end_date, ca.title DESC
|
||||
@ -1,351 +1,175 @@
|
||||
function(input, output, session) {
|
||||
|
||||
plotly.style <- list(
|
||||
fig_bgcolor = 'rgb(255, 255, 255)',
|
||||
plot_bgcolor = 'rgba(0, 0, 0, 0)',
|
||||
paper_bgcolor = 'rgba(0, 0, 0, 0)',
|
||||
font = list(
|
||||
color = '#FFF', family = 'Roboto Mono')
|
||||
)
|
||||
output$useraddy <- renderUI({
|
||||
textInput("addy", "SOURCE ADDRESS:",
|
||||
placeholder = "paste in an address or click random")
|
||||
})
|
||||
|
||||
output$inputaddy <- renderUI({
|
||||
url.addy <- parseQueryString(session$clientData$url_search)
|
||||
|
||||
if(length(url.addy) > 0) {
|
||||
default.addy <- names(url.addy)[1]
|
||||
userRecord <- reactive({
|
||||
if(!is.null(input$addy)) {
|
||||
|
||||
if(nchar(input$addy) > 0) {
|
||||
|
||||
df[user_address == input$addy]
|
||||
|
||||
} else {
|
||||
default.addy <- NA
|
||||
empty.df
|
||||
}
|
||||
|
||||
if(is.na(default.addy)) {
|
||||
textInput(
|
||||
inputId = 'addy'
|
||||
, label = NULL
|
||||
, width = '100%'
|
||||
, placeholder = 'a Solana address'
|
||||
)
|
||||
} else {
|
||||
textInput(
|
||||
inputId = 'addy'
|
||||
, label = NULL
|
||||
, width = '100%'
|
||||
, value = default.addy
|
||||
)
|
||||
empty.df
|
||||
}
|
||||
|
||||
|
||||
})
|
||||
|
||||
# observeEvent(input$address, {
|
||||
# if(!is.null(input$address)) {
|
||||
# if(substr(input$address, 1, 5) == 'terra') {
|
||||
# updateTextInput(session, 'addy', value = input$address)
|
||||
# }
|
||||
# }
|
||||
# })
|
||||
|
||||
observeEvent(input$addy, {
|
||||
if(!is.null(input$address)) {
|
||||
if(input$addy == input$address) {
|
||||
updateActionButton(session = session, inputId = 'connect', label = 'Disconnect')
|
||||
|
||||
svgColored <- reactive({
|
||||
|
||||
new.svg <- svgdata
|
||||
|
||||
if(!is.null(input$addy)) {
|
||||
|
||||
if(nchar(input$addy) > 0) {
|
||||
|
||||
new.style <- c()
|
||||
|
||||
for(i in 1:7) {
|
||||
tmp <- userRecord()[[categories[i]]]
|
||||
new.style <- c(new.style, c(rep(1, tmp), rep(0, (3-tmp))))
|
||||
}
|
||||
|
||||
for(i in 1:21) {
|
||||
new.svg <- str_replace(string = new.svg, pattern = "%s", replacement = ifelse(new.style[i] == 1, "100%", "20%"))
|
||||
}
|
||||
|
||||
} else {
|
||||
updateActionButton(session = session, inputId = 'connect', label = 'Connect Wallet')
|
||||
for(i in 1:21) {
|
||||
new.svg <- str_replace(string = new.svg, pattern = "%s", replacement = base.style[i])
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
inRangeScores <- reactive(
|
||||
df[ total_score >= input$scorethreshold[1] & total_score <= input$scorethreshold[2]]
|
||||
)
|
||||
inRangeMetricScores <- reactive(
|
||||
df[ total_score >= input$scorethreshold[1] & total_score <= input$scorethreshold[2]]
|
||||
# metric.score.data[`Total Score` >= input$scorethreshold[1] & `Total Score` <= input$scorethreshold[2]]
|
||||
)
|
||||
|
||||
output$title_sentence <- renderText({
|
||||
paste0('Rankings for ',
|
||||
# format(n.scores, big.mark = ','),
|
||||
' Solana addresses scored across 21 metrics in 7 categories.')
|
||||
})
|
||||
|
||||
is.blank <- function(x, false.triggers=FALSE){
|
||||
if(is.function(x)) return(FALSE) # Some of the tests below trigger
|
||||
# warnings when used on functions
|
||||
return(
|
||||
is.null(x) || # Actually this line is unnecessary since
|
||||
length(x) == 0 || # length(NULL) = 0, but I like to be clear
|
||||
all(is.na(x)) ||
|
||||
all(x=="") ||
|
||||
(false.triggers && all(!x))
|
||||
)
|
||||
}
|
||||
observeEvent(input$wallet_address, {
|
||||
print('observeEvent input$wallet_address')
|
||||
print(input$wallet_address)
|
||||
})
|
||||
|
||||
output$your_address <- renderText({
|
||||
val <- 'Wallet not connected'
|
||||
print('output$your_address input$wallet_address')
|
||||
print(input$wallet_address)
|
||||
if (!is.blank(input$wallet_address)) {
|
||||
val <- paste0('Your address is ', input$wallet_address)
|
||||
}
|
||||
paste0(val)
|
||||
})
|
||||
|
||||
output$scoreplot <- renderPlotly({
|
||||
plot.data <- df %>% group_by(total_score) %>% summarize( N=n() ) %>% as.data.table()
|
||||
plot.data <- plot.data[ total_score >= input$scorethreshold[1] & total_score <= input$scorethreshold[2]]
|
||||
|
||||
plot.data[, color_group := ifelse(total_score >= input$scorethreshold[1] & total_score <= input$scorethreshold[2], 'in', 'out')]
|
||||
|
||||
fig <- plot_ly(
|
||||
data = plot.data[total_score > 0]
|
||||
, x = ~total_score
|
||||
, y = ~N
|
||||
, color = ~color_group
|
||||
, type = 'bar'
|
||||
, colors = c('#5494F8', '#dddddd')
|
||||
)
|
||||
|
||||
# fig <- fig %>% add_annotations(
|
||||
# x=28,
|
||||
# y=80000,
|
||||
# xref = 'x',
|
||||
# yref = 'y',
|
||||
# text = paste0(format(nrow(df), big.mark=',', scientific=FALSE), ' <br>addresses selected'),
|
||||
# xanchor = 'right',
|
||||
# showarrow = F,
|
||||
# font = list(size = 20, color = '#5494F8', family = 'Roboto Mono')
|
||||
# )
|
||||
|
||||
fig <- fig %>% layout(
|
||||
xaxis = list(
|
||||
title = ''
|
||||
, showgrid = FALSE
|
||||
, fixedrange = TRUE
|
||||
, color = '#C4CDD5'
|
||||
)
|
||||
, yaxis = list(
|
||||
title = ''
|
||||
, showticklabels = TRUE
|
||||
, showgrid = TRUE
|
||||
, fixedrange = TRUE
|
||||
, gridwidth = 0.5
|
||||
, color = '#C4CDD5'
|
||||
, gridcolor = '#202933'
|
||||
)
|
||||
, showlegend = FALSE
|
||||
, plot_bgcolor = plotly.style$plot_bgcolor
|
||||
, paper_bgcolor = plotly.style$paper_bgcolor
|
||||
) %>%
|
||||
plotly::config(displayModeBar = FALSE) %>%
|
||||
plotly::config(modeBarButtonsToRemove = c('zoomIn2d', 'zoomOut2d'))
|
||||
|
||||
fig
|
||||
})
|
||||
|
||||
# lapply(unique(score_criteria$category), function(tmp.category) {
|
||||
# cat.name.fix <- tolower(gsub(x = tmp.category, pattern = ' ', '_', fixed = TRUE))
|
||||
# output[[cat.name.fix]] <- renderText({
|
||||
# if(is.null(input$addy) | input$addy == '') {
|
||||
# paste0('avg score: ', sprintf('%.1f', round(mean(inRangeScores()[[tmp.category]]), 1)))
|
||||
# } else {
|
||||
# paste0('score: ',
|
||||
# scores[address == input$addy][[tmp.category]],
|
||||
# ' (avg ',
|
||||
# sprintf('%.1f', round(mean(inRangeScores()[[tmp.category]]), 1)),
|
||||
# ')')
|
||||
# }
|
||||
# })
|
||||
# })
|
||||
|
||||
lapply(score_criteria$metric_name, function(metric) {
|
||||
output[[metric]] <- renderText({
|
||||
paste0(format(sum(inRangeMetricScores()[[metric]] > 0), big.mark=',', scientific=FALSE), ' addresses')
|
||||
})
|
||||
})
|
||||
|
||||
# now change the colors of the score boxes:
|
||||
observeEvent(input$addy, {
|
||||
|
||||
lapply(score_criteria$metric_name, function(tmp.metric) {
|
||||
# change.class <- metric.score.data[address == input$addy][[tmp.metric]] > 0
|
||||
change.class <- df[user_address == input$addy][[tmp.metric]] > 0
|
||||
|
||||
if(length(change.class) == 0) change.class <- FALSE
|
||||
toggleClass(id = paste0(tmp.metric, '_div'),
|
||||
class = 'bright',
|
||||
condition = change.class)
|
||||
toggleClass(id = paste0(tmp.metric, '_c'),
|
||||
class = 'showey',
|
||||
condition = change.class)
|
||||
|
||||
})
|
||||
})
|
||||
|
||||
output$user_score <- renderText({
|
||||
if(!length(input$addy)) {
|
||||
paste0(0, '/42')
|
||||
} else {
|
||||
cur <- df[ (user_address == input$addy) ]
|
||||
score <- ifelse(nrow(cur) > 0, cur$total_score[1], 0)
|
||||
paste0(score, '/42')
|
||||
for(i in 1:21) {
|
||||
new.svg <- str_replace(string = new.svg, pattern = "%s", replacement = base.style[i])
|
||||
}
|
||||
}
|
||||
|
||||
new.svg
|
||||
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
output$svgout <- renderUI({
|
||||
HTML(svgColored())
|
||||
})
|
||||
|
||||
observeEvent(input$randomaddy, {
|
||||
updateTextInput(session, "addy", value = sample(df$user_address, 1))
|
||||
}, suspended = F)
|
||||
|
||||
|
||||
output$vs_mean <- renderText({paste0('vs. Mean Score of ', round(mean(inRangeScores()[['total_score']]), 1))})
|
||||
|
||||
getTableData <- reactive(inRangeScores()[order(-total_score)][1:500])
|
||||
|
||||
output$cat_scores_table <- renderReactable({
|
||||
reactable(
|
||||
getTableData()[, list(
|
||||
address = paste0(substr(user_address, 1, 12), '...')
|
||||
, score = total_score
|
||||
, longevity = longevity
|
||||
, activity = activity
|
||||
, governor = governor
|
||||
, bridgor = bridgor
|
||||
, staker = staker
|
||||
, explorer = explorer
|
||||
)]
|
||||
, onClick = 'select'
|
||||
, selection = 'single'
|
||||
, rowStyle = JS(
|
||||
"function(rowInfo) {
|
||||
if (rowInfo && rowInfo.selected) {
|
||||
return { backgroundColor: '#172852' }
|
||||
}
|
||||
}"
|
||||
), defaultColDef = colDef( headerStyle = list(background = '#10151A') )
|
||||
, borderless = TRUE
|
||||
, outlined = FALSE
|
||||
, columns = list(
|
||||
address = colDef(name = 'Address', minWidth = 165, align = 'left'),
|
||||
score = colDef(name = 'Score', align = 'right'),
|
||||
longevity = colDef(name = 'longevity', align = 'right'),
|
||||
activity = colDef(name = 'activity.', align = 'right'),
|
||||
governor = colDef(name = 'governor.', align = 'right'),
|
||||
bridgor = colDef(name = 'bridgor', align = 'right'),
|
||||
staker = colDef(name = 'staker', align = 'right'),
|
||||
explorer = colDef(name = 'explorer', align = 'right')
|
||||
)
|
||||
output$outputslider <- renderUI({
|
||||
sliderTextInput(
|
||||
inputId = "scoreslider",
|
||||
label = NULL,
|
||||
choices = 1:21,
|
||||
selected = c(5, 15),
|
||||
grid = TRUE,
|
||||
width = "100%"
|
||||
)
|
||||
})
|
||||
|
||||
#observing the row selected in the table
|
||||
# to change the input address
|
||||
tableSelected <- reactive(getReactableState('cat_scores_table', 'selected', session))
|
||||
output$scorehist <- renderPlotly({
|
||||
|
||||
|
||||
output$selected <- renderPrint({
|
||||
print(getTableData()[tableSelected()]$address)
|
||||
})
|
||||
|
||||
observeEvent(tableSelected(), {
|
||||
new.addy <- getTableData()[tableSelected()]$address
|
||||
if(length(new.addy) == 1) {
|
||||
updateTextInput(session, 'addy', value = new.addy)
|
||||
if(length(input$scoreslider) > 0) {
|
||||
active.scores <- input$scoreslider[1]:input$scoreslider[2]
|
||||
} else {
|
||||
active.scores <- 5:15
|
||||
}
|
||||
|
||||
to.plot <- rbind(
|
||||
data.table(total_score = 1:5, N = 0),
|
||||
df[, .N, by = total_score][order(total_score)],
|
||||
data.table(total_score = 19:21, N = 0)
|
||||
)
|
||||
to.plot[, bar_color := ifelse(total_score %in% active.scores, bar.plot.colors[1], bar.plot.colors[2])]
|
||||
|
||||
plot_ly(to.plot,
|
||||
x = ~total_score, y = ~N, type = 'bar',
|
||||
marker = list(color = to.plot$bar_color)) %>%
|
||||
layout(bargap = 0.2,
|
||||
xaxis = list(title = "",
|
||||
showticklabels = FALSE,
|
||||
showgrid = FALSE,
|
||||
fixedrange = TRUE),
|
||||
yaxis = list(title = "",
|
||||
showticklabels = FALSE,
|
||||
showgrid = FALSE,
|
||||
fixedrange = TRUE,
|
||||
type = "log"),
|
||||
showlegend = FALSE,
|
||||
margin = list(l=6, r=6, b=0, t=0, autoexpand = FALSE),
|
||||
plot_bgcolor = "transparent",
|
||||
paper_bgcolor = "transparent") %>%
|
||||
config(displayModeBar = FALSE,
|
||||
showLink = FALSE)
|
||||
|
||||
})
|
||||
|
||||
output$bdnldscores <- renderUI({
|
||||
|
||||
tmp.label <- paste("Get Scores for ",
|
||||
format(nrow(df[total_score >= input$scoreslider[1] & total_score <= input$scoreslider[2]]), big.mark = ","),
|
||||
" Users")
|
||||
|
||||
downloadButton(outputId = 'download_scores_metrics',
|
||||
label = tmp.label,
|
||||
icon = NULL)
|
||||
|
||||
observeEvent(input$clearaddy, {
|
||||
updateTextInput(session, 'addy', value = '')
|
||||
})
|
||||
|
||||
output$download_scores_metrics <- downloadHandler(
|
||||
filename = function() {
|
||||
paste('scores_', input$scorethreshold[1], '_to_', input$scorethreshold[2], '_', Sys.Date(), '.csv', sep='')
|
||||
paste('scores_', input$scoreslider[1], '_to_', input$scoreslider[2], '_', Sys.Date(), '.csv', sep='')
|
||||
},
|
||||
content = function(file) {
|
||||
to.download <- merge(inRangeScores(), inRangeMetricScores(), by = c('address', 'Total Score'))
|
||||
to.download <- df[total_score >= input$scoreslider[1] & total_score <= input$scoreslider[2]]
|
||||
write.csv(to.download, file)
|
||||
}
|
||||
)
|
||||
|
||||
addTooltip(session, id = 'net_from_shuttle_cex',
|
||||
title = paste0(
|
||||
'Received more from Bridges or CEXs than sent (or 0 sent) in the last 90 days', '<hr>',
|
||||
'Difficulty: Easier', '<br>',
|
||||
'Points Value: 1', '<hr>',
|
||||
'Data Metric Name: net_from_shuttle_cex'),
|
||||
placement = 'bottom', trigger = 'hover',
|
||||
options = NULL)
|
||||
|
||||
|
||||
# table with links to queries:
|
||||
output$metric_defs <- renderReactable({
|
||||
|
||||
reactable(score_criteria[, list(score_name, metric_name, points, score_description, velocity_query)],
|
||||
defaultColDef = colDef(
|
||||
#align = 'center',
|
||||
headerStyle = list(background = '#10151A')
|
||||
),
|
||||
defaultPageSize = 15,
|
||||
pagination = FALSE,
|
||||
borderless = TRUE,
|
||||
outlined = FALSE,
|
||||
#maxWidth = 100,
|
||||
columns = list(
|
||||
score_name = colDef(name = 'Score Name', maxWidth = 150, align = 'left'),
|
||||
metric_name = colDef(name = 'Metric Name', align = 'left'),
|
||||
points = colDef(name = 'Points', maxWidth = 75, align = 'right'),
|
||||
score_description = colDef(name = 'Score Description', align = 'left'),
|
||||
velocity_query = colDef(name = 'Query', maxWidth = 75, align = 'left', cell = function(velocity_query) {
|
||||
# Render as a link
|
||||
url <- sprintf(paste0(velocity_query))
|
||||
htmltools::tags$a(href = url, target = '_blank', 'link', onclick = "mixpanel.track('ae-click-velocity-link')")
|
||||
}))
|
||||
)
|
||||
output$userscore <- renderText({
|
||||
userRecord()$total_score
|
||||
})
|
||||
|
||||
output$make_toggle_button <- renderUI({
|
||||
actionButton(
|
||||
inputId = 'toggle_button',
|
||||
label = 'Show Table')
|
||||
output$useractivity <- renderText({
|
||||
round(userRecord()[["activity_value"]])
|
||||
})
|
||||
output$usernfts <- renderText({
|
||||
round(userRecord()[["nft_value"]])
|
||||
})
|
||||
output$userlongevity <- renderText({
|
||||
round(userRecord()[["longevity_value"]])
|
||||
})
|
||||
output$uservariety <- renderText({
|
||||
round(userRecord()[["variety_value"]])
|
||||
})
|
||||
output$userstaking <- renderText({
|
||||
round(userRecord()[["staking_value"]])
|
||||
})
|
||||
output$userbridge <- renderText({
|
||||
round(userRecord()[["bridge_value"]])
|
||||
})
|
||||
output$usergovernance <- renderText({
|
||||
round(userRecord()[["governance_value"]])
|
||||
})
|
||||
|
||||
observeEvent(input$toggle_button, {
|
||||
|
||||
toggleElement(
|
||||
id = 'metric_defs'
|
||||
)
|
||||
|
||||
if(input$toggle_button[1] %% 2 == 0) {
|
||||
# change to collapse
|
||||
updateActionButton(inputId = 'toggle_button', label = 'Hide Table')
|
||||
} else {
|
||||
# change to expand
|
||||
updateActionButton(inputId = 'toggle_button', label = 'Show Table')
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
output$download_all_data <- downloadHandler(
|
||||
filename <- function() {
|
||||
#'all_data.csv'
|
||||
ifelse(Sys.info()[['user']] == 'rstudio-connect',
|
||||
'/rstudio-data/lunatics_all_data.csv',
|
||||
'all_data.csv')
|
||||
},
|
||||
|
||||
content <- function(file) {
|
||||
file.copy('all_data.csv', file)
|
||||
},
|
||||
contentType = 'csv'
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -1,355 +1,164 @@
|
||||
# SolarScored leaderboard
|
||||
# #useraddy .form-group {
|
||||
# display: table-row;
|
||||
# }
|
||||
#
|
||||
# #addy-label {
|
||||
# padding-right: 30px;
|
||||
# }
|
||||
|
||||
fluidPage(
|
||||
title = 'SolarScored',
|
||||
tags$head(
|
||||
tags$link(rel = 'stylesheet', type = 'text/css', href = 'shiny.css'),
|
||||
tags$link(rel = 'stylesheet', href = 'https://fonts.googleapis.com/css?family=Roboto+Mono'),
|
||||
tags$link(rel = 'stylesheet', href = 'https://fonts.googleapis.com/css?family=Inter')
|
||||
tags$link(rel = "stylesheet", type = "text/css", href = "shiny.css"),
|
||||
tags$link(rel = "stylesheet", href = "https://fonts.googleapis.com/css?family=Orbitron"),
|
||||
tags$link(rel = "stylesheet", href = "https://fonts.googleapis.com/css?family=Exo+2"),
|
||||
tags$link(rel = "stylesheet", href = "https://fonts.googleapis.com/css?family=Roboto+Mono"),
|
||||
tags$link(rel = "icon", href = "flipside.svg")
|
||||
),
|
||||
tags$style(
|
||||
type='text/css',
|
||||
'.shiny-output-error { visibility: hidden; size: 0.1em}',
|
||||
'.shiny-output-error:before { visibility: hidden; size: 0.1em}'
|
||||
),
|
||||
# LINK to mixpanel
|
||||
tags$head(tags$script(src = 'mixpanel.js')),
|
||||
# SUPPRESS loading warnings/errors
|
||||
withTags({
|
||||
header(
|
||||
class='top-banner',
|
||||
section(
|
||||
a(
|
||||
class='fs-logo'
|
||||
, href='https://www.flipsidecrypto.com'
|
||||
, img(src = 'newlogo.svg')
|
||||
, onclick = "mixpanel.track('lts-click-logo-icon')"
|
||||
)
|
||||
, section(
|
||||
class='socials'
|
||||
, a(class='twitter', target = '_blank', href='https://twitter.com/flipsidecrypto', 'Twitter', onclick = "mixpanel.track('lst-click-twitter-icon')")
|
||||
, a(class='linkedin', target = '_blank', href='https://www.linkedin.com/company/flipside-crypto', 'LinkedIn', onclick = "mixpanel.track('lts-click-linkedin-icon')")
|
||||
, a(class='discord', target = '_blank', href='https://flipsidecrypto.com/discord', 'Discord', onclick = "mixpanel.track('lts-click-discord-icon')")
|
||||
, a(href='https://app.flipsidecrypto.com/auth/signup/velocity', target = '_blank', 'Sign Up', onclick = "mixpanel.track('lts-click-signup-icon')")
|
||||
)
|
||||
)
|
||||
)
|
||||
}),
|
||||
|
||||
useShinyjs(),
|
||||
br(),
|
||||
fluidRow(class = 'description', textOutput('your_address')),
|
||||
solAttestR::SolWalletHandler("wallet_address"),
|
||||
fluidRow(class = 'titles', 'SolarScored Rankings'),
|
||||
fluidRow(class = 'description', 'Version 0.1 of Creating an LTV metric on Solana. Can be used to quantify user value and behavior for the Foundation or projects looking to airdrop or target users.'),
|
||||
br(),
|
||||
fluidRow(class = 'description', textOutput('title_sentence')),
|
||||
br(),
|
||||
fluidRow(
|
||||
class = 'wrapper',
|
||||
column(
|
||||
5,
|
||||
fluidRow(class = 'choose', 'Select a score range (0 to 42) to subset addresses'),
|
||||
fluidRow(
|
||||
div(
|
||||
style = 'margin: auto; width: 90%;'
|
||||
, sliderInput(inputId = 'scorethreshold', label = NULL, min = 1, max = 42, value = c(1, 42), width = '100%')
|
||||
)
|
||||
)
|
||||
, fluidRow(
|
||||
a(
|
||||
downloadButton(
|
||||
'download_scores_metrics'
|
||||
, label = 'Download Scores & Metrics'
|
||||
, icon = icon('arrow-down')
|
||||
, onclick = "mixpanel.track('lts-download-scores')")
|
||||
)
|
||||
)
|
||||
)
|
||||
, column(
|
||||
7
|
||||
, plotlyOutput('scoreplot', height = '200px')
|
||||
)
|
||||
), # close wrapper
|
||||
br(),
|
||||
chooseSliderSkin("Round"),
|
||||
|
||||
fluidRow(
|
||||
class = 'wrapper'
|
||||
, fluidRow(
|
||||
column(
|
||||
7
|
||||
, div(class = 'toppad', 'Enter an Address or pick one from the Leaderboard')
|
||||
, uiOutput('inputaddy')
|
||||
, column(
|
||||
5
|
||||
, div(class = 'userscore', 'Score'
|
||||
, br()
|
||||
, textOutput('user_score')
|
||||
, textOutput('vs_mean'))
|
||||
)
|
||||
)
|
||||
)
|
||||
, br()
|
||||
, 'Leaderboard Summary'
|
||||
, fluidRow(
|
||||
class = 'doesscroll'
|
||||
, tags$table(
|
||||
tags$tr(
|
||||
tags$th(
|
||||
'LONGEVITY'
|
||||
, div(class = 'catscore', uiOutput('activity'))
|
||||
)
|
||||
, tags$th(
|
||||
'ACTIVITY'
|
||||
, div(class = 'catscore', uiOutput('governance'))
|
||||
)
|
||||
, tags$th(
|
||||
'GOVERNANCE'
|
||||
, div(class = 'catscore', uiOutput('degeneracy'))
|
||||
)
|
||||
, tags$th(
|
||||
'BRIDGING'
|
||||
, div(class = 'catscore', uiOutput('cash_out_vs_hodl'))
|
||||
)
|
||||
, tags$th(
|
||||
'STAKING'
|
||||
, div(class = 'catscore', uiOutput('airdrops'))
|
||||
)
|
||||
, tags$th(
|
||||
'EXPLORING'
|
||||
, div(class = 'catscore', uiOutput('explorer'))
|
||||
)
|
||||
, tags$th(
|
||||
'NFTS'
|
||||
, div(class = 'catscore', uiOutput('nfts'))
|
||||
)
|
||||
fluidRow(class = "titlerow",
|
||||
column(9, class = "title", img(src = "solarscored-logo.svg", width = '480px')),
|
||||
column(3,
|
||||
div(id = "icons",
|
||||
div(class = "aboutlinks",
|
||||
a(id = 'fork',
|
||||
href = "https://github.com/FlipsideCrypto/user_metrics/tree/main/apps/solana/solarscored",
|
||||
img(src = "github.svg", width = "30px"),
|
||||
target = "_blank")),
|
||||
bsTooltip(id = "fork",
|
||||
title = "Fork this App",
|
||||
placement = "bottom", trigger = "hover"),
|
||||
div(class = "aboutlinks",
|
||||
a(id = "flippy",
|
||||
href = "https://next.flipsidecrypto.xyz/",
|
||||
img(src = "flipside.svg", width = "30px"),
|
||||
target = "_blank")),
|
||||
bsTooltip(id = "flippy",
|
||||
title = "Get the Data",
|
||||
placement = "bottom", trigger = "hover"),
|
||||
div(class = "aboutlinks",
|
||||
a(id = "solana", href = "https://solana.com",
|
||||
img(src = "solana.svg", width = "30px"),
|
||||
target = "_blank")),
|
||||
bsTooltip(id = "solana",
|
||||
title = "Solana",
|
||||
placement = "bottom", trigger = "hover")
|
||||
|
||||
))),
|
||||
fluidRow(class = "appbody",
|
||||
|
||||
fluidRow(class = "dashmid",
|
||||
column(7,
|
||||
div(class = "addybuttons",
|
||||
uiOutput("useraddy"),
|
||||
actionButton(inputId = "randomaddy", label = img(src = "random.svg", height = "26")),
|
||||
),
|
||||
tags$tr(
|
||||
tags$td(
|
||||
id = 'longevity_1_div'
|
||||
, div(
|
||||
class='outerDiv'
|
||||
, div(class = 'leftDiv', 'Newbie')
|
||||
, div(class = 'rightDiv', div(class='hidey', id = 'longevity_1_c', img(src = 'badge_1.svg', width = '20px', height = '20px')))
|
||||
)
|
||||
, br()
|
||||
, div(class='small-text', textOutput('longevity_1'))
|
||||
)
|
||||
, tags$td(
|
||||
id = 'activity_1_div'
|
||||
, div(
|
||||
class='outerDiv'
|
||||
, div(
|
||||
class = 'leftDiv'
|
||||
, 'Occasional'
|
||||
)
|
||||
, div(class = 'rightDiv', div(class='hidey', id = 'activity_1_c', img(src = 'badge_1.svg', width = '20px', height = '20px')))
|
||||
)
|
||||
, br()
|
||||
, div(class='small-text', textOutput('activity_1'))
|
||||
)
|
||||
, tags$td(
|
||||
id = 'governor_1_div'
|
||||
, div(
|
||||
class='outerDiv'
|
||||
, div(class = 'leftDiv', 'Gov Degen')
|
||||
, div(class = 'rightDiv', div(class='hidey', id = 'governor_1_c', img(src = 'badge_1.svg', width = '20px', height = '20px')))
|
||||
)
|
||||
, br()
|
||||
, div(class='small-text', textOutput('governor_1'))
|
||||
|
||||
div(id = "wheelpart",
|
||||
uiOutput("svgout") %>%
|
||||
withSpinner(hide.ui = FALSE, color = "#9945FF", size = 2)),
|
||||
a(id = "pic",
|
||||
capture::capture(
|
||||
selector = "svg",
|
||||
filename = "mysolarscore.png",
|
||||
options = list(bgcolor = "#FFF"),
|
||||
#scale = 2,
|
||||
img(src = "camera.svg", height = "20"),
|
||||
title = "Download the Circle")),
|
||||
bsTooltip(id = "pic",
|
||||
title = "Download the Wheel",
|
||||
placement = "top", trigger = "hover"),
|
||||
|
||||
|
||||
),
|
||||
tags$td(id = 'bridgor_1_div',
|
||||
div(class='outerDiv',
|
||||
div(class = 'leftDiv', 'Bridgor'),
|
||||
div(class = 'rightDiv', div(class='hidey', id = 'bridgor_1_c', img(src = 'badge_1.svg', width = '20px', height = '20px')))),
|
||||
br(),
|
||||
div(class='small-text', textOutput('bridgor_1'))),
|
||||
tags$td(id = 'staker_1_div',
|
||||
div(class='outerDiv',
|
||||
div(class = 'leftDiv', 'Stakor'),
|
||||
div(class = 'rightDiv', div(class='hidey', id = 'staker_1_c', img(src = 'badge_1.svg', width = '20px', height = '20px')))),
|
||||
br(),
|
||||
div(class='small-text', textOutput('staker_1'))),
|
||||
tags$td(id = 'explorer_1_div',
|
||||
div(class='outerDiv',
|
||||
div(class = 'leftDiv', 'Exploror'),
|
||||
div(class = 'rightDiv', div(class='hidey', id = 'explorer_1_c', img(src = 'badge_1.svg', width = '20px', height = '20px')))),
|
||||
br(),
|
||||
div(class='small-text', textOutput('explorer_1'))),
|
||||
tags$td(id = 'nfts_1_div',
|
||||
div(class='outerDiv',
|
||||
div(class = 'leftDiv', 'I dabble'),
|
||||
div(class = 'rightDiv', div(class='hidey', id = 'nfts_1_c', img(src = 'badge_1.svg', width = '20px', height = '20px')))),
|
||||
br(),
|
||||
div(class='small-text', textOutput('nfts_1')))
|
||||
|
||||
column(5,
|
||||
div(id = "leftbox",
|
||||
div(class = "boxtitle", "Address Metrics"),
|
||||
|
||||
div(id = "totalscore",
|
||||
div(class = "score", textOutput("userscore")),
|
||||
div(class = "yourscore", "SolarScore")),
|
||||
bsTooltip(id = "totalscore",
|
||||
title = "Your total score out of a possible 21 points, up to 3 for each of the 7 categories.",
|
||||
placement = "top", trigger = "hover"),
|
||||
|
||||
fluidRow(class = "metricrow",
|
||||
div(class = "metricholder", id = "boxuseractivity",
|
||||
div(class = "metric", textOutput("useractivity")),
|
||||
div(class = "metricname", "Activity"),
|
||||
bsTooltip(id = "boxuseractivity",
|
||||
title = "# transactions in the last 90 days.",
|
||||
placement = "top", trigger = "hover")),
|
||||
|
||||
div(class = "metricholder", id = "boxusernfts",
|
||||
div(class = "metric", textOutput("usernfts")),
|
||||
div(class = "metricname", "NFTs"),
|
||||
bsTooltip(id = "boxusernfts",
|
||||
title = "90 day buy + mint volume (SOL)",
|
||||
placement = "top", trigger = "hover")),
|
||||
|
||||
div(class = "metricholder", id = "boxusergovernance",
|
||||
div(class = "metric", textOutput("usergovernance")),
|
||||
div(class = "metricname", "Gov"),
|
||||
bsTooltip(id = "boxusergovernance",
|
||||
title = "# governance votes in the last 90 days",
|
||||
placement = "top", trigger = "hover")),
|
||||
|
||||
div(class = "metricholder", id = "boxuservariety",
|
||||
div(class = "metric", textOutput("uservariety")),
|
||||
div(class = "metricname", "Variety"),
|
||||
bsTooltip(id = "boxuservariety",
|
||||
title = "# programs interacted with in the last 90 days",
|
||||
placement = "top", trigger = "hover"))
|
||||
),
|
||||
tags$tr(
|
||||
tags$td(
|
||||
id = 'longevity_2_div'
|
||||
, div(
|
||||
class='outerDiv'
|
||||
, div(class = 'leftDiv', 'Experienced')
|
||||
, div(class = 'rightDiv', div(class='hidey', id = 'longevity_2_c', img(src = 'badge_2.svg', width = '20px', height = '20px')))
|
||||
)
|
||||
, br()
|
||||
, div(class='small-text', textOutput('longevity_2'))
|
||||
)
|
||||
, tags$td(
|
||||
id = 'activity_2_div'
|
||||
, div(
|
||||
class='outerDiv'
|
||||
, div(
|
||||
class = 'leftDiv'
|
||||
, 'Active'
|
||||
)
|
||||
, div(class = 'rightDiv', div(class='hidey', id = 'activity_2_c', img(src = 'badge_2.svg', width = '20px', height = '20px')))
|
||||
)
|
||||
, br()
|
||||
, div(class='small-text', textOutput('activity_2'))
|
||||
)
|
||||
, tags$td(
|
||||
id = 'governor_2_div'
|
||||
, div(
|
||||
class='outerDiv'
|
||||
, div(class = 'leftDiv', 'Solana Activist')
|
||||
, div(class = 'rightDiv', div(class='hidey', id = 'governor_2_c', img(src = 'badge_2.svg', width = '20px', height = '20px')))
|
||||
)
|
||||
, br()
|
||||
, div(class='small-text', textOutput('governor_2'))
|
||||
|
||||
fluidRow(class = "metricrow",
|
||||
div(class = "metricholder2", id = "boxuserstaking",
|
||||
div(class = "metric", textOutput("userstaking")),
|
||||
div(class = "metricname", "Staking"),
|
||||
bsTooltip(id = "boxuserstaking",
|
||||
title = "SOL currently staked",
|
||||
placement = "top", trigger = "hover")),
|
||||
|
||||
div(class = "metricholder2", id = "boxuserlongevity",
|
||||
div(class = "metric", textOutput("userlongevity")),
|
||||
div(class = "metricname", "Longevity"),
|
||||
bsTooltip(id = "boxuserlongevity",
|
||||
title = "# calendar months with a transaction in the last 90 days",
|
||||
placement = "top", trigger = "hover")),
|
||||
|
||||
div(class = "metricholder2", id = "boxuserbridge",
|
||||
div(class = "metric", textOutput("userbridge")),
|
||||
div(class = "metricname", "Bridging"),
|
||||
bsTooltip(id = "boxuserbridge",
|
||||
title = "# times funds bridged onto Solana in the last 90 days",
|
||||
placement = "top", trigger = "hover"))
|
||||
),
|
||||
tags$td(id = 'bridgor_2_div',
|
||||
div(class='outerDiv',
|
||||
div(class = 'leftDiv', 'Bridgooor'),
|
||||
div(class = 'rightDiv', div(class='hidey', id = 'bridgor_2_c', img(src = 'badge_2.svg', width = '20px', height = '20px')))),
|
||||
br(),
|
||||
div(class='small-text', textOutput('bridgor_2'))),
|
||||
tags$td(id = 'staker_2_div',
|
||||
div(class='outerDiv',
|
||||
div(class = 'leftDiv', 'Stakooor'),
|
||||
div(class = 'rightDiv', div(class='hidey', id = 'staker_2_c', img(src = 'badge_2.svg', width = '20px', height = '20px')))),
|
||||
br(),
|
||||
div(class='small-text', textOutput('staker_2'))),
|
||||
tags$td(id = 'explorer_2_div',
|
||||
div(class='outerDiv',
|
||||
div(class = 'leftDiv', 'Explorooor'),
|
||||
div(class = 'rightDiv', div(class='hidey', id = 'explorer_2_c', img(src = 'badge_2.svg', width = '20px', height = '20px')))),
|
||||
br(),
|
||||
div(class='small-text', textOutput('explorer_2'))),
|
||||
tags$td(id = 'nfts_2_div',
|
||||
div(class='outerDiv',
|
||||
div(class = 'leftDiv', 'NFT Enjoyooor'),
|
||||
div(class = 'rightDiv', div(class='hidey', id = 'nfts_2_c', img(src = 'badge_2.svg', width = '20px', height = '20px')))),
|
||||
br(),
|
||||
div(class='small-text', textOutput('nfts_2')))
|
||||
div(id = "hovernote", "Hover over Metric for Details"),
|
||||
),
|
||||
tags$tr(
|
||||
tags$td(
|
||||
id = 'longevity_3_div'
|
||||
, div(
|
||||
class='outerDiv'
|
||||
, div(class = 'leftDiv', 'Grizzled Veteran')
|
||||
, div(class = 'rightDiv', div(class='hidey', id = 'longevity_3_c', img(src = 'badge_3.svg', width = '20px', height = '20px')))
|
||||
)
|
||||
, br()
|
||||
, div(class='small-text', textOutput('longevity_3'))
|
||||
)
|
||||
, tags$td(
|
||||
id = 'activity_3_div'
|
||||
, div(
|
||||
class='outerDiv'
|
||||
, div(
|
||||
class = 'leftDiv'
|
||||
, 'Unhinged'
|
||||
)
|
||||
, div(class = 'rightDiv', div(class='hidey', id = 'activity_3_c', img(src = 'badge_3.svg', width = '20px', height = '20px')))
|
||||
)
|
||||
, br()
|
||||
, div(class='small-text', textOutput('activity_3'))
|
||||
)
|
||||
, tags$td(
|
||||
id = 'governor_3_div'
|
||||
, div(
|
||||
class='outerDiv'
|
||||
, div(class = 'leftDiv', 'Rock the Vote')
|
||||
, div(class = 'rightDiv', div(class='hidey', id = 'governor_3_c', img(src = 'badge_3.svg', width = '20px', height = '20px')))
|
||||
)
|
||||
, br()
|
||||
, div(class='small-text', textOutput('governor_3'))
|
||||
),
|
||||
tags$td(id = 'bridgor_3_div',
|
||||
div(class='outerDiv',
|
||||
div(class = 'leftDiv', 'Bridgooooor'),
|
||||
div(class = 'rightDiv', div(class='hidey', id = 'bridgor_3_c', img(src = 'badge_3.svg', width = '20px', height = '20px')))),
|
||||
br(),
|
||||
div(class='small-text', textOutput('bridgor_3'))),
|
||||
tags$td(id = 'staker_3_div',
|
||||
div(class='outerDiv',
|
||||
div(class = 'leftDiv', 'Stakooooor'),
|
||||
div(class = 'rightDiv', div(class='hidey', id = 'staker_3_c', img(src = 'badge_3.svg', width = '20px', height = '20px')))),
|
||||
br(),
|
||||
div(class='small-text', textOutput('staker_3'))),
|
||||
tags$td(id = 'explorer_3_div',
|
||||
div(class='outerDiv',
|
||||
div(class = 'leftDiv', 'Explorooooor'),
|
||||
div(class = 'rightDiv', div(class='hidey', id = 'explorer_3_c', img(src = 'badge_3.svg', width = '20px', height = '20px')))),
|
||||
br(),
|
||||
div(class='small-text', textOutput('explorer_3'))),
|
||||
tags$td(id = 'nfts_3_div',
|
||||
div(class='outerDiv',
|
||||
div(class = 'leftDiv', 'NFT Whale'),
|
||||
div(class = 'rightDiv', div(class='hidey', id = 'nfts_3_c', img(src = 'badge_3.svg', width = '20px', height = '20px')))),
|
||||
br(),
|
||||
div(class='small-text', textOutput('nfts_3')))
|
||||
),
|
||||
) # close table
|
||||
) # close table row
|
||||
), # close wrapper
|
||||
lapply(score_criteria$metric_name, function(i) {
|
||||
|
||||
score.info <- score_criteria[metric_name == i]
|
||||
|
||||
tmp.title <- paste0(
|
||||
score.info$score_description, '<hr>',
|
||||
'Difficulty: ', c('Easier', 'Harder', 'Degen Only')[score.info$points], '<br>',
|
||||
'Points Value: ', score.info$points, '<hr>',
|
||||
'Data Metric Name: ', score.info$metric_name)
|
||||
|
||||
shinyBS::bsTooltip(id = i,
|
||||
title = tmp.title)
|
||||
}),
|
||||
br(),
|
||||
|
||||
fluidRow(class = 'wrapper',
|
||||
div(class = 'boldwhite', 'Leaderboard for Selected Addresses'), br(),
|
||||
div(class = 'subtitle', 'Click a row to explore an address. Click a column to sort by that Category.'),
|
||||
reactableOutput('cat_scores_table'), br(),
|
||||
fluidRow(class = 'downloadrow', a(downloadButton('download_all_data',
|
||||
label = 'Download Raw Data by Address (~175MB)', icon = icon('arrow-down'),
|
||||
onclick = "mixpanel.track('lts-download-all')")))),
|
||||
br(),br(),
|
||||
fluidRow(class = 'wrapper',
|
||||
div(class = 'boldwhite', 'More About this App'),
|
||||
br(),
|
||||
div(class = 'disclaimer', "This app was created to showcase 21 behaviors that we associate with positive contribution to the Solana ecosystem.
|
||||
These are certainly not the only ways that an address can contribute to the ecosystem, so we encourage you to DYOR. We've made all of
|
||||
our data available, ether through the download links above, or if you want to go deeper, we have linked to every query used to create
|
||||
this leadearboard in the table below. Note that there are ~6M addresses in the full data file as it includes addresses that scored 0 but still
|
||||
had enough activity to show up in the calculation of at least one metric. The data refreshes once every two hours."),
|
||||
br(),
|
||||
div(class = 'disclaimer', 'We love geeking out on methodology and data, so if you have questions or ideas please visit us on our
|
||||
discord. Thanks for stopping by SolarScored!'),
|
||||
br(),
|
||||
div(class = 'subtitle', 'Metric Details + Query Links'),
|
||||
reactableOutput('metric_defs')
|
||||
),
|
||||
br(), br(), br(), br()
|
||||
|
||||
) # close fluid page
|
||||
|
||||
|
||||
div(id = "botrightbox",
|
||||
div(class = "boxtitle", "Download All Scores"),
|
||||
div(id = "indent", "Select Addresses by Score:"),
|
||||
div(id = "sliderbox",
|
||||
plotlyOutput("scorehist", height = "100px"),
|
||||
uiOutput("outputslider"),
|
||||
uiOutput("bdnldscores")))
|
||||
|
||||
) #close left column box
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
) # close dashmid
|
||||
|
||||
#fluidRow(class = "dashbottom", "this is the bottom!")
|
||||
|
||||
), #close appbody
|
||||
br(), br(), br()
|
||||
|
||||
|
||||
) # close app
|
||||
|
||||
@ -39,76 +39,74 @@ library(odbc)
|
||||
|
||||
user <- Sys.info()[['user']]
|
||||
isRstudio <- user == 'rstudio-connect'
|
||||
switch(
|
||||
isRstudio
|
||||
, source("/home/data-science/data_science/util/util_functions.R")
|
||||
, source("~/data_science/util/util_functions.R")
|
||||
)
|
||||
if(isRstudio) {
|
||||
source("/home/data-science/data_science/util/util_functions.R")
|
||||
} else {
|
||||
source("~/data_science/util/util_functions.R")
|
||||
}
|
||||
|
||||
query <- "
|
||||
SELECT signers[0]::string AS user_address
|
||||
, COUNT(DISTINCT DATE_TRUNC('month', block_timestamp)) AS value
|
||||
long.act.query <- "
|
||||
WITH months AS (SELECT
|
||||
signers[0]::string AS user_address,
|
||||
count(tx_id) AS n_txn,
|
||||
DATE_TRUNC('month', block_timestamp) AS month
|
||||
FROM solana.core.fact_transactions
|
||||
GROUP BY 1
|
||||
WHERE
|
||||
block_timestamp > current_date - 90
|
||||
AND
|
||||
user_address NOT IN (SELECT address FROM solana.core.dim_labels)
|
||||
GROUP BY user_address, month
|
||||
)
|
||||
SELECT
|
||||
user_address, sum(n_txn) AS activity_value, count(month) AS longevity_value
|
||||
FROM months
|
||||
GROUP BY user_address
|
||||
"
|
||||
longevity <- QuerySnowflake(query)
|
||||
colnames(longevity)[2] <- 'value'
|
||||
func <- function(x) {
|
||||
if (x < 2) {return(0)}
|
||||
if (x < 6) {return(1)}
|
||||
if (x < 12) {return(2)}
|
||||
sol.long.act <- QuerySnowflake(long.act.query)
|
||||
|
||||
long.func <- function(x) {
|
||||
if (x < 1) {return(0)}
|
||||
if (x < 2) {return(1)}
|
||||
if (x < 3) {return(2)}
|
||||
return(3)
|
||||
}
|
||||
longevity[, level := sapply(value, func) ]
|
||||
longevity[, metric := 'n_months_active' ]
|
||||
longevity <- longevity[, list(metric, user_address, value, level) ]
|
||||
print(longevity %>% group_by(level) %>% summarize(n=n()) %>% as.data.table())
|
||||
|
||||
query <- "
|
||||
SELECT signers[0]::string AS user_address
|
||||
, COUNT(1) AS value
|
||||
FROM solana.core.fact_transactions
|
||||
WHERE block_timestamp >= CURRENT_DATE - 90
|
||||
GROUP BY 1
|
||||
"
|
||||
activity <- QuerySnowflake(query)
|
||||
colnames(activity)[2] <- 'value'
|
||||
func <- function(x) {
|
||||
if (x < 10) {return(0)}
|
||||
if (x < 100) {return(1)}
|
||||
if (x < 1000) {return(2)}
|
||||
activity.func <- function(x) {
|
||||
if (x < 5) {return(0)}
|
||||
if (x < 10) {return(1)}
|
||||
if (x < 20) {return(2)}
|
||||
return(3)
|
||||
}
|
||||
activity[, level := sapply(value, func) ]
|
||||
activity[, metric := 'n_user_tx' ]
|
||||
activity <- activity[, list(metric, user_address, value, level) ]
|
||||
print(activity %>% group_by(level) %>% summarize(n=n()) %>% as.data.table())
|
||||
|
||||
query <- "
|
||||
sol.long.act[, longevity := sapply(longevity_value, long.func) ]
|
||||
sol.long.act[, activity := sapply(activity_value, activity.func) ]
|
||||
|
||||
|
||||
|
||||
# GOVERNANCE
|
||||
gov.query <- "
|
||||
SELECT voter AS user_address
|
||||
, COUNT(1) AS value
|
||||
, COUNT(DISTINCT program_name) AS n_user_votes_programs
|
||||
, COUNT(1) AS governance_value
|
||||
--, COUNT(DISTINCT program_name) AS governance_value
|
||||
FROM solana.core.fact_proposal_votes
|
||||
GROUP BY 1
|
||||
WHERE
|
||||
block_timestamp > current_date - 180
|
||||
AND
|
||||
user_address NOT IN (SELECT address FROM solana.core.dim_labels)
|
||||
GROUP BY user_address
|
||||
ORDER BY 2 DESC
|
||||
"
|
||||
governor <- QuerySnowflake(query)
|
||||
colnames(governor)[1] <- 'user_address'
|
||||
colnames(governor)[2] <- 'value'
|
||||
func <- function(x) {
|
||||
if (x < 1) {return(0)}
|
||||
if (x < 10) {return(1)}
|
||||
if (x < 100) {return(2)}
|
||||
sol.gov <- QuerySnowflake(gov.query)
|
||||
|
||||
gov.func <- function(x) {
|
||||
if (x < 2) {return(1)}
|
||||
if (x < 3) {return(2)}
|
||||
return(3)
|
||||
}
|
||||
governor[, level := sapply(value, func) ]
|
||||
governor[, metric := 'n_user_votes' ]
|
||||
governor <- governor[, list(metric, user_address, value, level) ]
|
||||
print(governor %>% group_by(level) %>% summarize(n=n()) %>% as.data.table())
|
||||
sol.gov[, governance := sapply(governance_value, gov.func) ]
|
||||
|
||||
|
||||
# Bridgor - How many times are they bridging assets onto Solana (from a bridge or CEX)?
|
||||
query <- "
|
||||
bridge.query <- "
|
||||
WITH tx AS (
|
||||
SELECT DISTINCT tx_id
|
||||
FROM solana.core.fact_events e
|
||||
@ -117,9 +115,8 @@ query <- "
|
||||
AND l.label_subtype = 'bridge'
|
||||
WHERE e.block_timestamp >= CURRENT_DATE - 90
|
||||
)
|
||||
SELECT tx_to AS user_address
|
||||
, COUNT(1) AS n_bridge
|
||||
, SUM(CASE WHEN mint = 'So11111111111111111111111111111111111111112' THEN amount ELSE 0 END) AS value
|
||||
SELECT tx_to AS user_address, COUNT(1) AS bridge_value
|
||||
--, SUM(CASE WHEN mint = 'So11111111111111111111111111111111111111112' THEN amount ELSE 0 END) AS value
|
||||
FROM solana.core.fact_transfers t
|
||||
LEFT JOIN tx ON tx.tx_id = t.tx_id
|
||||
LEFT JOIN solana.core.dim_labels l
|
||||
@ -127,235 +124,140 @@ query <- "
|
||||
AND (l.label_type = 'cex' OR l.label_subtype = 'bridge' )
|
||||
WHERE t.block_timestamp >= CURRENT_DATE - 90
|
||||
AND (tx.tx_id IS NOT NULL OR l.label_type IS NOT NULL)
|
||||
GROUP BY 1
|
||||
ORDER BY 3 DESC
|
||||
"
|
||||
bridgor <- QuerySnowflake(query)
|
||||
colnames(bridgor)[1] <- 'user_address'
|
||||
colnames(bridgor)[3] <- 'value'
|
||||
func <- function(x) {
|
||||
AND user_address NOT IN (SELECT address FROM solana.core.dim_labels)
|
||||
GROUP BY user_address"
|
||||
|
||||
sol.bridge <- QuerySnowflake(bridge.query)
|
||||
|
||||
bridge.func <- function(x) {
|
||||
if (x < 1) {return(0)}
|
||||
if (x < 100) {return(1)}
|
||||
if (x < 1000) {return(2)}
|
||||
if (x < 2) {return(1)}
|
||||
if (x < 3) {return(2)}
|
||||
return(3)
|
||||
}
|
||||
bridgor[, level := sapply(value, func) ]
|
||||
bridgor[, metric := 'bridged_sol' ]
|
||||
bridgor <- bridgor[, list(metric, user_address, value, level) ]
|
||||
print( bridgor %>% group_by(level) %>% summarize(n=n()) %>% as.data.table() )
|
||||
sol.bridge[, bridge := sapply(bridge_value, bridge.func) ]
|
||||
|
||||
|
||||
# Staker - How much SOL have they staked?
|
||||
query <- "
|
||||
staking.query <- "
|
||||
WITH b0 AS (
|
||||
SELECT *
|
||||
, ROW_NUMBER() OVER (PARTITION BY stake_authority ORDER BY block_timestamp DESC) AS rn
|
||||
FROM solana.core.ez_staking_lp_actions
|
||||
|
||||
)
|
||||
SELECT stake_authority AS user_address
|
||||
, COALESCE(post_tx_staked_balance, 0) * POWER(10, -9) AS value
|
||||
, COALESCE(post_tx_staked_balance, 0) * POWER(10, -9) AS staking_value
|
||||
FROM b0
|
||||
WHERE rn = 1
|
||||
|
||||
AND
|
||||
user_address NOT IN (SELECT address FROM solana.core.dim_labels)
|
||||
"
|
||||
staker <- QuerySnowflake(query)
|
||||
colnames(staker)[2] <- 'value'
|
||||
staker <- staker[ !is.na(value) ]
|
||||
func <- function(x) {
|
||||
sol.staking <- QuerySnowflake(staking.query)
|
||||
|
||||
|
||||
staking.func <- function(x) {
|
||||
if (x < 1) {return(0)}
|
||||
if (x < 100) {return(1)}
|
||||
if (x < 1000) {return(2)}
|
||||
if (x < 5) {return(1)}
|
||||
if (x < 15) {return(2)}
|
||||
return(3)
|
||||
}
|
||||
staker[, level := sapply(value, func) ]
|
||||
staker[, metric := 'staked_sol' ]
|
||||
staker <- staker[, list(metric, user_address, value, level) ]
|
||||
print( staker %>% group_by(level) %>% summarize(n=n()) %>% as.data.table() )
|
||||
sol.staking[, staking := sapply(staking_value, staking.func) ]
|
||||
|
||||
# explorer
|
||||
query <- "
|
||||
WITH signers AS (
|
||||
SELECT tx_id
|
||||
, signers[0]::string AS user_address
|
||||
FROM solana.core.fact_transactions
|
||||
WHERE block_timestamp >= CURRENT_DATE - 90
|
||||
GROUP BY 1, 2
|
||||
)
|
||||
SELECT user_address
|
||||
, COUNT(DISTINCT COALESCE(l.label, e.program_id)) AS value
|
||||
FROM solana.core.fact_events e
|
||||
JOIN signers s ON s.tx_id = e.tx_id
|
||||
LEFT JOIN solana.core.dim_labels l
|
||||
ON l.address = e.program_id
|
||||
WHERE e.block_timestamp >= CURRENT_DATE - 90
|
||||
GROUP BY 1
|
||||
# variety
|
||||
variety.query <- "
|
||||
select
|
||||
signers[0]::string AS user_address,
|
||||
count(distinct(program_id)) AS variety_value
|
||||
from SOLANA.CORE.FACT_EVENTS
|
||||
where block_timestamp > current_date - 90
|
||||
AND user_address NOT IN (SELECT address FROM solana.core.dim_labels)
|
||||
group by user_address
|
||||
"
|
||||
explorer <- QuerySnowflake(query)
|
||||
colnames(explorer)[2] <- 'value'
|
||||
func <- function(x) {
|
||||
sol.variety <- QuerySnowflake(variety.query)
|
||||
summary(sol.variety$n_programs)
|
||||
var.func <- function(x) {
|
||||
if (x < 1) {return(0)}
|
||||
if (x < 10) {return(1)}
|
||||
if (x < 25) {return(2)}
|
||||
if (x < 5) {return(1)}
|
||||
if (x < 10) {return(2)}
|
||||
return(3)
|
||||
}
|
||||
explorer[, level := sapply(value, func) ]
|
||||
explorer[, metric := 'n_unique_programs' ]
|
||||
explorer <- explorer[, list(metric, user_address, value, level) ]
|
||||
print( explorer %>% group_by(level) %>% summarize(n=n()) %>% as.data.table() )
|
||||
sol.variety[, variety := sapply(variety_value, var.func) ]
|
||||
|
||||
|
||||
# nfts
|
||||
query <- "
|
||||
mints.query <- "
|
||||
WITH buys AS (
|
||||
SELECT purchaser AS user_address
|
||||
, SUM(sales_amount) AS buy_volume
|
||||
FROM solana.core.fact_nft_sales
|
||||
WHERE block_timestamp >= CURRENT_DATE - 180
|
||||
AND succeeded
|
||||
GROUP BY 1
|
||||
), sells AS (
|
||||
SELECT seller AS user_address
|
||||
, SUM(sales_amount) AS sell_volume
|
||||
FROM solana.core.fact_nft_sales
|
||||
WHERE block_timestamp >= CURRENT_DATE - 180
|
||||
AND succeeded
|
||||
GROUP BY 1
|
||||
WHERE block_timestamp >= CURRENT_DATE - 90
|
||||
AND
|
||||
succeeded = TRUE
|
||||
AND
|
||||
user_address NOT IN (SELECT address FROM solana.core.dim_labels)
|
||||
GROUP BY user_address
|
||||
), mints AS (
|
||||
SELECT purchaser AS user_address
|
||||
, SUM(mint_price) AS mint_volume
|
||||
FROM solana.core.fact_nft_mints
|
||||
WHERE block_timestamp >= CURRENT_DATE - 180
|
||||
WHERE block_timestamp >= CURRENT_DATE - 90
|
||||
AND succeeded
|
||||
AND mint_currency = 'So11111111111111111111111111111111111111111'
|
||||
AND mint_price <= 15
|
||||
AND user_address NOT IN (SELECT address FROM solana.core.dim_labels)
|
||||
GROUP BY 1
|
||||
)
|
||||
SELECT COALESCE(b.user_address, s.user_address, m.user_address) AS user_address
|
||||
, COALESCE(b.buy_volume, 0) + COALESCE(s.sell_volume, 0) + COALESCE(m.mint_volume, 0) AS nft_volume
|
||||
SELECT COALESCE(b.user_address, m.user_address) AS user_address
|
||||
, COALESCE(b.buy_volume, 0) + COALESCE(m.mint_volume, 0) AS nft_value
|
||||
FROM buys b
|
||||
FULL OUTER JOIN sells s
|
||||
ON s.user_address = b.user_address
|
||||
--FULL OUTER JOIN sells s
|
||||
-- ON s.user_address = b.user_address
|
||||
FULL OUTER JOIN mints m
|
||||
ON m.user_address = COALESCE(b.user_address, s.user_address)
|
||||
|
||||
ON m.user_address = b.user_address
|
||||
"
|
||||
mints <- QuerySnowflake(query)
|
||||
colnames(mints)[2] <- 'value'
|
||||
func <- function(x) {
|
||||
sol.nfts <- QuerySnowflake(mints.query)
|
||||
|
||||
nfts.func <- function(x) {
|
||||
if (x < 1) {return(0)}
|
||||
if (x < 100) {return(1)}
|
||||
if (x < 1000) {return(2)}
|
||||
if (x < 5) {return(1)}
|
||||
if (x < 10) {return(2)}
|
||||
return(3)
|
||||
}
|
||||
mints[, level := sapply(value, func) ]
|
||||
mints[, metric := 'nft_volume' ]
|
||||
mints <- mints[, list(metric, user_address, value, level) ]
|
||||
print( mints %>% group_by(level) %>% summarize(n=n()) %>% as.data.table() )
|
||||
sol.nfts[, nfts := sapply(nft_value, nfts.func) ]
|
||||
|
||||
explorer[ user_address == '9VhsSZ6ni7dZtmKRHE81yAd3UQW1oKu9LNEWRGFMA5wj' ]
|
||||
explorer[ user_address == 'AoNVE2rKCE2YNA44V7NQt8N73JdPM7b6acZ2vzSpyPyi' ]
|
||||
|
||||
head(explorer)
|
||||
colnames(longevity)
|
||||
colnames(activity)
|
||||
colnames(governor)
|
||||
colnames(bridgor)
|
||||
colnames(staker)
|
||||
colnames(explorer)
|
||||
full.data <- MergeDataFrames(list(sol.long.act,
|
||||
sol.variety,
|
||||
sol.nfts,
|
||||
sol.staking,
|
||||
sol.gov,
|
||||
sol.bridge),
|
||||
by = "user_address", all = TRUE)
|
||||
ReplaceValues(full.data)
|
||||
full.data[, total_score := longevity + activity + governance + bridge + staking + variety + nfts ]
|
||||
|
||||
a <- longevity[level > 0, list(user_address, level)]
|
||||
b <- activity[level > 0, list(user_address, level)]
|
||||
c <- governor[level > 0, list(user_address, level)]
|
||||
d <- bridgor[level > 0, list(user_address, level)]
|
||||
e <- staker[level > 0, list(user_address, level)]
|
||||
f <- explorer[level > 0, list(user_address, level)]
|
||||
g <- mints[level > 0, list(user_address, level)]
|
||||
|
||||
colnames(a) <- c( 'user_address','longevity' )
|
||||
colnames(b) <- c( 'user_address','activity' )
|
||||
colnames(c) <- c( 'user_address','governor' )
|
||||
colnames(d) <- c( 'user_address','bridgor' )
|
||||
colnames(e) <- c( 'user_address','staker' )
|
||||
colnames(f) <- c( 'user_address','explorer' )
|
||||
colnames(g) <- c( 'user_address','nfts' )
|
||||
#full.data[, .N, by = total_score][order(total_score)]
|
||||
|
||||
df_list <- list(a, b, c, d, e, f, g)
|
||||
df <- Reduce(function(x, y) base::merge(x, y, all=TRUE), df_list) %>% as.data.table()
|
||||
df[ is.na(df) ] <- 0
|
||||
# get rid of some behavior that can't be human OR is too low to qualify
|
||||
full.data <- full.data[total_score > 0]
|
||||
|
||||
# longevity
|
||||
df[, longevity_1 := as.numeric(longevity >= 1) ]
|
||||
df[, longevity_2 := as.numeric(longevity >= 2) ]
|
||||
df[, longevity_3 := as.numeric(longevity >= 3) ]
|
||||
# activity
|
||||
df[, activity_1 := as.numeric(activity >= 1) ]
|
||||
df[, activity_2 := as.numeric(activity >= 2) ]
|
||||
df[, activity_3 := as.numeric(activity >= 3) ]
|
||||
# governor
|
||||
df[, governor_1 := as.numeric(governor >= 1) ]
|
||||
df[, governor_2 := as.numeric(governor >= 2) ]
|
||||
df[, governor_3 := as.numeric(governor >= 3) ]
|
||||
# bridgor
|
||||
df[, bridgor_1 := as.numeric(bridgor >= 1) ]
|
||||
df[, bridgor_2 := as.numeric(bridgor >= 2) ]
|
||||
df[, bridgor_3 := as.numeric(bridgor >= 3) ]
|
||||
# staker
|
||||
df[, staker_1 := as.numeric(staker >= 1) ]
|
||||
df[, staker_2 := as.numeric(staker >= 2) ]
|
||||
df[, staker_3 := as.numeric(staker >= 3) ]
|
||||
# explorer
|
||||
df[, explorer_1 := as.numeric(explorer >= 1) ]
|
||||
df[, explorer_2 := as.numeric(explorer >= 2) ]
|
||||
df[, explorer_3 := as.numeric(explorer >= 3) ]
|
||||
# nfts
|
||||
df[, nfts_1 := as.numeric(nfts >= 1) ]
|
||||
df[, nfts_2 := as.numeric(nfts >= 2) ]
|
||||
df[, nfts_3 := as.numeric(nfts >= 3) ]
|
||||
# if you do avg more than 1 tx per hour over 90 days, you don't
|
||||
# get a score bc you're not a person you're a computer
|
||||
# save these addresses to remove them later
|
||||
full.data <- full.data[activity_value < 24*90]
|
||||
full.data <- full.data[bridge_value < 24*90]
|
||||
|
||||
df[, longevity := longevity_1 + (longevity_2 * 2) + (longevity_3 * 3) ]
|
||||
df[, activity := activity_1 + (activity_2 * 2) + (activity_3 * 3) ]
|
||||
df[, governor := governor_1 + (governor_2 * 2) + (governor_3 * 3) ]
|
||||
df[, bridgor := bridgor_1 + (bridgor_2 * 2) + (bridgor_3 * 3) ]
|
||||
df[, staker := staker_1 + (staker_2 * 2) + (staker_3 * 3) ]
|
||||
df[, explorer := explorer_1 + (explorer_2 * 2) + (explorer_3 * 3) ]
|
||||
df[, nfts := nfts_1 + (nfts_2 * 2) + (nfts_3 * 3) ]
|
||||
|
||||
df[, total_score := longevity + activity + governor + bridgor + staker + explorer + nfts ]
|
||||
|
||||
# sudo cp ~/score_criteria.csv /rstudio-data
|
||||
# score_criteria <- read.csv('/Users/kellen/data_science/viz/solarscored/score_criteria.csv') %>% as.data.table()
|
||||
score_criteria <- read.csv('/rstudio-data/score_criteria.csv') %>% as.data.table()
|
||||
|
||||
# head(df)
|
||||
|
||||
# df <- rbind(
|
||||
# longevity
|
||||
# , activity
|
||||
# , governor
|
||||
# , bridgor
|
||||
# , staker
|
||||
# , explorer
|
||||
# )
|
||||
# g <- df %>% group_by(user_address) %>% summarize(level=sum(level)) %>% as.data.table()
|
||||
# g <- g[order(-level)]
|
||||
# print( g %>% group_by(level) %>% summarize(n=n()) %>% as.data.table() )
|
||||
# head(g)
|
||||
# g[, metric := 'total_score' ]
|
||||
# g$value <- g$level
|
||||
|
||||
# df <- rbind(df, g)
|
||||
|
||||
# df[ metric == 'total_score' ]
|
||||
df <- full.data
|
||||
|
||||
file.location <- ifelse(
|
||||
isRstudio
|
||||
, '/rstudio-data/solarscored_data.RData'
|
||||
, '/Users/kellen/data_science/viz/solarscored/solarscored_data.RData'
|
||||
, '~/user_metrics/apps/solana/solarscored/solarscored_data.RData'
|
||||
)
|
||||
|
||||
save(
|
||||
df
|
||||
, score_criteria
|
||||
, file = file.location
|
||||
)
|
||||
save(df, file = file.location)
|
||||
|
||||
```
|
||||
|
||||
|
||||
1
apps/solana/solarscored/wheel.svg
Normal file
|
After Width: | Height: | Size: 112 KiB |
1
apps/solana/solarscored/wheel22.svg
Normal file
|
After Width: | Height: | Size: 112 KiB |
1842
apps/solana/solarscored/wheelpart.ai
Normal file
1
apps/solana/solarscored/wheelpart.svg
Normal file
|
After Width: | Height: | Size: 111 KiB |
@ -1 +0,0 @@
|
||||
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 122.92 121.4"><defs><style>.cls-1,.cls-2{fill:#648dc9;}.cls-2,.cls-3{fill-rule:evenodd;}.cls-3{fill:#fff;}</style></defs><path class="cls-1" d="M101.08,43c3.21-10.33,17.82-10.33,21,0h0a11,11,0,0,0,16.46,6h0c9.09-5.85,20.28,3.54,16.1,13.51h0a11,11,0,0,0,8.76,15.17h0c10.72,1.37,13.26,15.75,3.65,20.7h0a11,11,0,0,0-3,17.26h0c7.34,7.94,0,20.59-10.51,18.2h0a11,11,0,0,0-13.42,11.26h0c.52,10.8-13.21,15.8-19.76,7.19h0a11,11,0,0,0-17.52,0h0c-6.54,8.61-20.27,3.61-19.75-7.19h0a11,11,0,0,0-13.42-11.26h0c-10.54,2.39-17.85-10.26-10.51-18.2h0a11,11,0,0,0-3-17.26h0c-9.61-5-7.07-19.33,3.65-20.7h0a11,11,0,0,0,8.76-15.17h0c-4.18-10,7-19.36,16.1-13.51h0a11,11,0,0,0,16.46-6Z" transform="translate(-50.13 -35.27)"/><path class="cls-2" d="M111.59,51.13A46.38,46.38,0,1,0,158,97.51,46.09,46.09,0,0,0,111.59,51.13Z" transform="translate(-50.13 -35.27)"/><path class="cls-3" d="M105,117.38,87.08,99.49l6-5.3L105,106.12l26.5-25.84,6,5.3Z" transform="translate(-50.13 -35.27)"/></svg>
|
||||
|
Before Width: | Height: | Size: 1.0 KiB |
BIN
apps/solana/solarscored/www/background.png
Normal file
|
After Width: | Height: | Size: 473 KiB |
114
apps/solana/solarscored/www/background.svg
Normal file
@ -0,0 +1,114 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 27.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 1565.2 1494.2" style="enable-background:new 0 0 1565.2 1494.2;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:url(#SVGID_1_);stroke:#FFFFFF;stroke-width:0.25;}
|
||||
.st1{opacity:0.26;fill:url(#SVGID_00000138559630886264828450000018346780221833772930_);enable-background:new ;}
|
||||
</style>
|
||||
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="782.62" y1="642.006" x2="782.62" y2="1546.252" gradientTransform="matrix(1 0 0 -1 0 1546.252)">
|
||||
<stop offset="0.34" style="stop-color:#EDFBF6"/>
|
||||
<stop offset="0.65" style="stop-color:#F5FCFA"/>
|
||||
<stop offset="0.86" style="stop-color:#FFFFFF"/>
|
||||
</linearGradient>
|
||||
<rect x="0.1" class="st0" width="1565" height="904.2"/>
|
||||
<linearGradient id="SVGID_00000031177984062359259050000003454796823645966765_" gradientUnits="userSpaceOnUse" x1="782.61" y1="51.996" x2="782.61" y2="643.8459" gradientTransform="matrix(1 0 0 -1 0 1546.252)">
|
||||
<stop offset="0.41" style="stop-color:#9945FF"/>
|
||||
<stop offset="0.47" style="stop-color:#924DF9"/>
|
||||
<stop offset="0.58" style="stop-color:#7F66EA"/>
|
||||
<stop offset="0.72" style="stop-color:#608ED1"/>
|
||||
<stop offset="0.88" style="stop-color:#36C4B0"/>
|
||||
<stop offset="1" style="stop-color:#14F195"/>
|
||||
</linearGradient>
|
||||
<path style="opacity:0.26;fill:url(#SVGID_00000031177984062359259050000003454796823645966765_);enable-background:new ;" d="
|
||||
M1564.6,1413.7c0-2.2,0-4.4,0-6.6l-79.3-66.9h79.1c0-1.6,0-3.2,0-4.8h-84.7l-148.8-125.6h133.2l100.2,66.2c0-2,0-3.9,0-5.9
|
||||
l-91.2-60.2h91.2c0-1.6,0-3.2,0-4.8h-98.4l-114.1-75.3H1453l111.1,61.8c0-1.9,0-3.8,0-5.6l-100.9-56.2h96.8l4.2,2.1
|
||||
c0-2.3,0-4.6,0-6.8h-2.8l-107-52.6h91.1l18.8,8.3c0-1.8,0-3.6,0-5.3l-6.8-3h6.8c0-1.6,0-3.2,0-4.8h-17.6l-78.3-34.7h79.1l16.9,6.6
|
||||
c0-1.7,0-3.5,0-5.2l-3.5-1.4h3.5c0-1.6,0-3.2,0-4.8h-15.9l-64.9-25.1h80.9c0-1.7,0-3.4,0-5.1l-62.4-21.2h62.5c0-1.6,0-3.2,0-4.8
|
||||
h-76.7l-49.4-16.8h72.8l53.2,14.2c0-1.7,0-3.3,0-5L1530,955h34.7c0-1.6,0-3.2,0-4.8h-52.6l-49.2-13.2h93.8l8,1.7
|
||||
c0-2.2,0-4.3,0.1-6.5h-7.5l-51.7-10.8h59.2c0-1.6,0-3.2,0-4.8h-82.2l-45.9-9.6h128.2c0-1.6,0-3.2,0-4.8H0.1c0,1.6,0,3.2,0.1,4.8
|
||||
h127.2l-45.9,9.6H0.3c0,1.6,0,3.2,0.1,4.8h58.1L6.8,932.3H0.5c0,2.1,0,4.1,0.1,6.2l6.9-1.4h93.8l-49.2,13.2H0.7c0,1.6,0,3.2,0,4.8
|
||||
h33.5l-33.4,8.9c0,1.7,0,3.3,0,5l52-13.9h72.8l-49.4,16.8H0.9c0,1.6,0,3.2,0,4.8h61.3L1.1,997.3c0,1.9,0,3.7,0,5.6h79.6L15.8,1028
|
||||
H1.2c0,1.6,0,3.2,0,4.8h2.1l-2.1,0.8c0,1.7,0,3.5,0,5.2l15.6-6H96l-78.3,34.7H1.4c0,1.6,0,3.2,0,4.8h5.4l-5.4,2.4c0,1.8,0,3.6,0,5.3
|
||||
l17.4-7.7h91.1L3,1124.8H1.6c0,2,0,4.1,0,6.1l2.7-1.3h96.8l-99.4,55.3c0,1.9,0,3.8,0,5.6l109.5-60.9h101.5L98.5,1205H1.7
|
||||
c0,1.6,0,3.2,0,4.8h89.6l-89.5,59.2c0,2,0,3.9,0,5.9l98.5-65.1h141.8L93.3,1335.4H1.7c0,1.6,0,3.2,0,4.8h85.9l-86.1,72.7
|
||||
c0,2.2,0,4.4,0,6.6l93.9-79.3h151.1l-139.1,151.1l4.1,3.1l141.9-154.1H421l-92.5,151.4l4.6,2.3l93.9-153.7h176.2l-48.1,151.9
|
||||
l5.1,1.3l48.6-153.2h174.8v152.6h5.3v-152.6h174l48.6,153.2l5.1-1.3l-48.1-151.9H1141l93.9,153.7l4.6-2.3l-92.5-151.4h168.1
|
||||
l141.9,154.1l4.1-3.1l-139.1-151.1h155.4L1564.6,1413.7L1564.6,1413.7z M691.5,907.2h48.9l-3,9.6h-51.7L691.5,907.2L691.5,907.2z
|
||||
M460.7,971.7L486,955H544l-19.8,16.8H460.7L460.7,971.7z M518.4,976.5l-25.5,21.5h-72.1l32.6-21.5H518.4z M451.7,971.7H395
|
||||
l30.1-16.8h52L451.7,971.7L451.7,971.7z M384.9,971.7h-59.6l34-16.8H415L384.9,971.7z M376.3,976.5l-38.7,21.5h-65.8l43.8-21.5
|
||||
H376.3L376.3,976.5z M386.4,976.5h58.1l-32.6,21.5h-64.2L386.4,976.5z M413.6,1002.8h73.7l-29.8,25.1h-81.9L413.6,1002.8
|
||||
L413.6,1002.8z M459.6,1032.7h69.9l-31.9,34.7h-79.1L459.6,1032.7L459.6,1032.7z M465.3,1028l29.8-25.1h62l-23.1,25.1H465.3
|
||||
L465.3,1028z M500.7,998.1l25.5-21.5h55l-19.8,21.5H500.7L500.7,998.1z M531.9,971.7l19.8-16.8h49.4l-15.4,16.8H531.9L531.9,971.7z
|
||||
M557.4,950.2l15.6-13.2h44.6l-12.1,13.2H557.4L557.4,950.2z M549.6,950.2h-56.3l19.9-13.2h52L549.6,950.2L549.6,950.2z
|
||||
M484.3,950.2h-50.6l23.6-13.2h46.9L484.3,950.2L484.3,950.2z M423.6,950.2H369l26.8-13.2h51.5L423.6,950.2z M358,950.2h-63.5
|
||||
l29.7-13.2h60.5L358,950.2z M282.4,950.2H230l34-13.2h48.1L282.4,950.2z M283.7,955h64.6l-34,16.8h-68.4L283.7,955z M304.5,976.5
|
||||
l-43.8,21.5h-74.3l48.6-21.5H304.5L304.5,976.5z M262.1,1002.8H329l-45.2,25.1H211L262.1,1002.8z M339.1,1002.8h65.5l-38,25.1H294
|
||||
L339.1,1002.8L339.1,1002.8z M368.3,1032.7h83.5l-41.1,34.7h-94.9L368.3,1032.7L368.3,1032.7z M412.8,1072.2h80.3l-48.5,52.6h-94.2
|
||||
L412.8,1072.2L412.8,1072.2z M500,1072.2h84.6l-32.2,52.6H451.6L500,1072.2L500,1072.2z M504.4,1067.4l31.9-34.7h72.3l-21.2,34.7
|
||||
H504.4L504.4,1067.4z M540.8,1028l23.1-25.1H627l-15.3,25.1H540.8L540.8,1028z M568.3,998.1l19.8-21.5h54.9l-13.2,21.5H568.3z
|
||||
M592.6,971.7L608,955h48.2L646,971.7H592.6z M612.4,950.2l12.1-13.2h42.7l-8,13.2H612.4z M628.9,932.3l9.9-10.8h37.9l-6.6,10.8
|
||||
H628.9L628.9,932.3z M622,932.3h-43.4l12.8-10.8h40.5L622,932.3L622,932.3z M570.9,932.3h-50.4l16.3-10.8h46.9L570.9,932.3z
|
||||
M511.5,932.3H466l19.4-10.8h42.5L511.5,932.3L511.5,932.3z M455.9,932.3h-50.3l21.9-10.8h47.8L455.9,932.3z M394.5,932.3H335
|
||||
l24.3-10.8h57L394.5,932.3z M323,932.3h-46.6l27.8-10.8h43.1L323,932.3L323,932.3z M262.9,932.3h-55.2l31.7-10.8h51.3L262.9,932.3
|
||||
L262.9,932.3z M192.7,932.3h-54.9l40.2-10.8h46.4L192.7,932.3z M193.6,937.1h56.9l-34,13.2h-61.8L193.6,937.1L193.6,937.1z
|
||||
M217.7,955h53.9l-37.8,16.8h-59.4L217.7,955L217.7,955z M223,976.5l-48.6,21.5h-67.9l55.6-21.5H223L223,976.5z M175.6,1002.8H251
|
||||
l-51.1,25.1h-81.1L175.6,1002.8L175.6,1002.8z M201.3,1032.7h74l-62.4,34.7h-82.1L201.3,1032.7z M285.4,1032.7h74l-52.5,34.7H223
|
||||
L285.4,1032.7z M308.6,1072.2h96.5l-62.4,52.6H228.9L308.6,1072.2L308.6,1072.2z M344.8,1129.6h95.5l-69.4,75.3H255.5L344.8,1129.6
|
||||
L344.8,1129.6z M447.2,1129.6h102.4l-46,75.3H377.8L447.2,1129.6z M555.6,1129.6h114.3L646,1205H509.6L555.6,1129.6L555.6,1129.6z
|
||||
M558.5,1124.8l32.2-52.6h97.4l-16.7,52.6H558.5z M593.6,1067.4l21.2-34.7h85.8l-11,34.7H593.6L593.6,1067.4z M617.7,1028l15.3-25.1
|
||||
h77l-8,25.1H617.7z M636,998.1l13.2-21.5h69.3l-6.8,21.5H636z M652,971.7l10.2-16.8h63l-5.3,16.8H652z M665.2,950.2l8-13.2h57.7
|
||||
l-4.2,13.2H665.2z M676.2,932.3l6.6-10.8h53.1l-3.4,10.8H676.2L676.2,932.3z M685.4,907.2l-5.8,9.6h-36.4l8.8-9.6H685.4L685.4,907.2
|
||||
z M645.1,907.2l-8.8,9.6h-39.3l11.3-9.6H645.1z M600.6,907.2l-11.3,9.6H544l14.5-9.6H600.6z M549.5,907.2l-14.5,9.6h-41.1l17.2-9.6
|
||||
H549.5z M501,907.2l-17.2,9.6h-46.7l19.5-9.6H501z M445.5,907.2l-19.5,9.6h-56l21.6-9.6H445.5L445.5,907.2z M379.7,907.2l-21.6,9.6
|
||||
h-41.5l24.7-9.6H379.7z M327.8,907.2l-24.7,9.6h-49.5l28.2-9.6H327.8z M266.7,907.2l-28.2,9.6h-42.6l23.8-6.4l-1.1-3.2H266.7
|
||||
L266.7,907.2z M150.9,907.2h62l-35.8,9.6H105L150.9,907.2L150.9,907.2z M30.4,932.3l51.7-10.8h77.3l-40.2,10.8H30.4L30.4,932.3z
|
||||
M70.7,950.2l49.2-13.2h58.7l-38.8,13.2H70.7L70.7,950.2z M140.7,955h63.5L161,971.7H91.3L140.7,955L140.7,955z M13.8,998.1
|
||||
l63.5-21.5h71.4L93,998.1H13.8L13.8,998.1z M29.2,1028l64.9-25.1h69.5l-56.7,25.1H29.2L29.2,1028z M29.7,1067.4l78.3-34.7h82.1
|
||||
l-70.5,34.7H29.7L29.7,1067.4z M109.7,1124.8H14l107-52.6h83.3L109.7,1124.8L109.7,1124.8z M119.8,1124.8l94.6-52.6h85.2l-79.7,52.6
|
||||
H119.8L119.8,1124.8z M107.5,1205l114.1-75.3H337l-89.3,75.3H107.5L107.5,1205z M250.8,1335.3H101l148.8-125.6h116.6L250.8,1335.3
|
||||
L250.8,1335.3z M423.9,1335.3H257.7l115.6-125.6h127.2L423.9,1335.3z M604.7,1335.3H430l76.7-125.6h137.9L604.7,1335.3z
|
||||
M783.6,1335.3H610.3l39.8-125.6h133.5V1335.3z M783.6,1205h-132l23.9-75.3h108.1V1205z M783.6,1124.8H677l16.7-52.6h89.9
|
||||
L783.6,1124.8L783.6,1124.8z M783.6,1067.4h-88.4l11-34.7h77.4V1067.4z M783.6,1028h-75.9l8-25.1h68L783.6,1028L783.6,1028z
|
||||
M783.6,998.1h-66.4l6.8-21.5h59.6L783.6,998.1L783.6,998.1z M783.6,971.7h-58.1l5.3-16.8h52.8V971.7z M783.6,950.2h-51.3l4.2-13.2
|
||||
h47.1V950.2z M783.6,932.3H738l3.4-10.8h42.2L783.6,932.3L783.6,932.3z M783.6,916.7h-40.7l3-9.6h37.6L783.6,916.7L783.6,916.7z
|
||||
M1456.7,1205h-131.6l-89.3-75.3h106.8L1456.7,1205z M1150.6,1002.8l38,25.1h-73.3l-29.8-25.1H1150.6L1150.6,1002.8z M1079.9,998.1
|
||||
l-25.5-21.5h56.4l32.6,21.5H1079.9z M1119.8,976.5h58.1l38.7,21.5h-64.2L1119.8,976.5z M1187.9,976.5h60.8l43.8,21.5h-65.8
|
||||
L1187.9,976.5L1187.9,976.5z M1179.3,971.8l-30.1-16.8h55.7l34,16.8H1179.3z M1169.2,971.8h-56.7l-25.4-16.8h51.9L1169.2,971.8
|
||||
L1169.2,971.8z M1103.5,971.8h-54.8l-19.8-16.8h49.3L1103.5,971.8z M1041,971.8h-58.1L967.4,955h53.7L1041,971.8z M1046.6,976.5
|
||||
l25.5,21.5h-65.1l-19.8-21.5H1046.6z M1077.8,1002.8l29.8,25.1h-73l-23.1-25.1H1077.8L1077.8,1002.8z M1113.3,1032.7l41.1,34.7
|
||||
h-83.4l-31.9-34.7H1113.3z M1121,1032.7h74.9l52.5,34.7h-86.3L1121,1032.7z M1159.6,1002.8h65.5l45.2,25.1h-72.6L1159.6,1002.8
|
||||
L1159.6,1002.8z M1235.2,1002.8h66.9l51.1,25.1h-72.8L1235.2,1002.8z M1259.7,976.5h69.4l48.6,21.5h-74.3L1259.7,976.5L1259.7,976.5
|
||||
z M1250,971.8l-34-16.8h64.6l37.8,16.8H1250L1250,971.8z M1252.1,937.1h48.1l34,13.2h-52.4L1252.1,937.1z M1269.7,950.2h-63.5
|
||||
l-26.8-13.2h60.5L1269.7,950.2z M1195.2,950.2h-54.6l-23.7-13.2h51.5L1195.2,950.2L1195.2,950.2z M1130.5,950.2h-50.6l-19.9-13.2
|
||||
h46.9L1130.5,950.2z M1070.9,950.2h-47.7l-15.6-13.2h43.4L1070.9,950.2z M1015.5,950.2H963l-12.1-13.2h49L1015.5,950.2z
|
||||
M956.1,950.2h-47.2l-8-13.2H944L956.1,950.2z M960.5,955l15.4,16.8H922L911.8,955H960.5z M980.3,976.5l19.8,21.5h-62.1l-13.2-21.5
|
||||
H980.3L980.3,976.5z M1004.6,1002.8l23.1,25.1h-71.3l-15.3-25.1H1004.6z M1032.1,1032.7l31.9,34.7h-83.6l-21.2-34.7H1032.1
|
||||
L1032.1,1032.7z M1068.4,1072.2l48.5,52.6h-101.4l-32.2-52.6H1068.4L1068.4,1072.2z M1075.3,1072.2h84.7l62.4,52.6h-98.6
|
||||
L1075.3,1072.2L1075.3,1072.2z M1167.8,1072.2h87.9l79.7,52.6h-105.2L1167.8,1072.2z M1204.9,1032.7h74l62.4,34.7h-83.8
|
||||
L1204.9,1032.7z M1289,1032.7h74l70.5,34.7h-82.1L1289,1032.7z M1313.2,1002.8h75.4l56.7,25.1h-81.1L1313.2,1002.8z M1341.2,976.5
|
||||
h60.9l55.6,21.5h-67.9L1341.2,976.5z M1330.4,971.8l-37.8-16.8h53.9l43.2,16.8H1330.4z M1313.6,937.1h56.9l38.8,13.2h-61.8
|
||||
L1313.6,937.1z M1339.8,921.5h46.4l40.2,10.8h-54.9L1339.8,921.5z M1356.5,932.3h-55.2l-27.8-10.8h51.3L1356.5,932.3L1356.5,932.3z
|
||||
M1287.8,932.3h-46.6l-24.3-10.8h43.1L1287.8,932.3L1287.8,932.3z M1229.2,932.3h-59.5l-21.9-10.8h57L1229.2,932.3z M1158.7,932.3
|
||||
h-50.3l-19.3-10.8h47.8L1158.7,932.3L1158.7,932.3z M1098.2,932.3h-45.5l-16.3-10.8h42.5L1098.2,932.3L1098.2,932.3z M1043.7,932.3
|
||||
H1002l-12.8-10.8h38.3L1043.7,932.3L1043.7,932.3z M994.2,932.3h-47.7l-9.9-10.8h44.9L994.2,932.3z M939.6,932.3h-41.7l-6.6-10.8
|
||||
h38.3L939.6,932.3L939.6,932.3z M891.8,932.3h-52.7l-3.4-10.8h49.6L891.8,932.3L891.8,932.3z M894.8,937.1l8,13.2h-58l-4.2-13.2
|
||||
H894.8z M905.7,955l10.2,16.8h-64.3l-5.3-16.8H905.7L905.7,955z M918.9,976.5l13.2,21.5h-72.1l-6.8-21.5H918.9z M934.9,1002.8
|
||||
l15.3,25.1h-80.9l-8-25.1H934.9L934.9,1002.8z M953.2,1032.7l21.2,34.7h-92.5l-11-34.7H953.2z M977.3,1072.2l32.2,52.6H900.1
|
||||
l-16.7-52.6H977.3L977.3,1072.2z M1012.4,1129.6l46,75.3H925.5l-23.9-75.3H1012.4L1012.4,1129.6z M1018.4,1129.6h102.9l69.4,75.3
|
||||
h-126.2L1018.4,1129.6z M1128.2,1129.6h99.8l89.3,75.3h-119.7L1128.2,1129.6L1128.2,1129.6z M1344.3,1124.8l-79.7-52.6h85.2
|
||||
l94.6,52.6H1344.3z M1550.2,1124.8h-95.7l-94.6-52.6h83.3L1550.2,1124.8z M1534.5,1067.4h-90l-70.5-34.7h82.1L1534.5,1067.4z
|
||||
M1535,1028h-77.6l-56.7-25.1h69.4L1535,1028z M1550.4,998.1h-79.2l-55.6-21.5h71.4L1550.4,998.1z M1472.8,971.7h-69.6L1360,955
|
||||
h63.5L1472.8,971.7z M1493.5,950.2h-69l-38.8-13.2h58.7L1493.5,950.2z M1533.8,932.3h-88.7l-40.2-10.8h77.3L1533.8,932.3
|
||||
L1533.8,932.3z M1413.2,907.2l45.9,9.6H1387l-35.8-9.6H1413.2L1413.2,907.2z M1345.6,907.2l-1.1,3.2l23.8,6.4h-42.7l-28.2-9.6
|
||||
H1345.6L1345.6,907.2z M1282.4,907.2l28.2,9.6h-49.5l-24.7-9.6H1282.4z M1222.9,907.2l24.7,9.6h-41.5l-21.6-9.6H1222.9L1222.9,907.2
|
||||
z M1172.5,907.2l21.6,9.6h-55.9l-19.4-9.6H1172.5L1172.5,907.2z M1107.6,907.2l19.4,9.6h-46.7l-17.2-9.6H1107.6z M1053.1,907.2
|
||||
l17.2,9.6h-41.1l-14.5-9.6H1053.1z M1005.7,907.2l14.5,9.6h-36.7l-11.3-9.6H1005.7z M964.4,907.2l11.3,9.6h-43.6l-8.8-9.6H964.4
|
||||
L964.4,907.2z M916.4,907.2l8.8,9.6h-36.9l-5.8-9.6H916.4z M876.5,907.2l5.8,9.6h-48.2l-3-9.6H876.5z M788.9,907.2h36.8l3,9.6h-39.8
|
||||
V907.2z M788.9,921.5h41.3l3.4,10.8h-44.7V921.5z M788.9,937.1h46.3l4.2,13.2h-50.4L788.9,937.1L788.9,937.1z M788.9,955h51.9
|
||||
l5.3,16.8h-57.2V955z M788.9,976.5h58.8l6.8,21.5h-65.6L788.9,976.5L788.9,976.5z M788.9,1002.8H856l8,25.1h-75.1V1002.8z
|
||||
M788.9,1032.7h76.6l11,34.7h-87.6V1032.7z M788.9,1072.2h89.1l16.7,52.6H788.9L788.9,1072.2L788.9,1072.2z M788.9,1129.6h107.3
|
||||
L920,1205H788.9L788.9,1129.6L788.9,1129.6z M788.9,1335.3v-125.6h132.7l39.8,125.6H788.9L788.9,1335.3z M966.8,1335.3L927,1209.8
|
||||
h134.3l76.7,125.6H966.8L966.8,1335.3z M1144.1,1335.3l-76.7-125.6h127.7l115.6,125.6H1144.1z M1317.6,1335.3L1202,1209.8h121
|
||||
l148.8,125.6H1317.6L1317.6,1335.3z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 12 KiB |
@ -1 +0,0 @@
|
||||
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 116.35 114.91"><defs><style>.cls-1{fill:#648dc9;}.cls-2{fill:#fff;}</style></defs><path class="cls-1" d="M344.76,397.3c3-9.77,16.87-9.77,19.9,0A10.42,10.42,0,0,0,380.25,403c8.6-5.53,19.19,3.36,15.24,12.79a10.42,10.42,0,0,0,8.29,14.37c10.15,1.29,12.55,14.91,3.46,19.59a10.41,10.41,0,0,0-2.88,16.33c6.94,7.52,0,19.49-9.95,17.24A10.42,10.42,0,0,0,381.7,494c.49,10.22-12.5,14.95-18.69,6.8a10.43,10.43,0,0,0-16.59,0c-6.19,8.15-19.19,3.42-18.7-6.8A10.41,10.41,0,0,0,315,483.29c-10,2.25-16.89-9.72-9.95-17.24a10.42,10.42,0,0,0-2.88-16.33c-9.09-4.68-6.69-18.3,3.46-19.59a10.42,10.42,0,0,0,8.29-14.37c-4-9.43,6.64-18.32,15.24-12.79A10.41,10.41,0,0,0,344.76,397.3Z" transform="translate(-296.54 -389.97)"/><path class="cls-2" d="M364.76,416v63H351.45V428.59h-.37l-14.41,9V425.82L352.25,416Z" transform="translate(-296.54 -389.97)"/></svg>
|
||||
|
Before Width: | Height: | Size: 914 B |
@ -1 +0,0 @@
|
||||
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 116.35 114.91"><defs><style>.cls-1{fill:#648dc9;}.cls-2{fill:#fff;}</style></defs><path class="cls-1" d="M786.64,196c3-9.77,16.86-9.77,19.9,0a10.42,10.42,0,0,0,15.58,5.68c8.6-5.54,19.2,3.35,15.24,12.79a10.42,10.42,0,0,0,8.29,14.36c10.15,1.29,12.55,14.91,3.46,19.59a10.43,10.43,0,0,0-2.88,16.34c6.94,7.51,0,19.49-10,17.23a10.41,10.41,0,0,0-12.7,10.66c.49,10.22-12.51,14.95-18.7,6.8a10.43,10.43,0,0,0-16.59,0c-6.19,8.15-19.18,3.42-18.69-6.8A10.42,10.42,0,0,0,756.89,282c-10,2.26-16.89-9.72-9.95-17.23a10.42,10.42,0,0,0-2.88-16.34c-9.09-4.68-6.69-18.3,3.46-19.59a10.42,10.42,0,0,0,8.29-14.36c-3.95-9.44,6.64-18.33,15.24-12.79A10.43,10.43,0,0,0,786.64,196Z" transform="translate(-738.41 -188.71)"/><path class="cls-2" d="M774.45,278.07v-9.59l22.41-20.75q2.86-2.76,4.81-5a18.62,18.62,0,0,0,3-4.35,10.58,10.58,0,0,0,1-4.62A9,9,0,0,0,804.4,229a8.49,8.49,0,0,0-3.45-3.1,10.86,10.86,0,0,0-5-1.09,10.42,10.42,0,0,0-5,1.17,8.06,8.06,0,0,0-3.32,3.35,10.81,10.81,0,0,0-1.17,5.19H773.84a20,20,0,0,1,2.8-10.73,18.54,18.54,0,0,1,7.84-7,25.9,25.9,0,0,1,11.62-2.49,27.22,27.22,0,0,1,11.78,2.38,18.85,18.85,0,0,1,7.83,6.59,17.09,17.09,0,0,1,2.79,9.65,18.71,18.71,0,0,1-1.39,7,29.55,29.55,0,0,1-5,7.7,112.64,112.64,0,0,1-10,10.13l-9.19,9v.43h26.43v10.88Z" transform="translate(-738.41 -188.71)"/></svg>
|
||||
|
Before Width: | Height: | Size: 1.3 KiB |
@ -1 +0,0 @@
|
||||
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 116.35 114.91"><defs><style>.cls-1{fill:#648dc9;}.cls-2{fill:#fff;}</style></defs><path class="cls-1" d="M822.07,585.58c3-9.77,16.86-9.77,19.9,0a10.41,10.41,0,0,0,15.58,5.67c8.61-5.53,19.2,3.36,15.24,12.79a10.42,10.42,0,0,0,8.3,14.37c10.14,1.29,12.55,14.91,3.45,19.59a10.42,10.42,0,0,0-2.88,16.33c6.94,7.52,0,19.49-9.95,17.24A10.41,10.41,0,0,0,859,682.23c.49,10.21-12.51,14.94-18.7,6.8a10.42,10.42,0,0,0-16.58,0c-6.2,8.14-19.19,3.41-18.7-6.8a10.42,10.42,0,0,0-12.71-10.66c-10,2.25-16.89-9.72-10-17.24A10.41,10.41,0,0,0,779.49,638c-9.09-4.68-6.69-18.3,3.46-19.59A10.42,10.42,0,0,0,791.24,604c-4-9.43,6.64-18.32,15.24-12.79A10.42,10.42,0,0,0,822.07,585.58Z" transform="translate(-773.84 -578.25)"/><path class="cls-2" d="M831.85,668.05a30,30,0,0,1-12.25-2.38,20.61,20.61,0,0,1-8.46-6.58,16.54,16.54,0,0,1-3.18-9.7h13.41a6.86,6.86,0,0,0,1.52,4,9,9,0,0,0,3.73,2.69,13.73,13.73,0,0,0,5.26,1,12.7,12.7,0,0,0,5.38-1.07,8.89,8.89,0,0,0,3.66-3,7.91,7.91,0,0,0-.08-8.87,9.24,9.24,0,0,0-4-3.06,15.58,15.58,0,0,0-6.16-1.11h-5.87v-9.77h5.87a12.77,12.77,0,0,0,5.33-1.05,8.55,8.55,0,0,0,3.62-2.9,7.44,7.44,0,0,0,1.29-4.35,7.52,7.52,0,0,0-4.26-7,10.38,10.38,0,0,0-4.69-1,12.32,12.32,0,0,0-5,1,8.72,8.72,0,0,0-3.59,2.75,7.11,7.11,0,0,0-1.45,4.18H809.22a16.42,16.42,0,0,1,3.11-9.59,20.18,20.18,0,0,1,8.13-6.5A27.37,27.37,0,0,1,832,603.37a25.87,25.87,0,0,1,11.41,2.37,18.91,18.91,0,0,1,7.61,6.38,15.49,15.49,0,0,1,2.68,9,12.3,12.3,0,0,1-3.27,8.82,15.05,15.05,0,0,1-8.59,4.49v.49q6.95.9,10.59,4.81a13.73,13.73,0,0,1,3.61,9.79,15.39,15.39,0,0,1-3.09,9.56,20.88,20.88,0,0,1-8.59,6.58A31,31,0,0,1,831.85,668.05Z" transform="translate(-773.84 -578.25)"/></svg>
|
||||
|
Before Width: | Height: | Size: 1.7 KiB |
1
apps/solana/solarscored/www/camera.svg
Normal file
@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg id="Layer_2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 78 66"><defs><style>.cls-1{fill:#fff;}</style></defs><path d="M39,61c-10.69,0-21.39,0-32.08,0-4.08,0-5.68-1.62-5.68-5.73,0-12.83,0-25.67,0-38.5,0-3.98,1.63-5.61,5.6-5.62,4.21,0,8.43,.07,12.64-.06,.83-.03,2.08-.6,2.39-1.26,1.88-4.02,4.95-5.04,9.2-4.81,6.15,.34,12.33,.19,18.49,.04,2.46-.06,4.23,.79,5.23,2.9,1.25,2.62,3.1,3.49,5.99,3.26,3.63-.28,7.29-.09,10.94-.06,3.22,.03,5.03,1.81,5.04,5.04,.02,13.21,.02,26.42,0,39.63,0,3.43-1.8,5.17-5.29,5.17-10.82,.01-21.64,0-32.46,0Zm.03-46.81c-10.75-.02-19.59,8.75-19.65,19.49-.06,10.84,8.76,19.73,19.58,19.75,10.75,.02,19.6-8.75,19.66-19.49,.06-10.84-8.76-19.73-19.59-19.75ZM14.09,24.75c2.34,0,3.75-1.14,3.74-3.02,0-1.88-1.42-3.01-3.76-3-2.34,0-3.75,1.14-3.74,3.02,0,1.88,1.42,3.01,3.76,3.01Z"/><path class="cls-1" d="M39.03,14.19c10.83,.02,19.65,8.91,19.59,19.75-.06,10.74-8.9,19.51-19.66,19.49-10.82-.02-19.65-8.92-19.58-19.75,.06-10.74,8.9-19.51,19.65-19.49Zm-.05,36.23c9.1,0,16.58-7.42,16.63-16.5,.04-9.2-7.42-16.71-16.6-16.72-9.11,0-16.58,7.41-16.63,16.5-.05,9.19,7.42,16.72,16.6,16.72Z"/><path class="cls-1" d="M14.09,24.75c-2.34,0-3.76-1.13-3.76-3.01,0-1.88,1.4-3.02,3.74-3.02,2.35,0,3.76,1.12,3.76,3,0,1.88-1.41,3.02-3.74,3.02Z"/><path d="M38.98,50.43c-9.18,0-16.64-7.53-16.6-16.72,.04-9.09,7.52-16.51,16.63-16.5,9.18,0,16.64,7.52,16.6,16.72-.04,9.09-7.52,16.51-16.63,16.5Zm0-3.03c7.45,0,13.57-6.08,13.6-13.52,.03-7.45-6.03-13.6-13.47-13.64-7.53-.05-13.7,6.08-13.69,13.61,.01,7.44,6.12,13.54,13.56,13.55Z"/><path class="cls-1" d="M38.98,47.39c-7.44,0-13.55-6.11-13.56-13.55-.01-7.52,6.16-13.66,13.69-13.61,7.43,.05,13.49,6.19,13.47,13.64-.03,7.44-6.15,13.52-13.6,13.52Zm10.59-13.56c0-5.8-4.71-10.56-10.5-10.6-5.81-.03-10.59,4.67-10.64,10.45-.05,5.89,4.72,10.7,10.59,10.69,5.8-.01,10.54-4.75,10.55-10.55Z"/><path d="M49.57,33.84c0,5.8-4.75,10.54-10.55,10.55-5.87,.01-10.65-4.8-10.59-10.69,.05-5.78,4.84-10.48,10.64-10.45,5.79,.03,10.51,4.79,10.5,10.6Z"/></svg>
|
||||
|
After Width: | Height: | Size: 2.0 KiB |
@ -1,23 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 24.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#7D86C1;}
|
||||
</style>
|
||||
<path class="st0" d="M10.2,11.2c-0.2,0-0.4,0-0.6,0.1c-0.2,0.1-0.3,0.3-0.4,0.5C9.1,12,9,12.2,9.1,12.4c0,0.2,0.1,0.4,0.3,0.6
|
||||
c0.1,0.2,0.3,0.3,0.6,0.3c0.2,0,0.4,0,0.6,0c0.2-0.1,0.4-0.2,0.5-0.4c0.1-0.2,0.2-0.4,0.2-0.6c0-0.1,0-0.3-0.1-0.4
|
||||
c0-0.1-0.1-0.2-0.2-0.3c-0.1-0.1-0.2-0.2-0.3-0.2C10.5,11.2,10.4,11.2,10.2,11.2z M13.8,11.2c-0.2,0-0.4,0-0.6,0.1
|
||||
c-0.2,0.1-0.3,0.3-0.4,0.5c-0.1,0.2-0.1,0.4-0.1,0.6c0,0.2,0.1,0.4,0.3,0.6c0.1,0.2,0.3,0.3,0.6,0.3c0.2,0,0.4,0,0.6,0
|
||||
c0.2-0.1,0.4-0.2,0.5-0.4c0.1-0.2,0.2-0.4,0.2-0.6c0-0.1,0-0.3-0.1-0.4c0-0.1-0.1-0.2-0.2-0.3c-0.1-0.1-0.2-0.2-0.3-0.2
|
||||
C14.1,11.2,13.9,11.2,13.8,11.2z"/>
|
||||
<path class="st0" d="M18.5,3H5.5C5.2,3,4.9,3.1,4.7,3.2C4.5,3.3,4.2,3.4,4.1,3.6C3.9,3.8,3.7,4,3.6,4.2C3.5,4.5,3.5,4.7,3.5,5v13.2
|
||||
c0,0.3,0.1,0.5,0.2,0.8c0.1,0.2,0.2,0.5,0.4,0.7c0.2,0.2,0.4,0.3,0.6,0.4c0.2,0.1,0.5,0.2,0.8,0.2h11.1L16,18.4l1.2,1.2l1.2,1.1
|
||||
l2.1,1.9V5c0-0.3-0.1-0.5-0.2-0.8s-0.2-0.5-0.4-0.7c-0.2-0.2-0.4-0.3-0.6-0.4C19.1,3.1,18.8,3,18.5,3z M14.8,15.7
|
||||
c0,0-0.4-0.4-0.6-0.8c0.7-0.2,1.3-0.6,1.8-1.2c-0.4,0.2-0.7,0.4-1.1,0.6c-0.5,0.2-0.9,0.3-1.4,0.4c-0.8,0.2-1.7,0.2-2.5,0
|
||||
c-0.5-0.1-1-0.2-1.4-0.4c-0.2-0.1-0.5-0.2-0.7-0.3c0,0-0.1,0-0.1,0c0,0,0,0,0,0c-0.2-0.1-0.3-0.2-0.3-0.2c0.4,0.6,1,1,1.7,1.2
|
||||
c-0.3,0.4-0.7,0.8-0.7,0.8c-0.6,0-1.2-0.1-1.7-0.4c-0.5-0.3-1-0.6-1.3-1.1c0-2,0.5-3.9,1.4-5.7c0.8-0.6,1.7-1,2.7-1l0.1,0.1
|
||||
C9.7,7.9,8.8,8.3,8,8.9c0,0,0.2-0.1,0.6-0.3c0.7-0.3,1.4-0.5,2.2-0.6c0.1,0,0.1,0,0.2,0c0.7-0.1,1.3-0.1,2,0c1,0.1,2,0.4,2.9,0.9
|
||||
c-0.7-0.6-1.5-1-2.4-1.2l0.1-0.2c1,0,2,0.4,2.7,1c0.9,1.8,1.4,3.7,1.4,5.7c-0.3,0.5-0.8,0.9-1.3,1.1C15.9,15.6,15.3,15.7,14.8,15.7z
|
||||
"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 2.0 KiB |
@ -1,51 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 24.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 270.5 21" style="enable-background:new 0 0 270.5 21;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;}
|
||||
.st1{fill:#FFFFFF;}
|
||||
</style>
|
||||
<path class="st0" d="M19.1,9.8L18,8.7l-5.7,5.7V0h-1.5v14.4L5.1,8.7L4.1,9.8l7.5,7.5L19.1,9.8z M19.1,16.5v3h-15v-3H2.6v3
|
||||
c0,0.8,0.7,1.5,1.5,1.5h15c0.8,0,1.5-0.7,1.5-1.5v-3H19.1z"/>
|
||||
<path class="st1" d="M37.7,17c4,0,6.3-2.5,6.3-6.6c0-4.1-2.3-6.5-6.2-6.5h-4.4V17H37.7z M35.5,15.3V5.6h2.3c2.9,0,4.3,1.7,4.3,4.8
|
||||
c0,3.1-1.5,4.8-4.5,4.8H35.5z M50.5,17.2c2.8,0,4.6-2,4.6-5.1c0-3.1-1.8-5.1-4.6-5.1c-2.8,0-4.6,2-4.6,5.1
|
||||
C45.9,15.2,47.7,17.2,50.5,17.2z M50.5,15.6c-1.8,0-2.7-1.6-2.7-3.5c0-1.9,0.8-3.5,2.7-3.5c1.8,0,2.6,1.6,2.6,3.5
|
||||
C53.1,14,52.3,15.6,50.5,15.6z M59,17h1.9l2-7.1h0.1l2,7.1H67l2.9-9.8h-2L66,14.4h-0.1L64,7.2h-2l-1.9,7.2H60l-1.9-7.2h-2L59,17z
|
||||
M73.6,11.2c0-1.6,1-2.5,2.3-2.5c1.3,0,2.1,0.9,2.1,2.3v6h1.9v-6.2c0-2.4-1.3-3.7-3.3-3.7c-1.5,0-2.4,0.7-2.9,1.7h-0.1V7.2h-1.8V17
|
||||
h1.9V11.2z M84.4,3.9h-1.9V17h1.9V3.9z M91.1,17.2c2.8,0,4.6-2,4.6-5.1c0-3.1-1.8-5.1-4.6-5.1c-2.8,0-4.6,2-4.6,5.1
|
||||
C86.5,15.2,88.3,17.2,91.1,17.2z M91.1,15.6c-1.8,0-2.7-1.6-2.7-3.5c0-1.9,0.8-3.5,2.7-3.5c1.8,0,2.6,1.6,2.6,3.5
|
||||
C93.7,14,92.9,15.6,91.1,15.6z M100.7,17.2c1.6,0,2.5-0.8,2.9-1.6h0.1V17h1.9v-6.5c0-2.9-2.2-3.4-3.8-3.4c-1.8,0-3.4,0.7-4.1,2.5
|
||||
l1.8,0.4c0.3-0.7,1-1.4,2.3-1.4c1.2,0,1.9,0.6,1.9,1.8v0c0,0.7-0.7,0.7-2.5,0.9c-1.9,0.2-3.8,0.7-3.8,2.9
|
||||
C97.3,16.2,98.8,17.2,100.7,17.2z M101.1,15.7c-1.1,0-1.9-0.5-1.9-1.4c0-1,0.9-1.4,2-1.5c0.6-0.1,2.1-0.2,2.4-0.5v1.3
|
||||
C103.6,14.6,102.7,15.7,101.1,15.7z M111.7,17.2c1.8,0,2.5-1.1,2.8-1.7h0.2V17h1.9V3.9h-1.9v4.9h-0.1c-0.3-0.6-1-1.7-2.8-1.7
|
||||
c-2.4,0-4.1,1.9-4.1,5.1C107.6,15.3,109.3,17.2,111.7,17.2z M112.1,15.6c-1.7,0-2.6-1.5-2.6-3.5c0-1.9,0.9-3.4,2.6-3.4
|
||||
c1.7,0,2.6,1.4,2.6,3.4C114.7,14.2,113.8,15.6,112.1,15.6z M131.4,7.3h1.9c-0.1-2.1-1.9-3.6-4.6-3.6c-2.6,0-4.6,1.5-4.6,3.8
|
||||
c0,1.8,1.3,2.9,3.4,3.5l1.5,0.4c1.4,0.4,2.5,0.8,2.5,2c0,1.3-1.2,2.1-2.9,2.1c-1.5,0-2.8-0.7-2.9-2.1h-2c0.1,2.4,2,3.8,4.9,3.8
|
||||
c3.1,0,4.8-1.6,4.8-3.8c0-2.4-2.1-3.3-3.8-3.7l-1.3-0.3c-1-0.3-2.4-0.7-2.4-2c0-1.1,1-1.9,2.6-1.9C130.2,5.4,131.2,6.1,131.4,7.3z
|
||||
M139.8,17.2c2.3,0,3.8-1.4,4-3.3H142c-0.2,1.1-1.1,1.7-2.2,1.7c-1.6,0-2.7-1.3-2.7-3.5c0-2.1,1.1-3.4,2.7-3.4c1.2,0,2,0.8,2.2,1.7
|
||||
h1.9c-0.2-2-1.8-3.3-4.1-3.3c-2.8,0-4.6,2.1-4.6,5.1C135.2,15.1,137,17.2,139.8,17.2z M150,17.2c2.8,0,4.6-2,4.6-5.1
|
||||
c0-3.1-1.8-5.1-4.6-5.1c-2.8,0-4.6,2-4.6,5.1C145.4,15.2,147.2,17.2,150,17.2z M150,15.6c-1.8,0-2.7-1.6-2.7-3.5
|
||||
c0-1.9,0.8-3.5,2.7-3.5c1.8,0,2.6,1.6,2.6,3.5C152.7,14,151.8,15.6,150,15.6z M156.7,17h1.9v-6c0-1.3,1-2.2,2.3-2.2
|
||||
c0.4,0,0.8,0.1,1,0.1V7.1c-0.2,0-0.6,0-0.8,0c-1.2,0-2.1,0.7-2.5,1.7h-0.1V7.2h-1.8V17z M167.5,17.2c2.1,0,3.7-1.1,4.1-2.7l-1.8-0.3
|
||||
c-0.3,0.9-1.2,1.4-2.3,1.4c-1.6,0-2.7-1.1-2.8-3h7V12c0-3.5-2.1-4.9-4.3-4.9c-2.7,0-4.5,2.1-4.5,5.1
|
||||
C162.8,15.2,164.6,17.2,167.5,17.2z M164.8,11.2c0.1-1.4,1.1-2.6,2.6-2.6c1.5,0,2.5,1.1,2.5,2.6H164.8z M181.2,9.6
|
||||
c-0.4-1.5-1.6-2.5-3.7-2.5c-2.2,0-3.8,1.2-3.8,2.9c0,1.4,0.8,2.3,2.7,2.7l1.7,0.4c0.9,0.2,1.4,0.6,1.4,1.2c0,0.8-0.8,1.4-2.1,1.4
|
||||
c-1.1,0-1.9-0.5-2.1-1.5l-1.8,0.3c0.3,1.7,1.8,2.7,4,2.7c2.4,0,4-1.3,4-3c0-1.4-0.9-2.2-2.7-2.7l-1.6-0.4c-1.1-0.3-1.5-0.6-1.5-1.3
|
||||
c0-0.8,0.8-1.3,1.9-1.3c1.2,0,1.7,0.7,2,1.3L181.2,9.6z M192.1,17.2c1.2,0,2.5-0.4,3.4-1.2l0.9,1h2.2l-1.9-2.2
|
||||
c0.6-0.7,1.1-1.9,1.1-3.7H196c0,0.9-0.2,1.7-0.5,2.3l-2.6-3.1l0.9-0.7c1.1-0.8,1.7-1.7,1.7-3c0-1.5-1.2-2.9-3.2-2.9
|
||||
c-2,0-3.3,1.3-3.3,3.1c0,1.2,0.6,2.1,1.4,3.1c-1.5,1-2.5,2-2.5,3.6C187.8,15.6,189.4,17.2,192.1,17.2z M194.4,14.7
|
||||
c-0.7,0.6-1.5,0.9-2.3,0.9c-1.4,0-2.3-1-2.3-2.1c0-0.4,0.3-1.2,1.4-2l0.3-0.3L194.4,14.7z M191.8,9c-0.6-0.7-1.1-1.4-1.1-2.1
|
||||
c0-0.8,0.6-1.5,1.5-1.5c0.9,0,1.5,0.7,1.5,1.3c0,0.8-0.4,1.3-1.1,1.7L191.8,9z M204.9,3.9V17h1.9V7.5h0.1l3.9,9.5h1.6l3.9-9.5h0.1
|
||||
V17h1.9V3.9h-2.4l-4.2,10.2h-0.2l-4.2-10.2H204.9z M225.1,17.2c2.1,0,3.7-1.1,4.1-2.7l-1.8-0.3c-0.3,0.9-1.2,1.4-2.3,1.4
|
||||
c-1.6,0-2.7-1.1-2.8-3h7V12c0-3.5-2.1-4.9-4.3-4.9c-2.7,0-4.5,2.1-4.5,5.1C220.5,15.2,222.2,17.2,225.1,17.2z M222.4,11.2
|
||||
c0.1-1.4,1.1-2.6,2.6-2.6c1.5,0,2.5,1.1,2.5,2.6H222.4z M236.1,7.2h-2V4.8h-1.9v2.4h-1.4v1.5h1.4v5.8c0,1.8,1.4,2.6,2.9,2.6
|
||||
c0.6,0,1-0.1,1.2-0.2l-0.3-1.6c-0.1,0-0.4,0.1-0.7,0.1c-0.6,0-1.2-0.2-1.2-1.3V8.7h2V7.2z M238.2,17h1.9v-6c0-1.3,1-2.2,2.3-2.2
|
||||
c0.4,0,0.8,0.1,1,0.1V7.1c-0.2,0-0.6,0-0.8,0c-1.2,0-2.1,0.7-2.5,1.7H240V7.2h-1.8V17z M245.1,17h1.9V7.2h-1.9V17z M246,5.7
|
||||
c0.7,0,1.2-0.5,1.2-1.1s-0.5-1.1-1.2-1.1c-0.7,0-1.2,0.5-1.2,1.1S245.4,5.7,246,5.7z M253.7,17.2c2.3,0,3.8-1.4,4-3.3h-1.9
|
||||
c-0.2,1.1-1.1,1.7-2.2,1.7c-1.6,0-2.7-1.3-2.7-3.5c0-2.1,1.1-3.4,2.7-3.4c1.2,0,2,0.8,2.2,1.7h1.9c-0.2-2-1.8-3.3-4.1-3.3
|
||||
c-2.8,0-4.6,2.1-4.6,5.1C249.1,15.1,250.8,17.2,253.7,17.2z M267.1,9.6c-0.4-1.5-1.6-2.5-3.7-2.5c-2.2,0-3.8,1.2-3.8,2.9
|
||||
c0,1.4,0.8,2.3,2.7,2.7l1.7,0.4c0.9,0.2,1.4,0.6,1.4,1.2c0,0.8-0.8,1.4-2.1,1.4c-1.1,0-1.9-0.5-2.1-1.5l-1.8,0.3
|
||||
c0.3,1.7,1.8,2.7,4,2.7c2.4,0,4-1.3,4-3c0-1.4-0.9-2.2-2.7-2.7l-1.6-0.4c-1.1-0.3-1.5-0.6-1.5-1.3c0-0.8,0.8-1.3,1.9-1.3
|
||||
c1.2,0,1.7,0.7,2,1.3L267.1,9.6z"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 5.2 KiB |
@ -1,10 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 24.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 23 21" style="enable-background:new 0 0 23 21;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;}
|
||||
</style>
|
||||
<path class="st0" d="M19.1,9.8L18,8.7l-5.7,5.7V0h-1.5v14.4L5.1,8.7l-1,1.1l7.5,7.5L19.1,9.8z M19.1,16.5v3h-15v-3H2.6v3
|
||||
c0,0.8,0.7,1.5,1.5,1.5h15c0.8,0,1.5-0.7,1.5-1.5v-3H19.1z"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 621 B |
@ -1,4 +0,0 @@
|
||||
<svg width="180" height="48" viewBox="0 0 180 48" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M35.5 23.25L34.4425 22.1925L28.75 27.8775V13.5H27.25V27.8775L21.5575 22.1925L20.5 23.25L28 30.75L35.5 23.25ZM35.5 30V33H20.5V30H19V33C19 33.8284 19.6716 34.5 20.5 34.5H35.5C36.3284 34.5 37 33.8284 37 33V30H35.5Z" fill="white"/>
|
||||
<path d="M49.5271 30.5H57.8112V28.7997H51.5022V24.7919H57.3062V23.098H51.5022V19.1094H57.7345V17.4091H49.5271V30.5ZM68.6185 20.6818H66.5667L64.0866 28.2372H63.9843L61.4978 20.6818H59.4459L63.0127 30.5H65.0582L68.6185 20.6818ZM74.2947 30.6982C76.436 30.6982 77.9509 29.6435 78.3856 28.0455L76.5766 27.7195C76.2314 28.6463 75.4005 29.1193 74.3138 29.1193C72.6775 29.1193 71.578 28.0582 71.5269 26.1662H78.507V25.4886C78.507 21.9411 76.3849 20.554 74.1604 20.554C71.4246 20.554 69.6221 22.6378 69.6221 25.6548C69.6221 28.7038 71.3991 30.6982 74.2947 30.6982ZM71.5333 24.7344C71.61 23.3409 72.6199 22.1328 74.1732 22.1328C75.6562 22.1328 76.6278 23.2322 76.6341 24.7344H71.5333ZM82.5388 24.6705C82.5388 23.1044 83.4976 22.2095 84.8271 22.2095C86.1247 22.2095 86.911 23.0597 86.911 24.4851V30.5H88.8222V24.255C88.8222 21.826 87.4862 20.554 85.4791 20.554C84.0026 20.554 83.0374 21.2379 82.5835 22.2798H82.4621V20.6818H80.6276V30.5H82.5388V24.6705ZM95.9685 20.6818H93.955V18.3295H92.0438V20.6818H90.6056V22.2159H92.0438V28.0135C92.0374 29.7969 93.3989 30.6598 94.9074 30.6278C95.5146 30.6214 95.9237 30.5064 96.1475 30.4233L95.8023 28.8445C95.6744 28.87 95.4379 28.9276 95.1311 28.9276C94.5111 28.9276 93.955 28.723 93.955 27.6172V22.2159H95.9685V20.6818ZM103 30.5H104.975V24.7919H111.501V30.5H113.483V17.4091H111.501V23.098H104.975V17.4091H103V30.5ZM116.206 30.5H118.117V20.6818H116.206V30.5ZM117.171 19.1669C117.829 19.1669 118.379 18.6555 118.379 18.0291C118.379 17.4027 117.829 16.8849 117.171 16.8849C116.506 16.8849 115.963 17.4027 115.963 18.0291C115.963 18.6555 116.506 19.1669 117.171 19.1669ZM128.045 23.0788C127.649 21.5511 126.454 20.554 124.332 20.554C122.114 20.554 120.541 21.7237 120.541 23.4624C120.541 24.8558 121.385 25.7827 123.226 26.1918L124.888 26.5561C125.834 26.767 126.275 27.1889 126.275 27.8026C126.275 28.5632 125.463 29.1577 124.21 29.1577C123.066 29.1577 122.331 28.6655 122.101 27.7003L120.253 27.9815C120.573 29.7202 122.018 30.6982 124.223 30.6982C126.594 30.6982 128.237 29.4389 128.237 27.6619C128.237 26.2749 127.355 25.4183 125.552 25.0028L123.993 24.6449C122.913 24.3892 122.446 24.0249 122.452 23.3601C122.446 22.6058 123.264 22.0689 124.351 22.0689C125.54 22.0689 126.089 22.7273 126.313 23.3857L128.045 23.0788ZM134.922 20.6818H132.908V18.3295H130.997V20.6818H129.559V22.2159H130.997V28.0135C130.991 29.7969 132.352 30.6598 133.861 30.6278C134.468 30.6214 134.877 30.5064 135.101 30.4233L134.755 28.8445C134.628 28.87 134.391 28.9276 134.084 28.9276C133.464 28.9276 132.908 28.723 132.908 27.6172V22.2159H134.922V20.6818ZM141.066 30.6982C143.834 30.6982 145.643 28.6719 145.643 25.6357C145.643 22.5803 143.834 20.554 141.066 20.554C138.298 20.554 136.489 22.5803 136.489 25.6357C136.489 28.6719 138.298 30.6982 141.066 30.6982ZM141.072 29.0938C139.263 29.0938 138.42 27.5149 138.42 25.6293C138.42 23.75 139.263 22.152 141.072 22.152C142.869 22.152 143.712 23.75 143.712 25.6293C143.712 27.5149 142.869 29.0938 141.072 29.0938ZM147.776 30.5H149.687V24.5043C149.687 23.2195 150.678 22.2926 152.033 22.2926C152.429 22.2926 152.877 22.3629 153.03 22.4077V20.5795C152.839 20.554 152.461 20.5348 152.218 20.5348C151.068 20.5348 150.084 21.1868 149.726 22.2415H149.623V20.6818H147.776V30.5ZM156.191 34.1818C157.77 34.1818 158.767 33.3572 159.336 31.8104L163.395 20.701L161.33 20.6818L158.844 28.3011H158.742L156.255 20.6818H154.21L157.802 30.6278L157.565 31.2798C157.08 32.5838 156.396 32.6925 155.347 32.4048L154.887 33.9709C155.117 34.0732 155.616 34.1818 156.191 34.1818Z" fill="white"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 3.8 KiB |
1
apps/solana/solarscored/www/flipside.svg
Normal file
@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 97 103.03"><defs><style>.cls-1{fill-rule:evenodd;}</style></defs><path class="cls-1" d="M48.5,103.03c-3.9,0-7.7-1-11.2-2.9-7.8-4.4-18.2-10.3-26.1-14.8-6.9-3.9-11.2-11.2-11.2-19v-29.6c0-7.8,4.3-15.1,11.2-19,7.8-4.4,18.2-10.3,26.1-14.8,6.9-3.9,15.4-3.9,22.4,0,7.8,4.4,18.2,10.3,26.1,14.8,3.4,1.9,6.1,4.6,8,7.7l-34.2,19.7c-6.8,3.9-11,11.3-11.1,18.9v39Zm48.4-41.9v5.1c0,7.8-4.3,15.1-11.2,19-7.8,4.4-18.2,10.3-26.1,14.8-.7,.4-1.5,.8-2.2,1.1v-9.2c0-4.6,2.6-9,6.5-11.3,9.8-5.7,19.6-11.2,29.4-16.9,1.3-.7,2.5-1.6,3.6-2.6Zm-.1-27.2c.1,.9,.2,1.9,.2,2.8v5.3c0,5.8-3.2,11.2-8.2,14.1-9.8,5.7-19.6,11.2-29.4,16.9-.7,.4-1.3,.8-1.9,1.3v-10.3c0-4.6,2.6-9.1,6.6-11.4l32.7-18.7Z"/></svg>
|
||||
|
After Width: | Height: | Size: 772 B |
1
apps/solana/solarscored/www/github.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg width="98" height="96" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M48.854 0C21.839 0 0 22 0 49.217c0 21.756 13.993 40.172 33.405 46.69 2.427.49 3.316-1.059 3.316-2.362 0-1.141-.08-5.052-.08-9.127-13.59 2.934-16.42-5.867-16.42-5.867-2.184-5.704-5.42-7.17-5.42-7.17-4.448-3.015.324-3.015.324-3.015 4.934.326 7.523 5.052 7.523 5.052 4.367 7.496 11.404 5.378 14.235 4.074.404-3.178 1.699-5.378 3.074-6.6-10.839-1.141-22.243-5.378-22.243-24.283 0-5.378 1.94-9.778 5.014-13.2-.485-1.222-2.184-6.275.486-13.038 0 0 4.125-1.304 13.426 5.052a46.97 46.97 0 0 1 12.214-1.63c4.125 0 8.33.571 12.213 1.63 9.302-6.356 13.427-5.052 13.427-5.052 2.67 6.763.97 11.816.485 13.038 3.155 3.422 5.015 7.822 5.015 13.2 0 18.905-11.404 23.06-22.324 24.283 1.78 1.548 3.316 4.481 3.316 9.126 0 6.6-.08 11.897-.08 13.526 0 1.304.89 2.853 3.316 2.364 19.412-6.52 33.405-24.935 33.405-46.691C97.707 22 75.788 0 48.854 0z" fill="#24292f"/></svg>
|
||||
|
After Width: | Height: | Size: 963 B |
@ -1,5 +0,0 @@
|
||||
(function(f,b){if(!b.__SV){var e,g,i,h;window.mixpanel=b;b._i=[];b.init=function(e,f,c){function g(a,d){var b=d.split(".");2==b.length&&(a=a[b[0]],d=b[1]);a[d]=function(){a.push([d].concat(Array.prototype.slice.call(arguments,0)))}}var a=b;"undefined"!==typeof c?a=b[c]=[]:c="mixpanel";a.people=a.people||[];a.toString=function(a){var d="mixpanel";"mixpanel"!==c&&(d+="."+c);a||(d+=" (stub)");return d};a.people.toString=function(){return a.toString(1)+".people (stub)"};i="disable time_event track track_pageview track_links track_forms track_with_groups add_group set_group remove_group register register_once alias unregister identify name_tag set_config reset opt_in_tracking opt_out_tracking has_opted_in_tracking has_opted_out_tracking clear_opt_in_out_tracking start_batch_senders people.set people.set_once people.unset people.increment people.append people.union people.track_charge people.clear_charges people.delete_user people.remove".split(" ");
|
||||
for(h=0;h<i.length;h++)g(a,i[h]);var j="set set_once union unset remove delete".split(" ");a.get_group=function(){function b(c){d[c]=function(){call2_args=arguments;call2=[c].concat(Array.prototype.slice.call(call2_args,0));a.push([e,call2])}}for(var d={},e=["get_group"].concat(Array.prototype.slice.call(arguments,0)),c=0;c<j.length;c++)b(j[c]);return d};b._i.push([e,f,c])};b.__SV=1.2;e=f.createElement("script");e.type="text/javascript";e.async=!0;e.src="undefined"!==typeof MIXPANEL_CUSTOM_LIB_URL?
|
||||
MIXPANEL_CUSTOM_LIB_URL:"file:"===f.location.protocol&&"//cdn.mxpnl.com/libs/mixpanel-2-latest.min.js".match(/^\/\//)?"https://cdn.mxpnl.com/libs/mixpanel-2-latest.min.js":"//cdn.mxpnl.com/libs/mixpanel-2-latest.min.js";g=f.getElementsByTagName("script")[0];g.parentNode.insertBefore(e,g)}})(document,window.mixpanel||[]);
|
||||
mixpanel.init("c48149996bde884c5132354e074fe9a8");
|
||||
mixpanel.track('Sign up');
|
||||
|
Before Width: | Height: | Size: 12 KiB |
1
apps/solana/solarscored/www/random.svg
Normal file
@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg id="Layer_3" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 78 66"><defs><style>.cls-1{stroke:#000;stroke-width:2px;}</style></defs><path class="cls-1" d="M30.43,32.92c-1.03-1.13-2.04-2.24-3.05-3.34-3.71-4.06-7.43-8.1-11.13-12.17-.67-.74-1.4-1.09-2.4-1.08-3.19,.03-6.38,.01-9.57,0-.44,0-.89-.02-1.3-.13-.98-.27-1.59-1.19-1.5-2.16,.09-.98,.85-1.84,1.86-1.85,3.7-.03,7.41-.09,11.1,.07,2.17,.09,3.91,1.29,5.38,2.9,4.12,4.53,8.26,9.04,12.39,13.55,.32,.35,.65,.7,1.04,1.12,.45-.48,.86-.93,1.27-1.38,3.98-4.36,7.97-8.7,11.93-13.08,1.96-2.16,4.35-3.25,7.28-3.22,4.21,.04,8.43,.01,12.64,.01,.36,0,.71,0,1.39,0-.48-.39-.73-.62-1-.82-2.68-1.92-5.36-3.84-8.05-5.75-.8-.57-1.15-1.33-.93-2.29,.2-.87,.79-1.46,1.67-1.52,.54-.04,1.19,.11,1.63,.42,4.79,3.37,9.56,6.78,14.32,10.2,1.45,1.04,1.45,2.6,0,3.64-4.76,3.42-9.53,6.83-14.31,10.22-1.14,.81-2.41,.64-3.11-.35-.71-1.02-.45-2.21,.71-3.04,2.62-1.88,5.24-3.75,7.86-5.63,.31-.23,.61-.47,1.09-.84-.53-.03-.84-.07-1.15-.07-4.29,0-8.58,.04-12.86-.02-1.67-.02-2.91,.53-4.03,1.78-4.2,4.7-8.49,9.32-12.74,13.98-.24,.27-.48,.54-.77,.88,.86,.95,1.69,1.86,2.52,2.78,3.79,4.14,7.58,8.26,11.35,12.42,.82,.9,1.78,1.41,2.97,1.41,4.83,.01,9.67,0,14.75,0-.38-.32-.59-.53-.83-.7-2.71-1.95-5.42-3.88-8.13-5.83-1.04-.75-1.31-1.79-.78-2.78,.47-.88,1.47-1.3,2.43-.99,.27,.09,.53,.24,.77,.41,4.75,3.38,9.49,6.75,14.22,10.15,1.45,1.04,1.47,2.6,.03,3.64-4.79,3.45-9.59,6.87-14.4,10.28-1.07,.76-2.33,.56-3.02-.39-.72-1.01-.47-2.21,.69-3.04,2.62-1.88,5.24-3.75,7.86-5.63,.32-.23,.64-.47,1.16-.86-.56-.03-.9-.07-1.24-.07-4.18,0-8.36-.02-12.53,0-3,.02-5.48-1.02-7.5-3.26-4.11-4.54-8.25-9.04-12.38-13.56-.25-.27-.5-.53-.83-.87-.3,.32-.57,.6-.84,.88-4.11,4.49-8.25,8.95-12.31,13.48-2.05,2.29-4.51,3.39-7.56,3.33-2.82-.05-5.64,0-8.47-.01-1.55,0-2.55-.86-2.53-2.13,.02-1.25,.96-2.04,2.48-2.04,3.23,0,6.45-.02,9.68,0,1.07,0,1.87-.37,2.59-1.17,4.46-4.91,8.95-9.79,13.43-14.68,.22-.24,.42-.49,.7-.81Z"/></svg>
|
||||
|
After Width: | Height: | Size: 1.9 KiB |
@ -1,510 +1,325 @@
|
||||
/*https://www.figma.com/file/lrdoh9PNj60h2yiwmW6bS0/Calculator-Tools?node-id=615%3A1412*/
|
||||
|
||||
body {
|
||||
background-color: #12161b;
|
||||
background-attachment: fixed;
|
||||
background-size: auto 100%;
|
||||
background-position: center;
|
||||
padding-left: 10%;
|
||||
padding-right: 10%;
|
||||
color: #C4CDD5;
|
||||
font-family: 'Inter';
|
||||
font-size: 18px;
|
||||
font-weight: 400;
|
||||
font-size: 16px;
|
||||
background: url('background.svg') no-repeat center center fixed;
|
||||
-webkit-background-size: cover;
|
||||
-moz-background-size: cover;
|
||||
-o-background-size: cover;
|
||||
background-size: cover;
|
||||
font-family: 'Exo 2';
|
||||
}
|
||||
|
||||
a {
|
||||
color: #8880E5;
|
||||
}
|
||||
|
||||
hr {
|
||||
margin: 0;
|
||||
background: #10151A;
|
||||
opacity: 0.5;
|
||||
border: 1px solid #C4CDD5;
|
||||
a:hover {
|
||||
color: #23D1BA;
|
||||
}
|
||||
|
||||
a[title]:hover::after {
|
||||
content: attr(title);
|
||||
position: absolute;
|
||||
top: -100%;
|
||||
left: 0;
|
||||
color: orange;
|
||||
}
|
||||
|
||||
.container-fluid {
|
||||
max-width: 1100px;
|
||||
margin: 0 auto;
|
||||
border-radius: 16px;
|
||||
height: 100%;
|
||||
margin-top: 50px;
|
||||
padding: 30px;
|
||||
background-color: #161d24;
|
||||
width: 80%;
|
||||
max-width: 1200px;
|
||||
margin: auto;
|
||||
padding-top: 1%;
|
||||
}
|
||||
|
||||
.titles {
|
||||
font-size: 2em;
|
||||
font-weight: 700;
|
||||
color: #5494F8;
|
||||
line-height: 50.4px;
|
||||
padding-bottom: 15px;
|
||||
padding-left: 4%;
|
||||
}
|
||||
.description {
|
||||
color: #ffffff;
|
||||
font-weight: 500;
|
||||
padding-left: 4%;
|
||||
text-align: left;
|
||||
}
|
||||
.madewith {
|
||||
padding-top: 2%;
|
||||
color: #C4CDD5;
|
||||
font-size: 0.85em;
|
||||
padding-left: 4%;
|
||||
text-align: left;
|
||||
}
|
||||
.subtitle {
|
||||
font-size: 0.85em;
|
||||
text-align: left;
|
||||
padding-bottom: 5%;
|
||||
}
|
||||
.madewith a {
|
||||
color: #C4CDD5;
|
||||
text-decoration: underline;
|
||||
/* remove the default column padding for the app logo */
|
||||
.title {
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
.wrapper {
|
||||
background: #141920;
|
||||
border-radius: 16px;
|
||||
border: 0.5px solid #454F5B;
|
||||
padding: 2% 4% 2% 4%;
|
||||
}
|
||||
|
||||
.wrapper2 {
|
||||
background: #141920;
|
||||
opacity: 0.4;
|
||||
border-radius: 16px;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#last_update {
|
||||
font-family: Roboto Mono;
|
||||
font-size: 0.8em;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.floatinput {
|
||||
/* upper right icon links */
|
||||
#icons {
|
||||
display: flex;
|
||||
padding-top: 10px;
|
||||
padding-left: 30px;
|
||||
}
|
||||
|
||||
.appbody {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
/* centering the address input + buttons */
|
||||
.addybuttons {
|
||||
display: flex;
|
||||
margin: auto;
|
||||
align-items: baseline;
|
||||
vertical-align: bottom;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.choose {
|
||||
font-weight: 600;
|
||||
color: #ffffff;
|
||||
padding-bottom: 3%;
|
||||
#useraddy label {
|
||||
font-family: 'Orbitron';
|
||||
font-size: 13.6px;
|
||||
}
|
||||
|
||||
|
||||
.irs-min, .irs-max {
|
||||
visibility: hidden !important;
|
||||
#useraddy {
|
||||
min-width: 400px;
|
||||
}
|
||||
|
||||
.irs-from, .irs-to {
|
||||
#addy {
|
||||
border: solid #E2E4F7 2px;
|
||||
border-radius: 8px;
|
||||
min-width: 400px;
|
||||
}
|
||||
|
||||
.btn-default, .btn-default:focus {
|
||||
border: solid #E2E4F7 2px;
|
||||
border-radius: 8px;
|
||||
margin-top: auto;
|
||||
}
|
||||
|
||||
.btn-default:hover {
|
||||
background-color: #E2E4F7;
|
||||
border: solid #E2E4F7 2px;
|
||||
}
|
||||
|
||||
.btn-capture {
|
||||
background-color: transparent !important;
|
||||
color: grey;
|
||||
border: 0 !important;
|
||||
opacity: 0.7;
|
||||
}
|
||||
|
||||
.irs-bar {
|
||||
background: linear-gradient(270deg, #014486 0%, #5494F8 100%) !important;
|
||||
border-radius: 100px;
|
||||
}
|
||||
.irs--shiny .irs-line {
|
||||
top: 25px;
|
||||
height: 4px;
|
||||
background-color: #454F5B;
|
||||
border-radius: 100px;
|
||||
}
|
||||
.irs-handle {
|
||||
background-color: #ffffff !important;
|
||||
border: 1px solid #ffffff !important;
|
||||
.btn-capture:hover {
|
||||
background-color: transparent !important;
|
||||
color: grey;
|
||||
border: 0 !important;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
#download_scores_metrics {
|
||||
background: #5494F8;
|
||||
width: 100%;
|
||||
margin-top: 2%;
|
||||
padding-top: 12px;
|
||||
padding-bottom: 12px;
|
||||
color: white;
|
||||
vertical-align: middle;
|
||||
font-size: 0.9em;
|
||||
}
|
||||
#download_all_data {
|
||||
background: #5494F8;
|
||||
padding-top: 10px;
|
||||
padding-bottom: 10px;
|
||||
color: white;
|
||||
vertical-align: middle;
|
||||
font-size: 0.9em;
|
||||
}
|
||||
|
||||
.toppad {
|
||||
padding-top: 3%;
|
||||
padding-bottom: 15px;
|
||||
font-weight: 600;
|
||||
color: #ffffff;
|
||||
}
|
||||
.boldwhite {
|
||||
font-weight: 600;
|
||||
color: #ffffff;
|
||||
}
|
||||
.userscore {
|
||||
background-color: #212B36;
|
||||
border-radius: 4px;
|
||||
padding: 10%;
|
||||
color: #ffffff;
|
||||
font-weight: 600;
|
||||
font-size: 1.05em;
|
||||
}
|
||||
#user_score {
|
||||
font-family: Roboto Mono;
|
||||
font-size: 1.2em;
|
||||
font-weight: 300;
|
||||
padding-top: 3%;
|
||||
}
|
||||
#vs_mean {
|
||||
font-weight: 300;
|
||||
font-size: 0.9em;
|
||||
}
|
||||
|
||||
|
||||
.nomargin {
|
||||
margin: 0;
|
||||
}
|
||||
.sidepiece {
|
||||
width: 1% !important;
|
||||
}
|
||||
.col-sm-2 {
|
||||
width: 19.6% !important;
|
||||
}
|
||||
|
||||
.showey {
|
||||
visibility: visible !important;
|
||||
}
|
||||
.outerDiv{
|
||||
margin: 0px auto;
|
||||
}
|
||||
.leftDiv {
|
||||
float: left;
|
||||
text-align: left;
|
||||
}
|
||||
.rightDiv {
|
||||
float: right;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.doesscroll {
|
||||
overflow-x: scroll;
|
||||
min-width: 800px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
table {
|
||||
table-layout: fixed;
|
||||
width: 100%;
|
||||
border-collapse:separate;
|
||||
border-spacing: .5em;
|
||||
white-space: nowrap;
|
||||
overflow-x: scroll;
|
||||
}
|
||||
|
||||
th {
|
||||
background: #212B36;
|
||||
color: #ffffff;
|
||||
font-weight: 600;
|
||||
font-size: .8em;
|
||||
border-radius: 4px;
|
||||
padding: 5px;
|
||||
}
|
||||
.catscore {
|
||||
font-family: Roboto Mono;
|
||||
font-weight: 400;
|
||||
font-size: 0.85em;
|
||||
}
|
||||
|
||||
.hidey {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
#n_governance_votes_c, #n_projects_staked_c, #n_airdrop_and_gov_stakes_c, #n_airdrops_claimed_c, #repeat_protocol_claims_c, #n_protocols_claimed_c, #n_dex_trades_c, #n_lp_deposits_c, #n_tokens_used_c, #n_transactions_c, #days_since_last_txn_c, #n_contracts_c, #net_from_shuttle_cex_c, #prop_luna_staked_c, #prop_drops_kept_c {
|
||||
visibility: hidden;
|
||||
}
|
||||
#n_governance_votes, #n_projects_staked, #n_airdrop_and_gov_stakes, #n_airdrops_claimed, #repeat_protocollaims, #n_protocols_claimed, #n_dex_trades, #n_lp_deposits, #n_tokens_used, #n_transactions, #days_since_last_txn, #n_contracts, #net_from_shuttle_cex, #prop_luna_staked, #prop_drops_kept {
|
||||
font-weight: 400;
|
||||
}
|
||||
td {
|
||||
border: 1px solid #212B36;
|
||||
border-radius: 4px;
|
||||
font-weight: 600;
|
||||
font-size: 0.78em;
|
||||
padding: 5px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.bright {
|
||||
background: #172852;
|
||||
border: 1px solid #172852;
|
||||
border-radius: 4px;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.about {
|
||||
font-size: 0.98em;
|
||||
}
|
||||
.output {
|
||||
font-weight: 300;
|
||||
}
|
||||
|
||||
.plotly {
|
||||
font-family: Roboto Mono !important;
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
font-size: 14px;
|
||||
line-height: 150%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
text-align: center;
|
||||
color: #919EAB !important;
|
||||
.form-group {
|
||||
margin-bottom: 0 !important;
|
||||
}
|
||||
|
||||
.form-control {
|
||||
background: #10151A;
|
||||
border: 1px solid #97B8F5;
|
||||
border-radius: 4px;
|
||||
font-family: Roboto Mono !important;
|
||||
color: #FFFFFF;
|
||||
min-height: 42px;
|
||||
}
|
||||
|
||||
.toppart {
|
||||
background-color: #10151A;
|
||||
border: 1px solid #97B8F5;
|
||||
border-radius: 16px;
|
||||
font-size: 18px;
|
||||
padding: 4%;
|
||||
outline:none;
|
||||
border-color:#97B8F5;
|
||||
box-shadow:0 0 10px #97B8F5;
|
||||
}
|
||||
|
||||
|
||||
.aligns {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
#event_history {
|
||||
padding-top: 2%;
|
||||
font-family: Roboto Mono !important;
|
||||
font-size: 0.8em;
|
||||
color: #FFFFFF;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
input[type=radio].rt-select-input {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
.rt-select {
|
||||
width: 0;
|
||||
}
|
||||
.rt-td-select {
|
||||
width: 0;
|
||||
}
|
||||
.rt-page-button-current {
|
||||
color: #FFF;
|
||||
}
|
||||
.rt-thead {
|
||||
background-color: #10151A;
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
.ReactTable {
|
||||
background-color: #171e25;
|
||||
color: #C4CDD5;
|
||||
border: none;
|
||||
font-size: 0.9em;
|
||||
margin: -5px;
|
||||
font-family: Roboto Mono;
|
||||
}
|
||||
|
||||
.rt-th {
|
||||
border: 0px solid #000000 !important;
|
||||
padding-top: 15px;
|
||||
padding-bottom: 15px;
|
||||
font-weight: 400;
|
||||
font-family: Inter;
|
||||
}
|
||||
.rt-tr {
|
||||
padding-top: 5px;
|
||||
padding-bottom: 5px;
|
||||
}
|
||||
.rt-pagination {
|
||||
margin: 0;
|
||||
background: #171e25;
|
||||
opacity: 0.5;
|
||||
border-bottom: 1px solid #C4CDD5;
|
||||
border-top: 1px solid #C4CDD5;
|
||||
}
|
||||
|
||||
.btn, .btn-default {
|
||||
color: #FFF;
|
||||
border: none;
|
||||
}
|
||||
.btn:hover {
|
||||
background-color: #222b36;
|
||||
}
|
||||
|
||||
.downloadrow {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.disclaimer {
|
||||
font-family: Inter;
|
||||
font-size: 14px;
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
line-height: 24px;
|
||||
letter-spacing: 0em;
|
||||
text-align: left;
|
||||
display: float;
|
||||
color: #919EAB;
|
||||
|
||||
}
|
||||
|
||||
#inputaddy > .form-group {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
#connect {
|
||||
color: #5484F8;
|
||||
background: #141920;
|
||||
border: none;
|
||||
padding: 0;
|
||||
font-family: Roboto Mono;
|
||||
#randomaddy {
|
||||
margin-left: 10px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
#connect:hover {
|
||||
color: #CACEF0 !important;
|
||||
background-color: transparent !important;
|
||||
#leftbox {
|
||||
border: 2px #E2E4F7 solid;
|
||||
border-radius: 8px;
|
||||
padding: 3px;
|
||||
background-color: #ffffff99;
|
||||
margin-top: 28px;
|
||||
padding-top: 15px;
|
||||
padding-bottom: 10px;
|
||||
|
||||
}
|
||||
#botrightbox {
|
||||
border: 2px #E2E4F7 solid;
|
||||
border-radius: 8px;
|
||||
padding: 3px;
|
||||
background-color: #ffffff99;
|
||||
margin-top: 20px;
|
||||
padding-top: 15px;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
|
||||
#terraddress > div > button {
|
||||
color: #7F8CED;
|
||||
background-color: #10151A;
|
||||
border-radius: 4px;
|
||||
border: none;
|
||||
margin-top: 15px;
|
||||
margin-bottom: 15px;
|
||||
padding: 30px;
|
||||
min-width: 100%;
|
||||
|
||||
|
||||
svg {
|
||||
max-height: 485px;
|
||||
margin: auto;
|
||||
display: block;
|
||||
}
|
||||
|
||||
#connectpop > div > div > div.modal-header > button > span {
|
||||
color: white !important;
|
||||
font-size: 2em;
|
||||
#wheelpart {
|
||||
background-color: transparent;
|
||||
position: relative;
|
||||
margin-top: 16px;
|
||||
}
|
||||
|
||||
.modal-content {
|
||||
background-color: #171e25 !important;
|
||||
color: #FFF !important;
|
||||
#svgout {
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
top: 0;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
.modal-body {
|
||||
#score {
|
||||
text-align: center;
|
||||
padding-left: 10%;
|
||||
padding-right: 10%;
|
||||
font-family: Orbitron;
|
||||
font-size: 48px;
|
||||
z-index: 9;
|
||||
}
|
||||
|
||||
.modal-header {
|
||||
|
||||
#scorehist {
|
||||
margin-bottom: -38px;
|
||||
}
|
||||
|
||||
/* make the slider more reasonably - color wise
|
||||
These are the ticks and text of the sliders
|
||||
.irs-grid-pol, .irs-grid-text
|
||||
*/
|
||||
.irs {
|
||||
font-family: Roboto Mono !important;
|
||||
}
|
||||
|
||||
/* make the slider more reasonably - color wise */
|
||||
.irs-line {
|
||||
background-color: #E2E4F7 !important;
|
||||
}
|
||||
.irs-grid-pol.small {
|
||||
visibility: hidden !important;
|
||||
}
|
||||
|
||||
.irs-min, .irs-max, .irs-from, .irs-to {
|
||||
font-size: .9em !important;
|
||||
top: 6px !important;
|
||||
}
|
||||
|
||||
.irs-max, .irs-min {
|
||||
color: #686973 !important;
|
||||
}
|
||||
|
||||
.irs-to, .irs-handle, .irs-from, .irs-max, .irs-min, .irs--sharp .irs-bar, .irs-single {
|
||||
background-color: #26D994 !important;
|
||||
}
|
||||
|
||||
.irs-handle:hover {
|
||||
opacity: 75%;
|
||||
background-color: #26D994 !important;
|
||||
}
|
||||
.irs--round .irs-bar {
|
||||
background-color: #26D994;
|
||||
}
|
||||
|
||||
|
||||
.irs-handle>i:first-child {
|
||||
border-top-color: #9945FF !important;
|
||||
}
|
||||
|
||||
.irs-handle>i:first-child:hover, .irs-to:before, .irs-from:before, .irs-single:before {
|
||||
border-top-color: transparent !important;
|
||||
}
|
||||
|
||||
.irs-handle {
|
||||
border: none !important;
|
||||
}
|
||||
|
||||
.modal-footer {
|
||||
visibility: hidden;
|
||||
.irs-grid {
|
||||
visibility: hidden !important;
|
||||
font-size: 0;
|
||||
height: 0;
|
||||
width: 0;
|
||||
}
|
||||
|
||||
.irs-grid-text {
|
||||
visibility: hidden !important;
|
||||
visibility: hidden !important;
|
||||
font-size: 0;
|
||||
height: 0;
|
||||
width: 0;
|
||||
}
|
||||
|
||||
.irs--round .irs-handle {
|
||||
border: none !important;
|
||||
top: 28px;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
.top-banner {
|
||||
background: #12161b;
|
||||
height: 48px;
|
||||
left: 0;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
.metric {
|
||||
font-family: 'Exo 2';
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
font-size: 1.25em;
|
||||
background: -webkit-linear-gradient(#9945FF, #14F195);
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
}
|
||||
|
||||
.top-banner > section {
|
||||
align-items: center;
|
||||
display: flex;
|
||||
height: 100%;
|
||||
justify-content: space-between;
|
||||
margin: 0 auto;
|
||||
max-width: 900px;
|
||||
.metricname {
|
||||
font-family: Orbitron;
|
||||
color: #9945FF;
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
font-size: .8em;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
|
||||
.top-banner a {
|
||||
background-color: transparent;
|
||||
color: #FFF;
|
||||
#bdnldscores, #dnldscores {
|
||||
text-align: center;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
.top-banner a:hover, .top-banner a:active {
|
||||
color: #FFF;
|
||||
text-decoration: none;
|
||||
.score {
|
||||
font-family: 'Exo 2';
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
font-size: 1.7em;
|
||||
background: -webkit-linear-gradient(#9945FF, #14F195);
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
}
|
||||
|
||||
.fs-logo {
|
||||
padding-left: 5px;
|
||||
.yourscore {
|
||||
font-family: Orbitron;
|
||||
color: #9945FF;
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
font-size: 1.1em;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
|
||||
.boxtitle {
|
||||
text-align: center;
|
||||
font-size: 1em;
|
||||
font-family: Orbitron;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.aboutlinks {
|
||||
padding-left: 20px;
|
||||
padding-bottom: 15px;
|
||||
}
|
||||
|
||||
.socials {
|
||||
align-items: center;
|
||||
.metricrow {
|
||||
margin: 5px;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.socials a {
|
||||
display: inline-block;
|
||||
margin: 0 0.5em;
|
||||
overflow: hidden;
|
||||
text-indent: -9999px;
|
||||
white-space: nowrap;
|
||||
width: 24px;
|
||||
.metricholder {
|
||||
width: 25%;
|
||||
}
|
||||
|
||||
.socials a:last-child {
|
||||
margin-right: 0;
|
||||
overflow: visible;
|
||||
text-indent: 0;
|
||||
width: auto;
|
||||
.metricholder2 {
|
||||
width: 33%;
|
||||
}
|
||||
|
||||
.socials a:last-child::before {
|
||||
content: "|";
|
||||
margin: 0 0.5em;
|
||||
#indent {
|
||||
text-align: center;
|
||||
padding-bottom: 4px;
|
||||
font-size: .85em;
|
||||
}
|
||||
|
||||
.twitter {
|
||||
background: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M8.94 18.7051C11.4989 18.7212 13.9577 17.7118 15.7672 15.9023C17.5767 14.0928 18.5861 11.634 18.57 9.0751V8.6326C19.2267 8.15147 19.7951 7.56023 20.25 6.8851C19.6316 7.15555 18.9773 7.33491 18.3075 7.4176C19.0177 6.99444 19.5506 6.32835 19.8075 5.5426C19.1456 5.93968 18.4199 6.21883 17.6625 6.3676C16.6139 5.25027 14.9461 4.97529 13.5943 5.69684C12.2425 6.41839 11.5428 7.95705 11.8875 9.4501C9.16635 9.31653 6.63036 8.03218 4.9125 5.9176C4.02372 7.46019 4.4828 9.42766 5.9625 10.4176C5.43646 10.3973 4.92259 10.2534 4.4625 9.9976V10.0351C4.45287 11.6359 5.56204 13.0263 7.125 13.3726C6.63573 13.5042 6.12322 13.5247 5.625 13.4326C6.07495 14.7902 7.33014 15.7181 8.76 15.7501C7.56691 16.7105 6.08407 17.2391 4.5525 17.2501C4.28396 17.2423 4.01606 17.2198 3.75 17.1826C5.30022 18.1703 7.1019 18.691 8.94 18.6826' fill='%23F4F6F8'/%3E%3C/svg%3E%0A") no-repeat center center;
|
||||
#sliderbox {
|
||||
margin-left: 14%;
|
||||
margin-right: 14%;
|
||||
}
|
||||
|
||||
.linkedin {
|
||||
background: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M19.6575 3.00002H4.3425C3.61669 2.99566 3.02038 3.57199 3 4.29752V19.65C3.01639 20.3773 3.61508 20.9559 4.3425 20.9475H19.6575C20.3849 20.9559 20.9836 20.3773 21 19.65V4.29752C20.9796 3.57199 20.3833 2.99566 19.6575 3.00002ZM8.3325 18.3075H5.6925V9.75002H8.3325V18.3075ZM7.0425 8.55752C6.19951 8.55777 5.51036 7.88527 5.49 7.04252C5.47516 6.6264 5.63396 6.22284 5.92839 5.92841C6.22282 5.63398 6.62638 5.47519 7.0425 5.49002C7.8561 5.54668 8.48716 6.2232 8.48716 7.03877C8.48716 7.85435 7.8561 8.53087 7.0425 8.58752V8.55752ZM18.36 18.255H15.75V14.07C15.75 13.0725 15.75 11.775 14.355 11.775C12.96 11.775 12.75 12.87 12.75 13.9725V18.21H10.08V9.75002H12.57V10.875H12.6225C13.1428 9.97149 14.1234 9.43343 15.165 9.48002C17.8575 9.48002 18.36 11.28 18.36 13.5675V18.255Z' fill='%23F4F6F8'/%3E%3C/svg%3E%0A") no-repeat center center;
|
||||
#hovernote {
|
||||
font-style: italic;
|
||||
text-align: center;
|
||||
font-size: .85em;
|
||||
color: #56575E;
|
||||
}
|
||||
|
||||
.discord {
|
||||
background: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M10.2354 11.1801C10.0175 11.1617 9.79902 11.2095 9.60868 11.3172C9.41833 11.425 9.26496 11.5877 9.16863 11.7841C9.07229 11.9804 9.0375 12.2013 9.06879 12.4178C9.10008 12.6343 9.19601 12.8363 9.34401 12.9973C9.492 13.1584 9.68518 13.271 9.89825 13.3205C10.1113 13.3699 10.3344 13.3539 10.5382 13.2744C10.742 13.195 10.917 13.0559 11.0405 12.8753C11.1639 12.6948 11.2299 12.4811 11.2299 12.2624C11.2358 12.126 11.2147 11.9898 11.1678 11.8616C11.121 11.7334 11.0493 11.6157 10.957 11.5151C10.8646 11.4146 10.7533 11.3333 10.6295 11.2758C10.5057 11.2184 10.3718 11.1858 10.2354 11.1801ZM13.7942 11.1801C13.5762 11.1617 13.3578 11.2095 13.1674 11.3172C12.9771 11.425 12.8237 11.5877 12.7274 11.7841C12.631 11.9804 12.5962 12.2013 12.6275 12.4178C12.6588 12.6343 12.7548 12.8363 12.9028 12.9973C13.0508 13.1584 13.2439 13.271 13.457 13.3205C13.6701 13.3699 13.8931 13.3539 14.0969 13.2744C14.3007 13.195 14.4758 13.0559 14.5992 12.8753C14.7226 12.6948 14.7887 12.4811 14.7887 12.2624C14.7945 12.126 14.7734 11.9898 14.7266 11.8616C14.6797 11.7334 14.6081 11.6157 14.5157 11.5151C14.4234 11.4146 14.3121 11.3333 14.1883 11.2758C14.0645 11.2184 13.9306 11.1858 13.7942 11.1801Z' fill='%23F4F6F8'/%3E%3Cpath d='M18.5325 3H5.46751C5.20438 3.00063 4.94396 3.05308 4.70111 3.15436C4.45826 3.25564 4.23774 3.40376 4.05213 3.59027C3.86653 3.77678 3.71948 3.99802 3.61939 4.24136C3.51929 4.4847 3.46811 4.74538 3.46876 5.0085V18.1905C3.46811 18.4536 3.51929 18.7143 3.61939 18.9576C3.71948 19.201 3.86653 19.4222 4.05213 19.6087C4.23774 19.7952 4.45826 19.9434 4.70111 20.0446C4.94396 20.1459 5.20438 20.1984 5.46751 20.199H16.524L16.0073 18.3953L17.2553 19.5555L18.435 20.6475L20.5313 22.5V5.0085C20.5319 4.74538 20.4807 4.4847 20.3806 4.24136C20.2805 3.99802 20.1335 3.77678 19.9479 3.59027C19.7623 3.40376 19.5418 3.25564 19.2989 3.15436C19.0561 3.05308 18.7956 3.00063 18.5325 3ZM14.769 15.7335C14.769 15.7335 14.418 15.3142 14.1255 14.9437C14.8322 14.7774 15.4573 14.3664 15.8903 13.7835C15.5394 14.017 15.1633 14.21 14.769 14.3588C14.3154 14.5524 13.8411 14.693 13.3553 14.778C12.5202 14.9317 11.6638 14.9284 10.83 14.7682C10.3405 14.6725 9.86073 14.5321 9.39676 14.349C9.15219 14.255 8.91437 14.1442 8.68501 14.0175C8.65576 13.998 8.62651 13.9882 8.59726 13.9688C8.58259 13.9614 8.56937 13.9515 8.55826 13.9395C8.38276 13.842 8.28526 13.7738 8.28526 13.7738C8.70251 14.3444 9.30604 14.7514 9.99151 14.9242C9.69901 15.2948 9.33826 15.7335 9.33826 15.7335C8.75909 15.7491 8.18497 15.6221 7.66642 15.3636C7.14787 15.1052 6.70078 14.7233 6.36451 14.2515C6.39616 12.2749 6.87623 10.3313 7.76851 8.56725C8.55372 7.95055 9.51103 7.59283 10.5083 7.5435L10.6058 7.6605C9.66755 7.89268 8.79203 8.32877 8.04151 8.93775C8.04151 8.93775 8.25601 8.82075 8.61676 8.655C9.3176 8.33509 10.0645 8.12779 10.83 8.04075C10.8846 8.02945 10.94 8.02293 10.9958 8.02125C11.6491 7.93613 12.3103 7.92958 12.9653 8.00175C13.9952 8.11938 14.9922 8.43735 15.9 8.93775C15.1875 8.3578 14.36 7.93574 13.4723 7.6995L13.6088 7.5435C14.606 7.59283 15.5633 7.95055 16.3485 8.56725C17.2408 10.3313 17.7209 12.2749 17.7525 14.2515C17.4135 14.7229 16.9645 15.1043 16.4446 15.3625C15.9246 15.6208 15.3494 15.7482 14.769 15.7335Z' fill='%23F4F6F8'/%3E%3C/svg%3E%0A") no-repeat center center;
|
||||
}
|
||||
|
||||
.small-text {
|
||||
font-size: 12px;
|
||||
.load-container {
|
||||
margin-top: 200px;
|
||||
}
|
||||
13
apps/solana/solarscored/www/solana.svg
Normal file
@ -0,0 +1,13 @@
|
||||
<svg width="101" height="88" viewBox="0 0 101 88" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M100.48 69.3817L83.8068 86.8015C83.4444 87.1799 83.0058 87.4816 82.5185 87.6878C82.0312 87.894 81.5055 88.0003 80.9743 88H1.93563C1.55849 88 1.18957 87.8926 0.874202 87.6912C0.558829 87.4897 0.31074 87.2029 0.160416 86.8659C0.0100923 86.529 -0.0359181 86.1566 0.0280382 85.7945C0.0919944 85.4324 0.263131 85.0964 0.520422 84.8278L17.2061 67.408C17.5676 67.0306 18.0047 66.7295 18.4904 66.5234C18.9762 66.3172 19.5002 66.2104 20.0301 66.2095H99.0644C99.4415 66.2095 99.8104 66.3169 100.126 66.5183C100.441 66.7198 100.689 67.0067 100.84 67.3436C100.99 67.6806 101.036 68.0529 100.972 68.415C100.908 68.7771 100.737 69.1131 100.48 69.3817ZM83.8068 34.3032C83.4444 33.9248 83.0058 33.6231 82.5185 33.4169C82.0312 33.2108 81.5055 33.1045 80.9743 33.1048H1.93563C1.55849 33.1048 1.18957 33.2121 0.874202 33.4136C0.558829 33.6151 0.31074 33.9019 0.160416 34.2388C0.0100923 34.5758 -0.0359181 34.9482 0.0280382 35.3103C0.0919944 35.6723 0.263131 36.0083 0.520422 36.277L17.2061 53.6968C17.5676 54.0742 18.0047 54.3752 18.4904 54.5814C18.9762 54.7875 19.5002 54.8944 20.0301 54.8952H99.0644C99.4415 54.8952 99.8104 54.7879 100.126 54.5864C100.441 54.3849 100.689 54.0981 100.84 53.7612C100.99 53.4242 101.036 53.0518 100.972 52.6897C100.908 52.3277 100.737 51.9917 100.48 51.723L83.8068 34.3032ZM1.93563 21.7905H80.9743C81.5055 21.7907 82.0312 21.6845 82.5185 21.4783C83.0058 21.2721 83.4444 20.9704 83.8068 20.592L100.48 3.17219C100.737 2.90357 100.908 2.56758 100.972 2.2055C101.036 1.84342 100.99 1.47103 100.84 1.13408C100.689 0.79713 100.441 0.510296 100.126 0.308823C99.8104 0.107349 99.4415 1.24074e-05 99.0644 0L20.0301 0C19.5002 0.000878397 18.9762 0.107699 18.4904 0.313848C18.0047 0.519998 17.5676 0.821087 17.2061 1.19848L0.524723 18.6183C0.267681 18.8866 0.0966198 19.2223 0.0325185 19.5839C-0.0315829 19.9456 0.0140624 20.3177 0.163856 20.6545C0.31365 20.9913 0.561081 21.2781 0.875804 21.4799C1.19053 21.6817 1.55886 21.7896 1.93563 21.7905Z" fill="url(#paint0_linear_174_4403)"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_174_4403" x1="8.52558" y1="90.0973" x2="88.9933" y2="-3.01622" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0.08" stop-color="#9945FF"/>
|
||||
<stop offset="0.3" stop-color="#8752F3"/>
|
||||
<stop offset="0.5" stop-color="#5497D5"/>
|
||||
<stop offset="0.6" stop-color="#43B4CA"/>
|
||||
<stop offset="0.72" stop-color="#28E0B9"/>
|
||||
<stop offset="0.97" stop-color="#19FB9B"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.5 KiB |
101
apps/solana/solarscored/www/solarscored-logo.svg
Normal file
@ -0,0 +1,101 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 27.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 1006.5 149.1" style="enable-background:new 0 0 1006.5 149.1;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{enable-background:new ;}
|
||||
</style>
|
||||
<g class="st0">
|
||||
<path d="M20.8,84c-2.8,0-5.3-0.6-7.5-1.9c-2.3-1.2-4.1-2.9-5.5-4.9c-1.4-2.1-2.1-4.3-2.1-6.8v-5.4h14.3v4.8c0,0.3,0.1,0.6,0.4,0.8
|
||||
c0.3,0.2,0.6,0.3,0.9,0.3h46.8c0.4,0,0.7-0.1,0.9-0.3c0.3-0.2,0.4-0.5,0.4-0.8V56.5c0-0.3-0.1-0.6-0.4-0.8
|
||||
c-0.3-0.2-0.6-0.3-0.9-0.3H20.8c-2.8,0-5.3-0.6-7.5-1.9c-2.3-1.2-4.1-2.9-5.5-4.9c-1.4-2.1-2.1-4.3-2.1-6.9V27.3
|
||||
c0-2.5,0.7-4.7,2.1-6.8c1.4-2.1,3.2-3.7,5.5-4.9c2.3-1.2,4.8-1.9,7.5-1.9h48c2.8,0,5.3,0.6,7.5,1.9c2.3,1.2,4.1,2.9,5.5,4.9
|
||||
c1.4,2.1,2.1,4.3,2.1,6.8v5.4H69.5v-4.8c0-0.3-0.1-0.6-0.4-0.8c-0.3-0.2-0.6-0.3-0.9-0.3H21.4c-0.4,0-0.7,0.1-0.9,0.3
|
||||
c-0.3,0.2-0.4,0.5-0.4,0.8v13.4c0,0.3,0.1,0.6,0.4,0.8c0.3,0.2,0.6,0.3,0.9,0.3h47.4c2.8,0,5.3,0.6,7.5,1.9
|
||||
c2.3,1.2,4.1,2.9,5.5,4.9c1.4,2.1,2.1,4.3,2.1,6.9v14.5c0,2.5-0.7,4.7-2.1,6.8c-1.4,2.1-3.2,3.7-5.5,4.9c-2.3,1.2-4.8,1.9-7.5,1.9
|
||||
H20.8z"/>
|
||||
<path d="M113.9,84c-2.8,0-5.3-0.6-7.5-1.9c-2.3-1.2-4.1-2.9-5.5-4.9c-1.4-2.1-2.1-4.3-2.1-6.8V27.3c0-2.5,0.7-4.7,2.1-6.8
|
||||
c1.4-2.1,3.2-3.7,5.5-4.9c2.3-1.2,4.8-1.9,7.5-1.9h48c2.8,0,5.3,0.6,7.5,1.9c2.3,1.2,4.1,2.9,5.5,4.9c1.4,2.1,2.1,4.3,2.1,6.8v43.2
|
||||
c0,2.5-0.7,4.7-2.1,6.8c-1.4,2.1-3.2,3.7-5.5,4.9c-2.3,1.2-4.8,1.9-7.5,1.9H113.9z M114.4,71h46.7c0.4,0,0.7-0.1,1-0.3
|
||||
c0.3-0.2,0.4-0.5,0.4-0.8v-42c0-0.3-0.1-0.6-0.4-0.8c-0.3-0.2-0.6-0.3-1-0.3h-46.7c-0.4,0-0.7,0.1-0.9,0.3
|
||||
c-0.3,0.2-0.4,0.5-0.4,0.8v42c0,0.3,0.1,0.6,0.4,0.8C113.8,70.9,114.1,71,114.4,71z"/>
|
||||
<path d="M192.3,84V13.6h14.3V71h63.8v13H192.3z"/>
|
||||
<path d="M280.2,27.3c0-2.5,0.7-4.7,2.1-6.8c1.4-2.1,3.2-3.7,5.5-4.9c2.3-1.2,4.8-1.9,7.5-1.9h47.9c2.8,0,5.3,0.6,7.6,1.9
|
||||
c2.3,1.2,4.2,2.9,5.5,4.9c1.4,2.1,2.1,4.3,2.1,6.8V84H344V60.4h-49.4V84h-14.3V27.3z M344,47.5V27.9c0-0.3-0.1-0.6-0.4-0.8
|
||||
c-0.3-0.2-0.6-0.3-1-0.3h-46.7c-0.4,0-0.7,0.1-0.9,0.3c-0.3,0.2-0.4,0.5-0.4,0.8v19.6H344z"/>
|
||||
<path d="M374.1,84V13.8h63c2.8,0,5.3,0.6,7.6,1.9c2.3,1.2,4.2,2.9,5.5,4.9c1.4,2.1,2.1,4.3,2.1,6.8v19c0,2.5-0.7,4.8-2.1,6.8
|
||||
c-1.4,2.1-3.2,3.7-5.5,4.9c-2.3,1.2-4.9,1.8-7.6,1.8L388.4,60v24H374.1z M389.7,46.9h46.7c0.4,0,0.7-0.1,1-0.3
|
||||
c0.3-0.2,0.4-0.5,0.4-0.8v-18c0-0.3-0.1-0.6-0.4-0.8c-0.3-0.2-0.6-0.3-1-0.3h-46.7c-0.4,0-0.7,0.1-0.9,0.3
|
||||
c-0.3,0.2-0.4,0.5-0.4,0.8v18c0,0.3,0.1,0.6,0.4,0.8C389,46.8,389.3,46.9,389.7,46.9z M436.4,84l-23.6-25.3h18.8L452,80.4V84H436.4
|
||||
z"/>
|
||||
<path d="M481.7,84c-2.8,0-5.3-0.6-7.5-1.9c-2.3-1.2-4.1-2.9-5.5-4.9c-1.4-2.1-2.1-4.3-2.1-6.8v-5.4h14.3v4.8c0,0.3,0.1,0.6,0.4,0.8
|
||||
c0.3,0.2,0.6,0.3,0.9,0.3H529c0.4,0,0.7-0.1,0.9-0.3c0.3-0.2,0.4-0.5,0.4-0.8V56.5c0-0.3-0.1-0.6-0.4-0.8c-0.3-0.2-0.6-0.3-0.9-0.3
|
||||
h-47.3c-2.8,0-5.3-0.6-7.5-1.9c-2.3-1.2-4.1-2.9-5.5-4.9c-1.4-2.1-2.1-4.3-2.1-6.9V27.3c0-2.5,0.7-4.7,2.1-6.8
|
||||
c1.4-2.1,3.2-3.7,5.5-4.9c2.3-1.2,4.8-1.9,7.5-1.9h48c2.8,0,5.3,0.6,7.5,1.9c2.3,1.2,4.1,2.9,5.5,4.9c1.4,2.1,2.1,4.3,2.1,6.8v5.4
|
||||
h-14.4v-4.8c0-0.3-0.1-0.6-0.4-0.8c-0.3-0.2-0.6-0.3-0.9-0.3h-46.8c-0.4,0-0.7,0.1-0.9,0.3c-0.3,0.2-0.4,0.5-0.4,0.8v13.4
|
||||
c0,0.3,0.1,0.6,0.4,0.8c0.3,0.2,0.6,0.3,0.9,0.3h47.4c2.8,0,5.3,0.6,7.5,1.9c2.3,1.2,4.1,2.9,5.5,4.9c1.4,2.1,2.1,4.3,2.1,6.9v14.5
|
||||
c0,2.5-0.7,4.7-2.1,6.8c-1.4,2.1-3.2,3.7-5.5,4.9c-2.3,1.2-4.8,1.9-7.5,1.9H481.7z"/>
|
||||
<path d="M574.9,84c-2.8,0-5.3-0.6-7.5-1.9c-2.3-1.2-4.1-2.9-5.5-4.9c-1.4-2.1-2.1-4.3-2.1-6.8V27.3c0-2.5,0.7-4.7,2.1-6.8
|
||||
c1.4-2.1,3.2-3.7,5.5-4.9c2.3-1.2,4.8-1.9,7.5-1.9h62.9v13H578c-1.2,0-2.1,0.3-2.8,0.9c-0.7,0.6-1,1.4-1,2.5v37.5
|
||||
c0,1,0.3,1.9,1,2.5c0.7,0.6,1.6,0.9,2.8,0.9h59.8v13H574.9z"/>
|
||||
<path d="M667.2,84c-2.8,0-5.3-0.6-7.5-1.9c-2.3-1.2-4.1-2.9-5.5-4.9c-1.4-2.1-2.1-4.3-2.1-6.8V27.3c0-2.5,0.7-4.7,2.1-6.8
|
||||
c1.4-2.1,3.2-3.7,5.5-4.9c2.3-1.2,4.8-1.9,7.5-1.9h48c2.8,0,5.3,0.6,7.5,1.9c2.3,1.2,4.1,2.9,5.5,4.9c1.4,2.1,2.1,4.3,2.1,6.8v43.2
|
||||
c0,2.5-0.7,4.7-2.1,6.8c-1.4,2.1-3.2,3.7-5.5,4.9c-2.3,1.2-4.8,1.9-7.5,1.9H667.2z M667.8,71h46.7c0.4,0,0.7-0.1,1-0.3
|
||||
c0.3-0.2,0.4-0.5,0.4-0.8v-42c0-0.3-0.1-0.6-0.4-0.8c-0.3-0.2-0.6-0.3-1-0.3h-46.7c-0.4,0-0.7,0.1-0.9,0.3
|
||||
c-0.3,0.2-0.4,0.5-0.4,0.8v42c0,0.3,0.1,0.6,0.4,0.8C667.1,70.9,667.4,71,667.8,71z"/>
|
||||
<path d="M745.5,84V13.8h63c2.8,0,5.3,0.6,7.6,1.9c2.3,1.2,4.2,2.9,5.5,4.9c1.4,2.1,2.1,4.3,2.1,6.8v19c0,2.5-0.7,4.8-2.1,6.8
|
||||
c-1.4,2.1-3.2,3.7-5.5,4.9c-2.3,1.2-4.9,1.8-7.6,1.8L759.8,60v24H745.5z M761.1,46.9h46.7c0.4,0,0.7-0.1,1-0.3
|
||||
c0.3-0.2,0.4-0.5,0.4-0.8v-18c0-0.3-0.1-0.6-0.4-0.8c-0.3-0.2-0.6-0.3-1-0.3h-46.7c-0.4,0-0.7,0.1-0.9,0.3
|
||||
c-0.3,0.2-0.4,0.5-0.4,0.8v18c0,0.3,0.1,0.6,0.4,0.8C760.5,46.8,760.8,46.9,761.1,46.9z M807.8,84l-23.6-25.3H803l20.4,21.7V84
|
||||
H807.8z"/>
|
||||
<path d="M838.6,84V13.7h72v13H853v15.6h46.3v13.1H853V71h57.5v13H838.6z"/>
|
||||
<path d="M925,84V13.7h63c2.8,0,5.3,0.6,7.6,1.9c2.3,1.2,4.2,2.9,5.5,4.9c1.4,2.1,2.1,4.3,2.1,6.8v43.2c0,2.5-0.7,4.7-2.1,6.8
|
||||
c-1.4,2.1-3.2,3.7-5.5,4.9c-2.3,1.2-4.9,1.9-7.6,1.9H925z M940.5,71h46.8c0.4,0,0.7-0.1,1-0.3c0.3-0.2,0.4-0.5,0.4-0.8v-42
|
||||
c0-0.3-0.1-0.6-0.4-0.8c-0.3-0.2-0.6-0.3-1-0.3h-46.8c-0.4,0-0.7,0.1-0.9,0.3c-0.3,0.2-0.4,0.5-0.4,0.8v42c0,0.3,0.1,0.6,0.4,0.8
|
||||
C939.8,70.9,940.1,71,940.5,71z"/>
|
||||
</g>
|
||||
<g class="st0">
|
||||
<path d="M752.5,111.3c2.6,0,4.7,0.2,6.2,0.6c1.5,0.4,2.7,1.1,3.3,2.1s1,2.4,1,4.3c0,1.9-0.4,3.4-1.2,4.4c-0.8,1-2.2,1.6-4,1.7v0.2
|
||||
c2.3,0.2,3.9,0.9,4.8,2.1c0.9,1.2,1.4,2.9,1.4,5c0,1.8-0.4,3.3-1.1,4.3c-0.7,1-1.8,1.7-3.3,2.1c-1.5,0.4-3.4,0.6-5.8,0.6
|
||||
c-1.9,0-3.6,0-5,0c-1.4,0-2.7,0-4-0.1c-1.2-0.1-2.4-0.1-3.7-0.2l0.6-4.1c0.7,0,2,0.1,4,0.1c2,0,4.3,0,6.9,0c1.2,0,2.2-0.1,2.9-0.3
|
||||
c0.7-0.2,1.2-0.6,1.4-1.1c0.3-0.6,0.4-1.4,0.4-2.4c0-1.1-0.1-2-0.4-2.5c-0.3-0.6-0.8-1-1.5-1.2s-1.7-0.4-2.9-0.4h-10.8v-3.8h10.7
|
||||
c1.1,0,1.9-0.1,2.5-0.3c0.6-0.2,1.1-0.5,1.3-1c0.3-0.5,0.4-1.2,0.4-2.2c0-1-0.1-1.7-0.4-2.2c-0.3-0.5-0.7-0.8-1.4-1
|
||||
c-0.7-0.2-1.6-0.3-2.8-0.3c-1.6,0-3,0-4.3,0c-1.2,0-2.3,0-3.3,0c-1,0-1.9,0-2.7,0.1l-0.6-4.1c1.2-0.1,2.3-0.2,3.3-0.2
|
||||
c1.1,0,2.3-0.1,3.5-0.1C749.4,111.3,750.8,111.3,752.5,111.3z M747.7,111.6v26.8h-6.5v-26.8H747.7z"/>
|
||||
</g>
|
||||
<g class="st0">
|
||||
<path d="M792.7,111.6l-10.1,18.3h-6.2l-10.1-18.3h6.9l5,9.9c0.3,0.5,0.5,1.1,0.6,1.7c0.2,0.6,0.3,1.2,0.5,1.7h0.4
|
||||
c0.2-0.5,0.3-1.1,0.5-1.7c0.2-0.6,0.4-1.2,0.6-1.7l5-9.9H792.7z M782.8,126.3v12.1h-6.6v-12.1H782.8z"/>
|
||||
</g>
|
||||
<g class="st0">
|
||||
<path d="M812.6,111.5c1.5,0,3.1,0,4.7,0c1.6,0,3.2,0.1,4.7,0.1c1.5,0.1,3,0.2,4.3,0.3l-0.3,4.3h-10.8c-0.8,0-1.4,0.2-1.8,0.5
|
||||
c-0.4,0.3-0.6,0.8-0.6,1.5v20.3h-6.6V117c0-1.7,0.6-3,1.8-4C809.1,112,810.7,111.5,812.6,111.5z M806.9,122.9h17.4v4.2h-17.4V122.9
|
||||
z"/>
|
||||
<path d="M838.1,111.6v20.1c0,0.6,0.2,1.1,0.6,1.5c0.4,0.3,1,0.5,1.7,0.5h10.4l0.3,4.5c-2,0.2-4.2,0.3-6.4,0.4
|
||||
c-2.2,0-4.5,0.1-6.7,0.1c-2.2,0-3.8-0.5-4.9-1.6s-1.7-2.4-1.7-4v-21.4H838.1z"/>
|
||||
<path d="M862.6,111.6v26.8H856v-26.8H862.6z"/>
|
||||
<path d="M881.3,111.2c2.8,0,5,0.3,6.6,0.8c1.6,0.5,2.7,1.4,3.4,2.7c0.7,1.3,1,3,1,5.3c0,2.3-0.3,4.1-1,5.3
|
||||
c-0.6,1.3-1.7,2.2-3.2,2.7c-1.5,0.5-3.5,0.8-6,0.8c-1.3,0-2.6-0.1-3.9-0.2c-1.3-0.1-2.4-0.2-3.5-0.4c-1.1-0.2-2-0.3-2.8-0.5
|
||||
s-1.3-0.3-1.6-0.5l0.1-3c1.7,0,3.5,0,5.3,0c1.8,0,3.6,0,5.4,0c1.2,0,2.1-0.2,2.7-0.4c0.6-0.2,1.1-0.7,1.4-1.3
|
||||
c0.3-0.6,0.4-1.5,0.4-2.6c0-1.1-0.1-2-0.4-2.6c-0.3-0.6-0.7-1.1-1.4-1.3s-1.5-0.4-2.7-0.4c-2.7,0-4.9,0-6.8,0
|
||||
c-1.9,0-3.2,0.1-3.8,0.2l-0.6-4.3c1.2-0.1,2.3-0.2,3.4-0.3c1.1-0.1,2.2-0.1,3.5-0.1C878,111.2,879.5,111.2,881.3,111.2z
|
||||
M876.5,111.6v26.8h-6.6v-26.8H876.5z"/>
|
||||
<path d="M907.7,111.1c1.5,0,3.1,0.1,4.8,0.2s3.4,0.4,5.1,0.9l-0.4,3.9c-1.3,0-2.8-0.1-4.5-0.1s-3.4,0-5,0c-0.8,0-1.5,0-2.1,0.1
|
||||
s-1,0.1-1.4,0.3c-0.3,0.2-0.6,0.4-0.7,0.8s-0.2,0.8-0.2,1.4c0,0.9,0.2,1.6,0.7,2c0.5,0.4,1.3,0.8,2.4,1.1l5.7,1.7
|
||||
c2.4,0.7,4,1.7,5,3c0.9,1.2,1.4,2.9,1.4,4.9c0,1.5-0.2,2.8-0.6,3.8c-0.4,1-1,1.8-1.9,2.4c-0.9,0.6-2,1-3.4,1.2
|
||||
c-1.4,0.2-3.1,0.4-5.2,0.4c-1,0-2.4-0.1-4.2-0.2s-3.9-0.4-6.2-0.9l0.4-4.2c1.7,0,3.2,0.1,4.4,0.1c1.3,0,2.3,0.1,3.2,0.1
|
||||
c0.9,0,1.7,0,2.3,0c1.2,0,2.1-0.1,2.7-0.2s1.1-0.4,1.4-0.8c0.3-0.4,0.4-0.9,0.4-1.7c0-0.6-0.1-1.1-0.3-1.5
|
||||
c-0.2-0.4-0.5-0.7-0.9-0.9s-1-0.4-1.7-0.6l-6.1-1.9c-2.3-0.8-3.9-1.7-4.8-3c-1-1.2-1.4-2.8-1.4-4.8c0-1.6,0.2-2.8,0.6-3.8
|
||||
c0.4-1,1.1-1.7,1.9-2.3c0.9-0.5,2-0.9,3.4-1.1S905.7,111.1,907.7,111.1z"/>
|
||||
<path d="M931,111.6v26.8h-6.6v-26.8H931z"/>
|
||||
<path d="M950,111.2c2.4,0,4.4,0.2,6,0.7c1.6,0.5,2.9,1.2,3.9,2.2c1,1,1.7,2.4,2.2,4.2c0.5,1.8,0.7,4,0.7,6.7c0,2.7-0.2,4.9-0.7,6.7
|
||||
c-0.5,1.8-1.2,3.2-2.2,4.2c-1,1-2.3,1.8-3.9,2.2s-3.6,0.7-6,0.7c-2.3,0-4.4,0-6.3-0.1c-1.9-0.1-3.7-0.2-5.4-0.3l2.8-4.4
|
||||
c1.1,0.1,2.4,0.1,3.9,0.1c1.5,0,3.2,0.1,5,0.1c1.5,0,2.6-0.3,3.5-0.8s1.5-1.5,1.8-2.8c0.4-1.3,0.5-3.2,0.5-5.6
|
||||
c0-2.4-0.2-4.3-0.5-5.6s-1-2.3-1.8-2.8c-0.8-0.5-2-0.8-3.5-0.8c-1.8,0-3.3,0-4.7,0c-1.4,0-2.7,0-4.1,0l-2.9-4.2
|
||||
c1.7-0.1,3.5-0.2,5.4-0.3C945.6,111.3,947.7,111.2,950,111.2z M944.9,111.6v26.8h-6.6v-26.8H944.9z"/>
|
||||
<path d="M975.2,111.5c1.6,0,3.2,0,4.9,0c1.6,0,3.3,0,4.8,0.1c1.6,0.1,3.1,0.1,4.5,0.3l-0.3,4.3h-11.5c-0.7,0-1.3,0.2-1.6,0.5
|
||||
c-0.4,0.3-0.5,0.8-0.5,1.5v13.7c0,0.6,0.2,1.1,0.5,1.5c0.4,0.3,0.9,0.5,1.6,0.5H989l0.3,4.3c-1.4,0.1-2.9,0.2-4.5,0.3
|
||||
c-1.6,0.1-3.2,0.1-4.8,0.1c-1.6,0-3.3,0-4.9,0c-1.9,0-3.4-0.5-4.6-1.5c-1.2-1-1.8-2.3-1.8-3.9v-16.3c0-1.6,0.6-2.9,1.8-3.9
|
||||
S973.3,111.5,975.2,111.5z M969.6,122.4h17.8v4.2h-17.8V122.4z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 9.1 KiB |
@ -1,12 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 24.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill-rule:evenodd;clip-rule:evenodd;fill:#7D86C1;}
|
||||
</style>
|
||||
<path class="st0" d="M8.9,18.7c2.6,0,5-1,6.8-2.8s2.8-4.3,2.8-6.8V8.6c0.7-0.5,1.2-1.1,1.7-1.7c-0.6,0.3-1.3,0.4-1.9,0.5
|
||||
C19,7,19.6,6.3,19.8,5.5c-0.7,0.4-1.4,0.7-2.1,0.8c-1-1.1-2.7-1.4-4.1-0.7S11.5,8,11.9,9.5C9.2,9.3,6.6,8,4.9,5.9
|
||||
C4,7.5,4.5,9.4,6,10.4c-0.5,0-1-0.2-1.5-0.4v0c0,1.6,1.1,3,2.7,3.3c-0.5,0.1-1,0.2-1.5,0.1c0.4,1.4,1.7,2.3,3.1,2.3
|
||||
c-1.2,1-2.7,1.5-4.2,1.5c-0.3,0-0.5,0-0.8-0.1C5.3,18.2,7.1,18.7,8.9,18.7"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 860 B |
BIN
apps/solana/solarscored/www/wheelSAMPLE.png
Normal file
|
After Width: | Height: | Size: 817 KiB |