const getPopup = async () => {
try {
const url = apis.runtime.getURL('/prompt.html');
// Notifications get bound differently depending on browser
// as Firefox does not support opening windows from background.
if(typeof browser !== 'undefined') {
const created = await apis.windows.create({
url,
height,
width,
type:'popup'
});
window.notification = notification;
return created;
}
else {
const win = window.open(url, 'ScatterPrompt', `width=${width},height=${height},resizable=0,top=${middleY},left=${middleX},titlebar=0`);
win.data = notification;
openWindow = win;
return win;
}
} catch (e) {
console.log('notification error', e);
return null;
}
}您正在查看: Surou 发布的文章
ScatterWebExtension popup window
EOS节点数据备份
简介
最近在做eos数据落盘的项目,遇到了很多场景,都需要备份数据。所以,今天跟大家分享下备份节点数据的小工具。
前言
eos节点非正常退出,甚至节点升级,都会意外导致脏数据的产生,节点数据不得不重新同步。官方给的数据重新同步方法,是用下面的命令重启节点:
nodeos --hard-replay
不过,实际使用起来会发现replay数据执行的非常慢,普通的全节点也要两天时间才能完成重新同步。归根结底,还是eos节点数据的验证机制导致的慢。具体原因,大家可以看看这篇文章:痛苦的EOS数据同步,可能的EOS安全隐患。
简而言之,eos之所有不能像以太坊那样做到快速同步,是因为eos没有将状态数据生成merkle root,存储上链。所以,eos重新同步数据时,节点不能信任其他节点,只能重新执行一遍交易,亲自验证交易状态,当然会极大影响同步速度。另外,节点的同步只能从创世块开始,不能按照时间分片,同步相当于重新计算一遍全网交易,速度可想而知。
数据同步
eos的节点数据是存储在data目录的,data目录里有blocks和state目录,分别存储区块信息和状态信息:
mac os:~/Library/Application\ Support/eosio/nodeos/data
Linux:~/.local/share/eosio/nodeos/data
因为eos数据是按文件形式存储的,常用的备份方法是将data目录整个拷贝一份,当数据坏了时,启用备用data目录,则节点会从备用data目录的高度开始,再同步之后的数据。这个方法简单,但是普通的全节点,不开history-plugin时数据30G+,开启history-plugin数据可达500G。简单的cp操作处理备份,显然需要数小时不等,还是太慢。
pitreos工具
pitreos是加拿大超级节点 eos canada 出品的节点数据备份工具,项目地址:pitreos。
它实现了大文件的快速备份和恢复。以下是30G大文件备份和恢复的实测效果,备份和恢复处理时间各约30s,极大的提升了效率。
- 生成30G大文件

- 备份30G大文件,时间约30s

- 查看备份tag

- 恢复备份,时间约30s

pitreos安装步骤
1. 需要安装golang、设置gopath
2. cd $GOPATH/src/github.com/eoscanada
3. git clone https://github.com/eoscanada/pitreos.git
4. cd $GOPATH/src/github.com/eoscanada/pitreos && go get -v ./... && go install -v
pitreos常用命令
备份:pitreos backup ./mydata -t <备份tag>。备份文件默认存在:$HOME/.pitreos/backups
恢复:pitreos -c restore <备份tag> ./mydata。
查询tag:pitreos list
EOS合约内查询代币余额
#include <eosiolib/eosio.token.hpp> // right path to eosio.token.hpp file
void getBalance(account_name owner){
eosio::token t(N(eosio.token));
const auto sym_name = eosio::symbol_type(S(4,EOS)).name();
const auto my_balance = t.get_balance(N(owner), sym_name );
eosio::print("My balance is ", my_balance);
}
EOS 合约内获取块号(block number)
int tapos_block_num();
int tapos_block_prefix();
最新回复
fzd: 请问这个解决了吗
StarkWare explained: layer 2 solution provider of dYdX and iMMUTABLE R11; BitKeep News: [...]Layer 2: https://...
一文读懂 StarkWare:dYdX 和 Immutable 背后的 L2 方案 R11; BitKeep 博客: [...]Layer 2:Comparing Laye...
http://andere.strikingly.com/: Regards, Great stuff!
surou: 需要先执行提案合约申请,等待出块节点地址同意后,才会进...
heco: WARN [11-19|11:26:09.459] N...
P: 你好,我在heco链上遇到了“tx fee excee...
Peng: 楼主安装成功了吗?我正在同步区块链,一天了,差不多才同...
joyhu: 你好,请问下安装好之后如何获取到bee.yaml配置文...
kaka: 支票最终怎么提币呢?
归档
January 2026December 2025November 2025October 2025September 2025August 2025July 2025June 2025May 2025April 2025March 2025February 2025January 2025December 2024November 2024October 2024September 2024August 2024July 2024June 2024May 2024April 2024March 2024January 2024December 2023November 2023October 2023September 2023August 2023July 2023June 2023April 2023March 2023February 2023January 2023December 2022November 2022October 2022August 2022July 2022June 2022May 2022March 2022February 2022January 2022December 2021November 2021October 2021September 2021August 2021July 2021June 2021May 2021April 2021March 2021February 2021January 2021December 2020November 2020October 2020September 2020July 2020June 2020May 2020April 2020March 2020February 2020January 2020December 2019November 2019October 2019September 2019August 2019July 2019June 2019May 2019April 2019March 2019February 2019January 2019December 2018November 2018October 2018September 2018August 2018July 2018June 2018