Key containing Decimal not returning contract
We are using the fetch endpoint in the json api to pull a contract by the key. It seems like when the key contains a record it doesn’t work . Below is the relevant parts. Is there a different way to pass a record in the query?
This works
"_4": {
"gender": "Female",
"riskClass": "EliteNonTobacco",
"state": null,
"coverageBand": null
}
This doesn’t
"_4": {
"gender": "Female",
"riskClass": "SubstandardTobacco",
"state": null,
"coverageBand": {
"min": "900000.0",
"max": null
}
}
Both match a key exactly as it shows in DAML hub on the contract. Thanks.
We did some more testing and it doesn’t seem like its the “coverageBand” that is the issue. It looks like its a issue with the decimal as we did a test contract with a key of a simple decimal and it still didn’t work so looking like its a bug with retrieving keys that are decimals.
It seems that there is a bug either on Daml Hub or in the JSON API in general, which causes the below problem when we have a decimal in the contract key and try to fetch the contract from Daml Hub. A query containing the same decimal works correctly.
With this simple contract, containing a simple decimal as key:
type AssetId = ContractId Asset
type Amount = Numeric 6
template Asset
with
issuer : Party
owner : Party
name : Text
amount : Amount
where
ensure name /= ""
signatory issuer
key (issuer, amount): (Party, Amount)
maintainer key._1
observer owner
choice Give : AssetId
with
newOwner : Party
controller owner
do create this with
owner = newOwner
on the ledger
{
"agreementText": "",
"contractId": "00da59a856ea12917b203a860b54bfbddbbfff8107b846fcd913490be00778821cca01122092d960b0a202a533c82a2883b78cca42d4a5d00a487cc5c9f2c419871e34e1f2",
"key": {
"_1": "ledger-party-28949341-d92b-431e-a837-76270fc1de7e::12207d012e8c20f05382642834ca2025bf06d5b647b364187966e26eb6921dc678f3",
"_2": "300000.0"
},
"observers": [],
"payload": {
"issuer": "ledger-party-28949341-d92b-431e-a837-76270fc1de7e::12207d012e8c20f05382642834ca2025bf06d5b647b364187966e26eb6921dc678f3",
"owner": "ledger-party-28949341-d92b-431e-a837-76270fc1de7e::12207d012e8c20f05382642834ca2025bf06d5b647b364187966e26eb6921dc678f3",
"name": "TV",
"amount": "300000.0"
},
"signatories": [
"ledger-party-28949341-d92b-431e-a837-76270fc1de7e::12207d012e8c20f05382642834ca2025bf06d5b647b364187966e26eb6921dc678f3"
],
"templateId": "a4dfe7d506543faf6776f44b6ce9e87725e5d1beb0ab135e9c55d453b06ce21b:Main:Asset"
}
for this fetch request:
{
"templateId": "a4dfe7d506543faf6776f44b6ce9e87725e5d1beb0ab135e9c55d453b06ce21b:Main:Asset",
"key": {
"_1": "ledger-party-28949341-d92b-431e-a837-76270fc1de7e::12207d012e8c20f05382642834ca2025bf06d5b647b364187966e26eb6921dc678f3",
"_2": "300000.0"
}
}
I also get the null response:
{
"result": null,
"status": 200
}
So it may be the case that the decimal in the key causes the problem, which seems to be a bug.
The query, containing the same decimal works:
{
"templateIds": ["a4dfe7d506543faf6776f44b6ce9e87725e5d1beb0ab135e9c55d453b06ce21b:Main:Asset"],
"query": {"amount": "300000.0"}
}