hyperledger / hyperledger/fabric-contract-api-go
JSON encode in golang fabric chaincode behavior
- Dominant language
- Go
- Stars
- 250
- Forks
- 111
- Avg merge
- 4h 48m
- Merged PRs (30d)
- 7
Description
I've seen several articles with similar errors, but none seems to work for me. I've seen the marbles samples, as well as many others, and still can't pinpoint the error.
I'm in fabric 2.x. The chaincode below works just fine when saving data, but fails when reading with the following message:
```bash
ERROR] Error submitting transaction: No valid responses from any peers. Errors:
peer=org1peer-api.127-0-0-1.nip.io:8080, status=500, message=Error handling success response. Value did not match schema:
1. return: Additional property field1 is not allowed
2. return: Additional property field2 is not allowed
3. return: field1,omitempty is required
4. return: field2,omitempty is required
```
```golang
type Asset struct {
Field1 string `json:"field1,omitempty"`
Field2 string `json:"field2,omitempty"`
}
func (c *AssetContract) CreateAsset(ctx contractapi.TransactionContextInterface, assetID string, values string) (bool, error) {
// convert json input to byte array
txData := []byte(values)
// convert byte array to HlpAsset struct
asset := new(asset)
err = json.Unmarshal(txData, &asset)
// convert struct back to bytes
txBytes, err := json.Marshal(asset)
return true, ctx.GetStub().PutState(assetID, txBytes)
}
func (c *AssetContract) ReadAsset(ctx contractapi.TransactionContextInterface, assetID string) (*Asset, error) {
txBytes, _ := ctx.GetStub().GetState(assetID)
// convert byte array to HlpAsset struct
asset := new(Asset)
err = json.Unmarshal(txBytes, &asset)
return asset, nil
}
```
testing with the following input data:
```json
assetID: "3",
values: "{\"field1\":\"123\",\"field2\":\"a05\"}"
```
I found this [question](https://stackoverflow.com/questions/64442488/how-do-to-with-fabric-chaincode-return-additional-property-records-is-not-allow) where this [bug](https://jira.hyperledger.org/browse/FABCAG-34) is mentioned:
> Supplying additional valid data in JSON tag of struct property causes schema to fail.
The bug has been closed for around a year, however, I still experience that behavior. Overriding the JSON property using `medatada` didn't work either.
Using the struct like this worked perfectly:
```go
type Asset struct {
Field1 string `json:"field1"`
Field2 string `json:"field2"`
}
```
Contributor guide
Assessment
This issue has not been assessed yet.