Mempool is the fully featured visualizer, explorer, and API service running on mempool.space, an open source project developed and operated for the benefit of the Bitcoin community, with a focus on the emerging transaction fee market to help our transition into a multi-layer ecosystem.
Mempool can be self-hosted on a wide variety of your own hardware, ranging from a simple one-click installation on a Raspberry Pi distro, all the way to an advanced high availability cluster of powerful servers for a production instance. We support the following installation methods, ranked in order from simple to advanced:
The following instructions are for a manual installation on Linux or FreeBSD. The file and directory paths may need to be changed to match your OS.
Clone the mempool repo, and checkout the latest release tag:
git clone https://github.com/mempool/mempool
cd mempool
latestrelease=$(curl -s https://api.github.com/repos/mempool/mempool/releases/latest|grep tag_name|head -1|cut -d '"' -f4)
git checkout $latestrelease
Enable RPC and txindex in bitcoin.conf
:
rpcuser=mempool
rpcpassword=71b61986da5b03a5694d7c7d5165ece5
txindex=1
Install MariaDB from OS package manager:
# Linux
apt-get install mariadb-server mariadb-client
# macOS
brew install mariadb
brew services start mariadb
Create database and grant privileges:
MariaDB [(none)]> drop database mempool;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> create database mempool;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> grant all privileges on mempool.* to 'mempool'@'%' identified by 'mempool';
Query OK, 0 rows affected (0.00 sec)
From the mempool repo's top-level folder, import the database structure:
mysql -u mempool -p mempool < mariadb-structure.sql
Install mempool dependencies from npm and build the backend:
# backend
cd backend
npm install
npm run build
In the backend
folder, make a copy of the sample config and modify it to fit your settings.
cp mempool-config.sample.json mempool-config.json
Edit mempool-config.json
to add your Bitcoin Core node RPC credentials:
{
"MEMPOOL": {
"NETWORK": "mainnet",
"BACKEND": "electrum",
"HTTP_PORT": 8999,
"API_URL_PREFIX": "/api/v1/",
"POLL_RATE_MS": 2000
},
"CORE_RPC": {
"USERNAME": "mempool",
"PASSWORD": "71b61986da5b03a5694d7c7d5165ece5"
},
"ELECTRUM": {
"HOST": "127.0.0.1",
"PORT": 50002,
"TLS_ENABLED": true,
},
"DATABASE": {
"ENABLED": true,
"HOST": "127.0.0.1",
"PORT": 3306,
"USERNAME": "mempool",
"PASSWORD": "mempool",
"DATABASE": "mempool"
},
"STATISTICS": {
"ENABLED": true,
"TX_PER_SECOND_SAMPLE_PERIOD": 150
}
}
Start the backend:
npm run start
When it's running you should see output like this:
Mempool updated in 0.189 seconds
Updating mempool
Mempool updated in 0.096 seconds
Updating mempool
Mempool updated in 0.099 seconds
Updating mempool
Calculated fee for transaction 1 / 10
Calculated fee for transaction 2 / 10
Calculated fee for transaction 3 / 10
Calculated fee for transaction 4 / 10
Calculated fee for transaction 5 / 10
Calculated fee for transaction 6 / 10
Calculated fee for transaction 7 / 10
Calculated fee for transaction 8 / 10
Calculated fee for transaction 9 / 10
Calculated fee for transaction 10 / 10
Mempool updated in 0.243 seconds
Updating mempool
Install mempool dependencies from npm and build the frontend static HTML/CSS/JS:
# frontend
cd frontend
npm install
npm run build
Install the output into nginx webroot folder:
sudo rsync -av --delete dist/mempool /var/www/
Install the supplied nginx.conf and nginx-mempool.conf in /etc/nginx
# install nginx and certbot
apt-get install -y nginx python-certbot-nginx
# install the mempool configuration for nginx
cp nginx.conf nginx-mempool.conf /etc/nginx/
# replace example.com with your domain name
certbot --nginx -d example.com
If everything went okay you should see the beautiful mempool
If you get stuck on "loading blocks", this means the websocket can't connect.Check your nginx proxy setup, firewalls, etc. and open an issue if you need help.
ceph mempool 与广义上的内存池不同,ceph自己实现的内存池并不用于管理内存,而是用于追踪内存 看一下源码中的注释描述翻译 /*******/ 内存池 内存池是一种计算内存消耗的方法 一套容器。 内存池是静态声明的,详见pool_index_t。 每个内存池跟踪其包含的字节数和项数。 可以声明分配器并将其与类型关联,以便独立于池总数来跟踪它们。这项附加计数是可选的,只有在运行时启用调试
前言 dpdk-16.04 中,使用 rte_mempool_create 与 rte_pktmbuf_pool_create 都可以创建出支持多生产者与多消费者的 pktmbuf pool。 rte_mempool_create 创建 pktmbuf pool 示例代码如下: pool = rte_mempool_create("MBUF_POOL", nb_mbuf_per_pool, MBU
前言:DPDK提供了内存池机制,使得内存的管理的使用更加简单安全。在设计大的数据结构时,都可以使用mempool分配内存,同时,mempool也提供了内存的获取和释放等操作接口。对于数据包mempool甚至提供了更加详细的接口-rte_pktmbuf_pool_create(),接下来重点分析通用的内存池相关内容。使用DPDK-17.02版本。 一. mempool的创建 内存池的创建使用的接口是
头文件:lib/librte_mempool/rte_mempool.h 创建内存池 struct rte_mempool * rte_mempool_create(const char *name, unsigned n, unsigned elt_size, unsigned cache_size, unsigned private_data_size,
目录 MEMPOOL(librte_mempool,Memory Pool Manager,内存池管理组件) MEMPOOL 库提供了一组 API,用于从指定的 Memzone 中分配 Memory Pools 空间。相较于 MALLOC 库用于控制面处理逻辑,MEMPOOL 库则是用于数据面处理逻辑(配合 MBUF 库)。 MEMPOOL 库提供了以下特性: 预分配内存:在 Mempool 初始
本文转载自登链社区,原网址https://learnblockchain.cn/article/3263 一、以太坊内存池是什么 我们知道以太坊是目前最大的公链,它是一个去中心化的数据库,与传统数据库有一个很大的区别是,以太坊的数据并没有一个主动写入的过程。所谓数据上链,其实是用户发起一笔交易,并携带相关信息。这些相关信息可以是调用智能合约某些函数和相关参数。然后这笔交易会广播到全网节点,其他节点
应用 遍历mempool中的每一个元素 查看mempool的相关接口的使用范例 # 参见 DPDK 源码的 dpdk/test/test/test_mempool.c 文件。 static int test_mempool(void) { int ret = -1; struct rte_mempool *mp_cache = NULL; struct rte_mempool *mp_no
一、什么是内存池 内存池是一组以太坊交易,这些交易已经广播到网络并等待被挖掘成一个区块。内存池服务提供对交易生命周期的直接洞察。交易被用户广播到节点后,在内存池中等待。从那里,交易将被挖掘到一个区块中,被另一个交易取代,或者被网络丢弃。一个好的内存池服务将为您监控现有的每笔交易的这个过程。您可以在此处了解有关内存池的更多信息。(Mastering the Mempool: Your Int
内核 mempool 的使用 内核给我们提供了内存管理的一套方式,你只要把申请好的内存池交给mempool管理, 并且提供申请和释放内存的接口, mempool就可以帮你管理这个内存池,而且这个机制支持 设置内存预留,防止在内存紧张的时候,一直分不到内存。 1、mempool_create 创建一个mempool管理的内存池。 mempool_t *mempool_create(int min_n
dpdk mempool的逻辑 -v0.1 2020.10.30 Sherlock init dpdk里有块内存池的支持,用户可以调用相关接口创建固定block大小的内存池,然后从这 个内存池里申请和释放内存。 这个内存池叫做rte_mempool, 相关的实现代码在dpdk/lib/librte_mempool/*. dpdk里 提供了rte_mempool相关的测试app,在这个地方app/t
数组 && rte_ring && mempool 结合 数组的优缺点 优点: 知道数组,以及数组的下标,可以O(1)查找到元素。 缺点: 数组中的元素增删,会导致数组有空闲,且不知道哪个位置空闲。 rte_ring 可以利用 rte_ring 来保存数组的所有下标。 从rte_ring中取一个元素,作为数组的下标,添加一个item到数组中。 从数组中删除item,则只需要将这item的下标再释放
我刚才在想两个线程同时访问一个函数有没有问题 看到这个我就放心了 其实你可以这样想,函数本身只是代码,代码是只读的,无论多少个线程同时调都无所谓(因为只读嘛)。但是函数里面总要用到数据, 如果数据属于线程(比如函数参数、局部变量,存在栈上,每个线程都有自己的栈),那么同时调还是没关系,因为用的本线程的数据;但是如果用了一些全局数据,比如全局变量,同时操作一个数据结构(如对一个链表有什么操作),那就
腾讯笔试题,设计内存池,alloc和free都是O(1)。 和LRUCache类似,这里用了一个list表示可用的空间,用一个map来记录这块内存是否已分配,这样free的时候才可能O(1)。 1 class MemPool { 2 public: 3 void init(int unitSize, int maxUnitNum) { 4 l
之前在网上看过一篇文章:C51单片机动态内存分配; 尝试文章里的方法分配内存;出现了一些问题,在这里写出来共同分析一下; 1 1.1 静态数组定义 /********************************************************************************************************/ /* 系统随机分配一个数组,
void *mempool_alloc(mempool_t *pool, gfp_t gfp_mask)从形参pool中申请内存 其源码分析如下: void *mempool_alloc(mempool_t *pool, gfp_t gfp_mask) { void *element; unsigned long flags; wait_queue_entry_t wait; gfp_t
1: /* 2: * File : mempool.c 3: * This file is part of RT-Thread RTOS 4: * COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team 5: * 6: * This program is free softw
问题 出现以下编译错误, /media/data/lib/libbacktrace.so: undefined reference to mempool_init' /media/data/lib/libbacktrace.so: undefined reference tomempool_free’ /media/data/lib/libbacktrace.so: undefined refer
内存池 Mempool 是位于内存的缓冲区,那些等待执行的交易便保存于此。 概述 准入控制(AC)模块将交易发送到内存池。在共识提交之前,内存池将交易保留一段时间。添加新交易时,内存池会与系统中的其他验证器(验证程序节点)共享此交易。内存池是“共享的”,因为各个内存池之间的交易都与其他验证器共享。这有助于维护伪全局的排序(pseudoglobal ordering)。 当验证器从另一个内存池接收交
老规矩,先上图。 内存池的作用简而言之就是为了保存从其他peer或者自身受到的还未被打包的交易。 我们看一下mempool的文件夹。 所以我们关注的内存池的源码其实只有mempool.go和reactor.go文件。 从源文件名称应该可以看出来MemPool的成员方法是在mempool.go文件中, 和peer信息信息的交互应该是在reactor.go文件中的。 在mempool.go文件中看到这
Channels See this issue Mempool maintains a cache of the last 10000 transactions to prevent replaying old transactions (plus transactions coming from other validators, who are continually exchanging t
P2P Messages There is currently only one message that Mempool broadcasts and receives over the p2p gossip network (via the reactor): TxMessage // TxMessage is a MempoolMessage containing a transaction
The mempool maintains a list of potentially valid transactions, both to broadcast to other nodes, as well as to provide to the consensus reactor when it is selected as the block proposer. There are tw
Here we describe configuration options around mempool. For the purposes of this document, they are described as command-line flags, but they can also be passed in as environmental variables or in the
Look at the concurrency model this uses... Receiving CheckTx Broadcasting new tx Interfaces with consensus engine, reap/update while checking Calling the ABCI app (ordering. callbacks. how proxy works