Etherscan API 数据不一致

Posted

技术标签:

【中文标题】Etherscan API 数据不一致【英文标题】:Etherscan API inconsistent data 【发布时间】:2021-12-13 01:08:06 【问题描述】:

我遇到了从 Etherscan API 返回的数据的问题。我正在使用两个端点:

(1) 按地址划分的正常交易

https://api.etherscan.io/api?module=account&action=txlist

(2) Erc721 Transaction by Address

https://api.etherscan.io/api?module=account&action=tokennfttx

地址:0x0b8f4c4e7626a91460dac057eb43e0de59d5b44f Txhash:0x6b2103201b968e5ad9a26041127080c4969b10191c8ad94082980487d6fbd9aa

--> 铸造事件

我在调用 (2) 时可以看到这个交易,但是这个端点没有传递转移的价值。我曾经通过调用 (1) 并遍历列表并匹配 tx 哈希来获取值,但它没有列出。在 Etherscan 上,您可以看到转移值为 0.05 Eth (https://etherscan.io/tx/0x6b2103201b968e5ad9a26041127080c4969b10191c8ad94082980487d6fbd9aa) 的铸币事件。但是这些信息是从哪里来的呢?如何找到转移的价值?


现在是另一个有效的例子:

地址:0xB2Ebc9b3a788aFB1E942eD65B59E9E49A1eE500D Txhash:0x57ece5c8b9f040f43faac83a68883a5324f2ef6d36ad0018dc6813a0c851ff74

调用(2)时可以看到交易,调用(1)时也可以看到匹配的tx hash

非常感谢任何支持和提示!

【问题讨论】:

【参考方案1】:

txlist 端点 (docs) 返回发送fromto 指定地址的本机事务 列表。但它不考虑代币转移

由于0x6b... 交易,发出了几个Transfer() 事件日志(表示代币转移、铸造或销毁的标准化方式),其中一个包含0x0b... 地址作为其参数之一(特别是作为令牌接收者)。

但是,本机事务没有发送到fromto 0x0b... 地址。这就是它没有在端点中返回的原因。


在您的第二个示例中,0x57... 本机事务实际上是从0xB2... 地址发送的。这就是它包含在 txlist 端点响应中的原因。

它还包含Transfer() 事件日志,向同一个0xB2... 地址发出令牌铸币信号,但这是不重要的因素。如果令牌被转移到任何其他地址或根本没有转移,它不会有任何区别(与txlist 端点相关)。

【讨论】:

嗨!感谢您的回答。仍然难以理解。无论如何我都会奖励你,因为你做出了努力,而且听起来是正确的。 :) 对于本地交易,您的意思是 ETH 从一个帐户转移到另一个帐户?在这两种情况下,都会发送特定数量的 ETH。还有,我在哪里可以通过查看上面链接的事务详细信息页面上的 etherscan 来区分某些内容是在本机事务级别发送的,而不是什么?在我看来两者都一样 本地交易是指黄皮书中定义的以太坊(网络,而非货币)交易(在引入智能合约和代币之前)。它可以有 ETH value(如您的情况),但该值也可以为零。它还可以包含data 字段,表明如果接收者是智能合约,则执行什么功能,并且它可能导致发出事件日志(通过智能合约)信号令牌传输。本机交易对象在签名之前的示例(通过发送方私钥):eth.wiki/json-rpc/API#eth_sendtransaction 在本机 tx 级别发送的内容 - 请参阅上一个链接。例如,任何 ETH value...另一方面,任何Transfer() 事件日志都是由于接收合约正在处理的事务而产生的...。示例transaction 来自您的问题:FromInteracted With (To)Value 是事务的字段。 Transaction ActionTokens Transferred 是根据 data 字段和事件日志计算的结果(在 tx 被合约处理之后)。 啊,好吧,这更有意义。我想避免解码输入数据,但这可能是最有意义的。因此,在我的问题中描述的第一个案例中,我只能从编码的输入数据中获取交易的价值,否则我将如何获得它?在端点 (2) 中,我只能看到发生了什么,但对这个铸币事件没有任何价值。

以上是关于Etherscan API 数据不一致的主要内容,如果未能解决你的问题,请参考以下文章

通过 Dataflow Java API 返回客户端的不一致 BigQuery 数据类型

dubbo的服务consumer与provider使用的api版本不一致,是否有影响

YouTube iFrame API 行为不一致/不确定

接近 API 的不一致行为 - iOS iBeacon

Google 登录 API:isSignedIn.get() 返回不一致的值

opendaylight:不一致的 api 响应