【问题标题】:How to get the parameters passed to the transaction for the historical states如何获取历史状态的传递给事务的参数
【发布时间】:2019-12-05 11:56:23
【问题描述】:

我正在尝试获取负责新状态的操作。简而言之,我想获取传递给调用方法的函数名。当我查看历史状态时,我能够获取其值、时间戳、事务 ID 等,但不能获取负责该事务的参数。

我知道我们可以从区块历史中获取参数,但我需要它来处理状态。

有没有办法从链码方面实现这一点?

【问题讨论】:

    标签: hyperledger-fabric hyperledger-chaincode hyperledger-fabric-sdk-java


    【解决方案1】:

    是的,您可以从链码创建一个 Invoke 端点并执行以下操作:

    func (s *SmartContract) Invoke(APIstub shim.ChaincodeStubInterface) sc.Response {
    function, args := APIstub.GetFunctionAndParameters()
    }
    

    这里有你想要的一切。 例如,如果您打印 function,您将看到您调用的函数的名称。

    【讨论】:

    • 请检查问题,我需要历史状态的函数名
    【解决方案2】:

    我也想了解您的方法。然而,这将是我对此的看法,我们可以在我们的 sdk 中注册一个事件监听器(使用 registerChaincodeEvent 方法)并创建一个事件(使用 setEvent 方法)在我们的链码中,其中我们的有效负载将是 getFunctionAndParameters 方法的结果。您可能可以继续将这些结果存储到数据存储中,以便以后全部获取。

    或者:您可以简单地通过 shim.success 将 getFunctionAndParameters 的结果作为响应对象中的键发回。

    【讨论】:

    • 这是我的方法:1)我们将获取状态更改的交易 ID 2)找到包含交易的区块 3)从区块中获取参数
    • 对于第 1 步,如果我没记错的话,您可能已经根据 tx_id 使用 registerTxEvent 为每笔交易注册了一个事件?如果是,那么您可以尝试我为链码事件建议的方法
    • 不,我从状态本身获取 txID
    • 如果我没记错,那么您可能正在使用 getHistoryForKey。然后 [godoc.org/github.com/hyperledger/fabric-protos-go/ledger/… 是迭代器中每个对象的响应原型,因此我认为您无法从该 API 中获取它,恕我直言,我认为链码事件是您实现此目的的方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-12
    • 1970-01-01
    • 1970-01-01
    • 2013-06-29
    相关资源
    最近更新 更多