DeFi 与 TradFi 的区别不在于它们做什么(转移价值、发放信贷、定价风险),而在于谁持有账本、谁能撤销交易以及损失如何吸收。TradFi 依赖受监管的中介和法律追索;DeFi 依赖智能合约、公开状态和自托管,这将风险从机构失败转移到代码和市场失败。本文构建两种系统的思维模型,然后提供可运行的 RPC 流程来测量 DeFi 行为,如结算时间、流动性深度和合约升级权限。将你收集的每个数字视为自己的测量结果,而非基准,并在得出结论前使用可靠的 RPC 层。
范围与核心区别
DeFi 与 TradFi 的对比通常被框定为去中心化与中心化之争,但这种框架掩盖了对开发者和分析师至关重要的操作差异。更有用的维度是:谁维护权威账本、谁能撤销交易、以及失败时谁吸收损失。TradFi 将权威记录保存在受监管机构和结算系统内部;DeFi 将其保存在公开区块链状态中,任何人都可以读取,任何拥有密钥的人都可以修改。
本文涵盖四个层面:托管、结算、信贷与流动性以及风险。然后展示如何通过标准 JSON-RPC 调用测量 DeFi 侧行为,使比较基于观察到的数据而非营销声明。具体端点选择不在本文范围内;请参阅 RPC 助手关于选择 Web3 RPC 提供商的指南。
- TradFi:许可制参与、法律最终性、机构托管。
- DeFi:无需许可参与、概率性或经济最终性、自托管。
- 两者:价格发现、信贷扩展、抵押品管理和费用提取。
假设与前提条件
以下流程假设你拥有一个 EVM 兼容网络的 HTTP JSON-RPC 端点、一个带有 curl 的 shell,以及可选的 Node.js 或 Python 用于多调用示例。将 RPC_URL 替换为你自己的端点;切勿将生产密钥粘贴到共享脚本中。如需具有速率限制和多链路由的托管访问,请参阅 OnFinality API 服务和 RPC 定价。
你还应知道正在查询哪条链。合约地址、出块时间和最终性假设因网络而异;支持的网络目录列出了可用网络。如果你需要可预测的吞吐量进行重复测量,专用节点可消除公共端点引入的噪声邻居效应。
托管与权威账本
在 TradFi 中,你在银行的余额是该银行内部账本记录的负债。你并不持有底层资产;你持有的是债权,银行的偿付能力和存款保险制度决定你的真实风险。在 DeFi 中,你的余额是公开合约存储中的一个条目。你持有密钥,合约代码决定你可以用余额做什么。
这种差异改变了故障模式。TradFi 托管失败是机构和法律事件,通过处置机制和保险解决。DeFi 托管失败通常是密钥管理或合约逻辑事件,没有对手方可申诉。实际含义:在 DeFi 中,存款前验证合约行为是托管的一部分,而非单独的审计步骤。
结算、最终性与可逆性
TradFi 结算是批量化和中介化的。信用卡支付、电汇或证券交易通过清算成员和中央证券存管机构结算,具有明确的撤销窗口和拒付规则。最终性是法律上的:一旦结算周期完成且相关法律适用,即使底层数据库在技术上可被编辑,转账也被视为最终。
DeFi 结算是连续且公开的。交易被打包进区块,然后随着更多区块在其上产生而获得经济最终性。可逆性仅通过共识重组或某些系统中的明确治理操作存在。测量上的后果是“已结算”是一个分布,而非布尔值:你应记录打包时间和确认深度,而不是假设即时最终性。
- 记录打包时和 N 个确认时的区块时间戳。
- 与链上文档化的最终性规则比较,而非通用数字。
- 将重组风险视为链和确认深度的函数,而非常数。
信贷、流动性以及谁承担损失
TradFi 信贷创造通过受监管的资产负债表进行:银行发放贷款、持有资本以应对风险,并受到监管。损失由资本吸收,然后在保险限额内由存款人吸收,最后由处置当局吸收。DeFi 信贷通过超额抵押池和借贷市场进行:借款人提供抵押品,当抵押率下降时清算人平仓,损失由存款人承担,在某些设计中由后备或保险基金承担。
这使得 DeFi 流动性深度和清算行为可以以 TradFi 信贷无法做到的方式进行测量。你可以直接从合约状态读取池储备、利用率和清算阈值。权衡是 DeFi 信贷资本效率低(超额抵押)且面临预言机和清算机制失败风险,而 TradFi 信贷资本效率高但对观察者不透明。
使用 JSON-RPC 测量 DeFi 结算时间
以下流程记录交易的打包时间和确认深度。这是你自己运行的测量;输出取决于链和你查询的时刻,因此不要将任何单一结果视为基准。多次运行并报告分布。
首先,获取交易及其收据,然后获取当前区块号以计算深度:
- 从收据中提取 blockNumber 并与最新区块号比较。
- 使用 eth_getBlockByNumber 获取区块以读取其时间戳。
- 定期重复以观察深度随时间增长。
curl -s -X POST "$RPC_URL" -H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"eth_getTransactionReceipt","params":["0xYOUR_TX_HASH"]}'
curl -s -X POST "$RPC_URL" -H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":2,"method":"eth_blockNumber","params":[]}'测量合约升级权限和管理员风险
DeFi 中一种在 TradFi 中没有同等形式的中心化风险是升级权限:代理管理员或治理多签可以在你存款后更改合约逻辑。你可以直接检查这一点。读取 EIP-1967 代理的实现槽并检查谁控制管理员。
下面的代码片段使用 eth_getStorageAt 读取实现槽和管理员槽。将返回的地址与项目发布的治理文档进行比较;不匹配是一个发现,不一定是失败。
const RPC_URL = process.env.RPC_URL;
const PROXY = "0xYOUR_PROXY_ADDRESS";
const IMPL_SLOT = "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc";
const ADMIN_SLOT = "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103";
async function slot(slotHex) {
const res = await fetch(RPC_URL, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
jsonrpc: "2.0", id: 1, method: "eth_getStorageAt",
params: [PROXY, slotHex, "latest"]
})
});
const json = await res.json();
return "0x" + json.result.slice(-40);
}
(async () => {
console.log("implementation:", await slot(IMPL_SLOT));
console.log("admin:", await slot(ADMIN_SLOT));
})();结果表及其填写方法
使用如下表格记录你自己的观察结果。在测量之前将单元格留空;不要将其他来源的值复制到结果表中,因为链上条件和合约部署会变化。该表是模板,而非一组发现。
| 指标 | 方法 | 你的值 | 备注 |
|---|---|---|---|
| 打包区块 | eth_getTransactionReceipt | ||
| 打包时间戳 | eth_getBlockByNumber | ||
| 查询时深度 | 最新区块减去打包区块 | ||
| 实现地址 | eth_getStorageAt (EIP-1967 槽) | ||
| 管理员地址 | eth_getStorageAt (管理员槽) | ||
| 池储备 | 合约读取 (例如 balanceOf) | ||
| 利用率 | 借出 / 供应 |
通过在同一链和时间窗口运行本文中的流程来填写表格。如果你比较两个池或两条链,保持查询方法不变,以便差异反映系统而非你的工具。
验证与预期观察
运行结算流程后,你应该看到收据的 blockNumber 稳定,并且随着新区块到达,计算的深度单调增加。如果深度减少,你可能在查询不同的端点或发生了重组;针对单一端点重新查询,并将端点标识与结果一起记录。
运行存储槽流程后,你应该看到代理合约的实现地址非零,并且管理员地址与项目文档化的控制器匹配。代理上的管理员槽为零本身就是一个值得调查的发现,因为它可能表示未初始化或非标准的代理模式。
排查不一致的测量结果
DeFi 测量不一致的最常见原因是端点不一致:不同的 RPC 提供商可能提供略有不同的链头,因此对两个端点的“latest”查询可能不一致。每次测量运行固定一个端点,并记录其标识。如果你需要一致的多链读取,托管的多链层(如多链 RPC 端点指南中所述)可减少此类错误。
第二个常见原因是调用之间合约状态变化。通过向 eth_call 和 eth_getStorageAt 传递显式区块号而非“latest”,在同一区块读取相关值。第三个是速率限制:公共端点可能静默限流,返回过时或错误响应。如果你看到间歇性失败,请检查 RPC 可靠性指南并考虑使用专用节点进行可重复运行。
- 每次运行固定一个端点并记录其 URL。
- 使用显式区块号以保证多调用一致性。
- 通过重新查询同一哈希来区分重组和端点分歧。
比较的局限性与权衡
这种比较是结构性的,而非裁决。TradFi 提供法律追索、存款保险和成熟的信贷市场,代价是不透明和中介化。DeFi 提供透明度、可组合性和自托管,代价是代码风险、预言机风险和不可逆错误。这两种属性并非普遍更好;正确选择取决于在给定用例中你更看重追索权还是可验证性。
测量也有局限。链上数据显示合约做了什么,而非为什么,并且无法捕捉可能支持代币化资产的链下法律安排。将链上指标视为一个输入,并将其与文档审查以及相关情况下的审计报告结合。
开发者和分析师的后续步骤
如果你正在构建 DeFi 集成,首先映射合约的升级权限和预言机依赖,然后在你打算使用的链上测量结算和流动性行为。如果你正在分析 DeFi 与 TradFi 的边界,将测量扩展到代币化现实世界资产和稳定币储备,这两个系统在这些领域日益重叠。
对于生产工作负载,从临时公共端点迁移到托管或专用 RPC 层,以便你的测量和应用程序看到一致的链头。在承诺之前,请查看 OnFinality API 服务、RPC 定价和专用节点选项,并咨询 RPC 助手获取具体端点建议,而不是从公共列表中猜测。