← Home
如果您对枯燥的数据获取和数据清洗部分不感兴趣,请直接阅读 数据分析;如果您想获取处理好的数据自行分析,请下载 sia-79701,该数据以 1% 系统取样至 79701 区块。
Sia 官网有公开数据,网址为 https://explore.sia.tech/,不过只有当前区块的数据。需要通过查询每一区块的信息获得历史信息。
网站数据由 js 生成的,需要安装 phantomjs 来提取数据。速度较慢,因此按 1% 系统取样的方法获得数据,即从区块 1 到 2016 年 11 月 25 日的区块 79795 中,每间隔 100 取一个区块。
采用 R 语言的 rvest
包抓取数据。
比较奇怪的一点是,区块高度为 35001 的区块信息页面加载很慢,导致该数据缺失。
library(rvest)
# 只需要改动 to 后面的区块高度和间隔 by 即可
Height <- seq(from = 1, to = 79795, by = 100)
URL <- as.vector(paste0("https://explore.sia.tech/block.html?height=", Height))
Sia <- list(length = length(Height))
j <- 1
for(i in URL){
writeLines(sprintf("var page = require('webpage').create();
page.open('%s', function () {
console.log(page.content); //page source
phantom.exit();
});", i), con="scrape.js")
system("phantomjs scrape.js > scrape.html")
Web <- read_html("scrape.html")
Sia[[j]] <- as.vector(html_text(html_nodes(Web, "tr .stats-info")))[1:13]
print(Sys.time())
print(i)
j <- j+1
}
Sia <- t(as.data.frame(Sia))
Sia <- data.frame(Sia)
row.names(Sia) <- Height
names(Sia) <- c("Height", "ID", "Parent","Time", "Difficulty", "Hashrate",
"Total", "Contracts", "Cost", "Proofs", "MinerID",
"Address", "Value")
write.csv(Sia, "sia.csv", row.names = F)
主要涉及时间格式转换、用正则表达式格式化数据和数据类型转化,还涉及少量的单位转换。
Sia <- read.csv("sia.csv")
Sia_d <- Sia[, c(-2, -3, -11, -12)]
library(stringr)
library(lubridate)
# 时间处理
Time <- as.data.frame(str_split(Sia_d$Time, ",", simplify = T))
Mon <- as.data.frame(str_split(Time$V2, " ", simplify = T))
Mon2 <- match(Mon[[2]], month.abb)
Day <- Mon$V3
Year <- Time$V3
Time <- Time$V1
S_time <- str_c(Year, Mon2, Day, sep = "-")
S_time <- str_c(S_time, Time, sep = " ")
S_time <- ymd_hm(S_time)
Sia_d$Time <- S_time
# 数据格式化和数据转换
Water <- function(x){
as.numeric(gsub("\D", "", x))
}
Sia_d$Height <- Water(Sia_d$Height)
Sia_d$Difficulty <- Water(Sia_d$Difficulty)
Sia_d$Hashrate <- Water(Sia_d$Hashrate)
Sia_d$Total <- Water(Sia_d$Total)
Sia_d$Total[1:34] <- Sia_d$Total[1:34] / 10000000
Sia_d$Total <- Sia_d$Total / 10
Sia_d$Contracts <- Water(Sia_d$Contracts)
Sia_d$Cost <- Water(gsub("\D", "", Sia_d$Cost))
Sia_d$Proofs <- Water(Sia_d$Proofs)
Sia_d$Value <- Water(Sia_d$Value)
挖矿难度
首先看哈希率估计值和挖矿难度。两者其实是一个概念,均表示挖矿难度。Sia 要保证每十分钟产生一个区块,因此每个矿工获得该区块的概率就与全网算力呈反比,哈希率估计值就可以作为矿工投入总量的指标。
library(ggplot2)
ggplot(Sia_d) +
geom_line(aes(Time, Hashrate)) +
scale_x_datetime(date_breaks = "1 month") +
xlab("日期") +
ylab("哈希率估计值") +
ggtitle("Sia 挖矿难度") +
theme_grey(base_family = "STKaiti") +
theme(axis.text.x = element_text(angle = 60, vjust = 0.5))
如图,从 2016 年 6 月份开始,挖矿投入持续上升,而且在七月初有大户入场,在十月中下旬达到最高峰。而在十一月上旬,全网算力恢复到七月初的水平,而随后又开始飙升。
这幅图说明了什么,首先,十月中下旬的暴跌说明这个 Sia 挖矿只有有限的几个玩家,而且其中一名挖矿者至少有全网算力的一半以上,这种断崖式下跌是该玩家退场或者中场休息的结果。
随着挖矿难度的上升,矿工套现的压力也越大,因此从七月份以后,Sia Coin 的价格持续下跌。矿工套现离场应该是一个重要因素。
合约分析
令人异常费解的是,合约数量四月中下旬达到最高峰,现在回落到几乎为零的水平。而 1.0 版本六月才发布,那么这之前的两万多合约数是怎么回事呢?换句话说,1.0 版本的发布没有带来任何新的合约。
这幅图的信息最有用吧,从这幅图,我们知道,起码到目前为止,根本没人在用 Sia 存储。
ggplot(Sia_d) +
geom_line(aes(Time, Contracts)) +
scale_x_datetime(date_breaks = "1 month") +
xlab("日期") +
ylab("活跃合约数量") +
ggtitle("Sia 合约数") +
theme_grey(base_family = "STKaiti") +
theme(axis.text.x = element_text(angle = 60, vjust = 0.5))
如果再看看全部存储合约所消耗的 sc,与上图的合约数量完全不对应。sc 消耗在六月和十月分别有一次跃迁,单在这两个时间里,合约数量却没有显著增长,有可能是有两个大户入场了……
无法获得总文件大小的数据,不过记得之前一直保持在 26T,现在是 27T,看来是有个大户入场的。一个 T 的数据居然也成了大户。整个 Sia 的数量已经达到 207 亿,而存储消耗的 sc 只有 3160 万,千分之一点五而已。
ggplot(Sia_d) +
geom_line(aes(Time, Cost)) +
scale_x_datetime(date_breaks = "1 month") +
xlab("日期") +
ylab("合约消耗 Sia 数量") +
ggtitle("合约消耗 Sia 数量") +
theme_grey(base_family = "STKaiti") +
theme(axis.text.x = element_text(angle = 60, vjust = 0.5))
之所以做这样一个分析,是想做一个尝试。假想自己是一个 VC,现在你怎样给一个区块链技术公司估值,是否要买入这家公司的股票。鉴于区块链技术与生俱来的数据开放性特征,非常适合这一尝试。
目前 sia 价格异常低,但是在挖矿难度上却有一个反弹,至少说明大佬们还没有放弃投资。
从开发团队的 GitHub 的 commit 情况上看,八月份之后团队对 sia 本身提交补丁的数量显著减少,说明 sia 本身已经比较完善。而八月九月团队主要在开发 Sia-Ant-Farm。
以当前价格 0.00172 人民币和当前数量 207 亿计算,总价值 3572 万,而当前合约价格几乎为零(前面分析只占 0.15%)。在短期内,团队还没有死掉的迹象。因此,如果有下一轮融资,可能会有一个短暂的拉升,但是抛售离场得多,拉升空间很小,而且高位时间很短。
对于短期投资者来说,精准预测下一轮融资时间并在最低价位入场是个关键。而对长期投资者来说,前面还是茫茫黑夜。
在设想做一个区块链的估值指标体系,如同标准普尔,甚至做一个类似债券评级的评估方法,感兴趣的可以发邮件交流: