NEAR 交易没有收据但有收据_结果

2024-04-02

查询时档案节点 https://archival-rpc.mainnet.near.org与交易EXPERIMENTAL_tx_status方法,有些交易没有receipts当有receipts_outcome。这怎么可能,该交易与其他交易有何不同?

如果我理解正确的话receipts_outcome是申请的结果receipts。根据explorer https://explorer.near.org/transactions/7beNxrbHxMRspJWT9NeEVwx719kVcmY9tRdPG9SYro26,本次交易有Convert Transaction To Receipt部分,所以应该会生成一些收据。

根据文档 https://docs.near.org/docs/concepts/transaction#transaction-processing

收据是系统中唯一可操作的对象。当我们谈论 NEAR 平台上的“处理交易”时,这最终意味着在某个时刻“应用收据”。

一个好的心智模型是将收据视为要在目的地(接收者)执行的付费消息。而Transaction就是外部发出创建Receipt的请求(存在1对1的关系)。

My query

{
  "jsonrpc": "2.0",
  "id": "2",
  "method": "EXPERIMENTAL_tx_status",
  "params": ["7beNxrbHxMRspJWT9NeEVwx719kVcmY9tRdPG9SYro26", "bumbleee99.near"]
}

Response

{
    "jsonrpc": "2.0",
    "result": {
        "status": {
            "SuccessValue": ""
        },
        "transaction": {
            "signer_id": "bumbleee99.near",
            "public_key": "ed25519:DFM5GRGbpNkk4XkhcFnRUFeKG8a3nzTH8NwZp754pC48",
            "nonce": 59080995000003,
            "receiver_id": "bumbleee99.near",
            "actions": [
                {
                    "AddKey": {
                        "public_key": "ed25519:CUoNs153GHrPZ9F8HpvhzFr1mwuUFUdGQsRNE2CTNjVH",
                        "access_key": {
                            "nonce": 0,
                            "permission": "FullAccess"
                        }
                    }
                }
            ],
            "signature": "ed25519:15v34qoyCHSvSL5uLcaPqD9vXvjcPrCaZVStCMms8e58C62z2UHiazwUXzHajPEgdHpwn7s4J9dd5UPmtvzbYgM",
            "hash": "7beNxrbHxMRspJWT9NeEVwx719kVcmY9tRdPG9SYro26"
        },
        "transaction_outcome": {
            "proof": [
                {
                    "hash": "ECKDm5FVhzit7Wqs9sEyBB9NtuTrVRZmWwcxkkg2yUh4",
                    "direction": "Right"
                },
                {
                    "hash": "E4VXdwsNj3fZCbP6y9YH3M5oZHPDcdArqU9kbZJa95Qp",
                    "direction": "Right"
                }
            ],
            "block_hash": "ASY6HgDUQUXUa99L7dPEfghKEnEk5SNkwQrx24u3Fobz",
            "id": "7beNxrbHxMRspJWT9NeEVwx719kVcmY9tRdPG9SYro26",
            "outcome": {
                "logs": [],
                "receipt_ids": [
                    "JDnBrxh6L9KFgVUEg6U8d39rEUEmbvLQ5tZQUmJTMyFJ"
                ],
                "gas_burnt": 209824625000,
                "tokens_burnt": "20982462500000000000",
                "executor_id": "bumbleee99.near",
                "status": {
                    "SuccessReceiptId": "JDnBrxh6L9KFgVUEg6U8d39rEUEmbvLQ5tZQUmJTMyFJ"
                },
                "metadata": {
                    "version": 1,
                    "gas_profile": null
                }
            }
        },
        "receipts_outcome": [
            {
                "proof": [
                    {
                        "hash": "8RwCWE9HgqenPKv8JW9eg2iSLMaQW82wvebYSfjPbdTY",
                        "direction": "Left"
                    },
                    {
                        "hash": "E4VXdwsNj3fZCbP6y9YH3M5oZHPDcdArqU9kbZJa95Qp",
                        "direction": "Right"
                    }
                ],
                "block_hash": "ASY6HgDUQUXUa99L7dPEfghKEnEk5SNkwQrx24u3Fobz",
                "id": "JDnBrxh6L9KFgVUEg6U8d39rEUEmbvLQ5tZQUmJTMyFJ",
                "outcome": {
                    "logs": [],
                    "receipt_ids": [],
                    "gas_burnt": 209824625000,
                    "tokens_burnt": "20982462500000000000",
                    "executor_id": "bumbleee99.near",
                    "status": {
                        "SuccessValue": ""
                    },
                    "metadata": {
                        "version": 1,
                        "gas_profile": []
                    }
                }
            }
        ],
        "receipts": []
    },
    "id": "2"
}

你可以看到两者transaction_outcome.outcome.receipt_ids and transaction_outcome.outcome.status指着一张带有 ID 的收据JDnBrxh6L9KFgVUEg6U8d39rEUEmbvLQ5tZQUmJTMyFJ。我尝试使用以下命令查询节点有关此收据的信息EXPERIMENTAL_receipt像这样的方法

{
  "jsonrpc": "2.0",
  "id": "2",
  "method": "EXPERIMENTAL_receipt",
  "params": {"receipt_id": "JDnBrxh6L9KFgVUEg6U8d39rEUEmbvLQ5tZQUmJTMyFJ"}
}

但节点返回错误,表明没有给定 ID 的收据

{
    "jsonrpc": "2.0",
    "error": {
        "name": "HANDLER_ERROR",
        "cause": {
            "name": "UNKNOWN_RECEIPT",
            "info": {
                "receipt_id": "JDnBrxh6L9KFgVUEg6U8d39rEUEmbvLQ5tZQUmJTMyFJ"
            }
        },
        "code": -32000,
        "message": "Server error",
        "data": {
            "name": "UNKNOWN_RECEIPT",
            "info": {
                "receipt_id": "JDnBrxh6L9KFgVUEg6U8d39rEUEmbvLQ5tZQUmJTMyFJ"
            }
        }
    },
    "id": "2"
}

TL;DR 收据是本地收据


您的示例中的交易很简单AddKey发送者是接收者的操作(记住这一点,这很重要)

  1. “执行”交易(指将交易转换为收据)
  2. 应用收据

由于交易转换为收据的结果是您的transaction_outcome

"outcome": {
  "receipt_ids": [
    "JDnBrxh6L9KFgVUEg6U8d39rEUEmbvLQ5tZQUmJTMyFJ"
  ],
  "status": {
    "SuccessReceiptId": "JDnBrxh6L9KFgVUEg6U8d39rEUEmbvLQ5tZQUmJTMyFJ"
  },

这张收据即将被应用,并且predecessor_idreceiver_id是平等的。在nearcore此类收据称为当地收据(先生 - 发送者是接收者)并且这些收据不存储在nearcore数据库。

我们在 NEAR Indexer Framework 端模拟它们 https://github.com/near/nearcore/blob/808d9343db79919911f87b332b0fbea0926b7f49/chain/indexer/src/streamer/mod.rs#L107-L116(这就是为什么你可以看到收据 JDnBrxh6L9KFgVUEg6U8d39rEUEmbvLQ5tZQUmJTMyFJNEAR Explorer交易详情页面)

并且因为nearcore不会将此类收据存储在您获得的数据库中UNKNOWN_RECEIPT来自 RPC。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NEAR 交易没有收据但有收据_结果 的相关文章

随机推荐