区块构建者的主要责任是将Mempool中的交易与搜索者构建的盈利捆绑包相结合并发送给验证人客户端。在本文中,我将指导您通过 SQL 索引以太坊的链上数据来获取并且计算区块构建者的收入数据。
作者:masterdai
区块构建者(Block Builder)的主要职责是将 Mempool 中的交易与搜索者构建的盈利捆绑包相结合并发送给验证人客户端。当一个用户发起一笔交易时,首先会进入公共内存池,如果这是一笔普通的交易,那就会在等待一段时间之后被区块构建者放入其创造的区块中、如果这是一笔被搜索者盯上的交易,在进入内存池之后会以捆绑包的形式进入区块中。再经过中继层、最终被区块提议者签署证明并将其广播到网络。
搜索者在内存池中寻找能够捕获利益的交易,将这一笔交易打捞起来并与自身创建的交易组合并且放入捆绑包中。搜索者获得的利润会直接进入其钱包内,而为了让这笔交易能够被区块构建者打包入区块,搜索者需要支付一笔的手续费给区块构建者(通过 gas 或者 coinbase transfer)。
本文将指导您通过 SQL 索引以太坊的链上数据来获取并且计算区块构建者的收入数据。
让我们以一个具体的区块为例,区块号为 17419900。您可以在 Ethscan 网站上搜索它,并通过该区块的额外数据(extra data)或费用接收方交易(fee recipient)来识别其区块构建者。显然,此区块是由 Flashbots Builder 生产的。
在区块构建者负责的区块末尾,区块构建者还会奖励提议该区块的验证者。在本例中,flashbots-builder.eth 向验证者的地址发送了0.1919321 个以太币,作为 MEV-boost 奖励和区块构建者的成本。
区块构建者的收入分为两部分。第一部分是区块奖励,通过从交易费中减去燃烧费用来计算。在本例中,金额为 0.18263526 个以太币。第二部分是验证者直接支付给区块构建者的款项。搜索者可以选择直接向区块构建者支付一定数量的以太币。这种行为通常通过区块内部交易来实现。
我们可以通过以下公式来计算出区块构建者的收入:
区块构建者的利润=交易费用(gas)+搜索者支付手续费-销毁的gas费用-区块构建者给验证人的费用(成本)
示例:0x9ba88D 向 flashbots-builder.eth 转移了 0.012998 个以太币。
这意味着在该区块中,Flashbots builder 的利润为:
0.18263526 + 0.012998 - 0.1919321 = 0.00370116个以太币
区块构建者会采用一系列策略以争夺市场的优势地位。其中一种常见策略便是提供补贴:区块构建者有时愿意将自身的操作成本降低,甚至不惜让区块的收入暂时呈现为负值,目的是为了获得更大的市场份额。Delphi Digital的文章提到了 0x69 作为例子,他们成功地为大部分区块提供补贴,同时仍然获得利润。值得注意的是,他们在某些特定区块中实现了显著的盈利。例如,在区块 16067709 中,他们获取了 76 个以太币的利润;而在区块 16067699 中,他们则实现了更为可观的 139 个以太币的利润。这种策略性地使用补贴的方法,实质上是一种精准而激进的市场占领策略。在区块构建者的环境中,竞争格局往往呈现出“赢者通吃”的特点。尽管每一个区块的利润空间可能相对较薄,但通过持续且高效的操作,构建者们依然有可能累积出可观的总收益。
若您希望批量分析与以太坊区块构建者相关的数据,可使用以下查询语句,检索每个区块中记录的最后一笔转账交易。此查询语句能够精准识别并选取每个以太坊区块的最新交易。
with
indexs as (
select
block_number,
max(transaction_index) as transaction_index
from
ethereum.transactions
where
block_timestamp > '2023-06-01'
group by
block_number
)
select
block_number,
block_timestamp,
from_address,
to_address,
value / 1e18 as ETH,
input
from
ethereum.transactions
where
(block_number, transaction_index) in (
select
*
from
indexs
)
and input = '0x'
order by
block_number desc
indexs
的临时数据集。该数据集包含两列:block_number
和transaction_index
。它是通过查看ethereum.transactions
表,并选择每个唯一block_number
的最高transaction_index
来创建的。只考虑block_timestamp
晚于'2023-06-01'的行。indexs
中的数据按block_number
进行分组。如果需要更加久远的历史数据,可通过更改block_timestamp
来实现。ethereum.transactions
表中检索了特定信息。它选择了以下列作为输出:block_number
,block_timestamp
,from_address
,to_address
,Revenue
(计算为value/1e18
),以及input
。ethereum.transactions
表中的行:
block_number
和transaction_index
的组合应与indexs
集中的值匹配。这确保只包含具有匹配的block_number
和transaction_index
值的行。input
列中的值应完全为'0x',代表这是一笔转账交易。block_number
按降序排列结果。这意味着输出将按照最高的block_number
到最低的进行排序。简单来说,这个查询从ethereum.transactions
表中检索了特定的信息。首先创建了一个临时数据集,用于识别某个日期之后每个block_number
的最高transaction_index
。然后,它从表中选择所需的列,根据与block_number
,transaction_index
和input
值相关的条件过滤行,并最终按照block_number
的降序对结果进行排序。
以下是 Chainbase Data Cloud 的查询结果展示.
通过这样的sql命令,您就可以筛选出每一个区块末尾的以太坊转账交易即区块构建者的收益。
您还可以使用以下代码将区块数据导入Excel。
运行npm install axios
和npm install exceljs
以安装所需的依赖项。
将您的 SQL 查询和在我们的文档中生成的任务 ID 放入查询行。
const axios = require('axios');
const excel = require('exceljs');
const options = {
method: 'POST',
url: '<https://api.chainbase.online/v1/dw/query>',
headers: {
accept: 'application/json',
'x-api-key': '您的API-key', //确保注册chainbase账户并且在控制台获取api-key
'content-type': 'application/json',
},
data: {
task_id: 'xxxxxxx',
page: 1,
query: '您的SQL查询' // https://console.chainbase.com/dataCloud
},
};
const workbook = new excel.Workbook();
const worksheet = workbook.addWorksheet('Data');
// 添加标题
worksheet.addRow(['区块编号', '区块时间戳', '源地址', '目标地址', '以太币', '输入']);
async function fetchData(page) {
options.data.page = page;
try {
const response = await axios.request(options);
if (response.data && response.data.data && Array.isArray(response.data.data.result)) {
const data = response.data.data.result;
for (const row of data) {
worksheet.addRow([
row.block_number,
row.block_timestamp,
row.from_address,
row.to_address,
row.ETH,
row.input,
]);
}
if (response.data.data.meta && response.data.data.meta.next_page) {
const nextPage = response.data.data.meta.next_page;
return fetchData(nextPage); // 返回Promise以确保按顺序获取
} else {
return true; // 表示已获取所有页面
}
} else {
console.error('无效的响应数据:', response.data);
return false; // 表示发生错误
}
} catch (error) {
console.error(error);
return false; // 表示发生错误
}
}
async function fetchAllData() {
let currentPage = 1;
const totalPages = 3; // 设置要获取的页面总数
while (currentPage <= totalPages) {
const success = await fetchData(currentPage);
if (!success) {
console.error('获取数据时发生错误。终止。');
return;
}
currentPage++;
}
await workbook.xlsx.writeFile('chainbaseData.xlsx');
console.log('Excel文件创建成功。');
}
fetchAllData();
在终端中运行命令 node <filename>.js
,即可生成对应的Exlcel 文件。当然,您也可以根据需要导入到自己的数据库中进行进一步的分析。
在这个例子下,笔者选择了最近的 3000 个区块的交易并计算出了区块构建者的市场份额。
区块构建者 | 目标地址数量 | 以太币总和 |
---|---|---|
0x95222290dd7278aa3ddd389cc1e1d165cc4bafe5 | 717 | 110.2250996 |
0x1f9090aae28b8a3dceadf281b0f12828e676c326 | 644 | 77.75061889 |
0x690b9a9e9aa1c9db991c7721a92d351db4fac990 | 536 | 75.93068564 |
0xdafea492d9c6733ae3d56b7ed1adb60692c98bc5 | 362 | 34.08247563 |
0xb4c9e4617a16be36b92689b9e07e9f64757c1792 | 120 | 9.349838553 |
0xbaf6dc2e647aeb6f510f9e318856a1bcd66c5e19 | 64 | 13.3957448 |
0xfeebabe6b0418ec13b30aadf129f5dcdd4f70cea | 49 | 9.565605888 |
0x4838b106fce9647bdf1e7877bf73ce8b0bad5f97 | 30 | 2.632173092 |
0xce0babc8398144aa98d9210d595e3a9714910748 | 30 | 1.829768113 |
0x5124fcc2b3f99f571ad67d075643c743f38f1c34 | 26 | 0.893549901 |
0xbd3afb0bb76683ecb4225f9dbc91f998713c3b01 | 18 | 8.954708645 |
0x17d3c369932e200eab7264eca79e3f72a3f3d563 | 16 | 0.030609463 |
通过深入分析以太坊区块相关的数据,我们可以从 Chainbase Data Cloud 的以太坊的交易表中检索到特定的重要信息。这些精准的数据允许我们筛选出当前收入最高的区块构建者地址以及其对应的验证人地址,并将这些信息有效地导入到 Excel 中。这样的分析不仅能够助我们清晰地识别不同区块构建者的市场份额,还可以潜在地揭示出具有较高盈利潜力的区块。
精准计算区块收入对于深入了解 MEV(Miner Extractable Value)在供应链网络中区块构建者的盈利潜力具有至关重要的意义。
Chainbase是 Web3 的一体化数据基础设施,可让您在大规模上索引、转换和使用链上数据。 通过利用丰富的链上数据和流计算技术,Chainbase 自动化了区块链数据的索引和查询,使开发者能够在更少的工作量下完成更多工作。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!