实现自定义VSCC以基于ChaincodeProposalPayload进行验证

时间:2017-08-11 17:12:03

标签: hyperledger-fabric

我正在尝试实现自定义VSCC(验证系统Chaincode),以根据FunctionName和有效负载数据(ChaincodeProposalPayload)添加一些额外的逻辑。目前我能够从ChaincodeActionPayload获取ChaincodeProposalPayload,但数据似乎是编码的。 以下是我正在使用的代码。

    // args[0] - function name (not used now)
// args[1] - serialized Envelope
// args[2] - serialized policy

args := stub.GetArgs()
// get the envelope...
env, err := utils.GetEnvelopeFromBlock(args[1])
if err != nil {
    logger.Errorf("VSCC error: GetEnvelope failed, err %s", err)
    return shim.Error(err.Error())
}

// ...and the payload...
payl, err := utils.GetPayload(env)
if err != nil {
    logger.Errorf("VSCC error: GetPayload failed, err %s", err)
    return shim.Error(err.Error())
}

// ...and the transaction...
tx, err := utils.GetTransaction(payl.Data)
if err != nil {
    logger.Errorf("VSCC error: GetTransaction failed, err %s", err)
    return shim.Error(err.Error())
}

// loop through each of the actions within

fmt.Println(len(tx.Actions))
for _, act := range tx.Actions {
    cap, err := utils.GetChaincodeActionPayload(act.Payload)
    if err != nil {
        logger.Errorf("VSCC error: GetChaincodeActionPayload failed, err %s", err)
        return shim.Error(err.Error())
    }

    fmt.Println("payload " + string(cap.ChaincodeProposalPayload))
}

在控制台中,Payload打印为编码字符串,如

mycc 调用 一个 b 10

如何将有效负载正确解码为json?

1 个答案:

答案 0 :(得分:3)

这样的事情应该有效:

function PostData()
{
    var _data = JSON.stringify({ value : { FirstName: "ABC", LastName: "XYZ" } });
    $.ajax({
        url: "http://localhost:57786/api/values",
        type: "POST",
        contentType: "application/json",
        data: _data,
        success: function (data) {
            alert("Success");
        },
        error: function (error) {
            alert("Error");
        }
    });
}