Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cost models as list of integers #60

Closed
sourabhxyz opened this issue Sep 6, 2024 · 5 comments · Fixed by #59
Closed

Cost models as list of integers #60

sourabhxyz opened this issue Sep 6, 2024 · 5 comments · Fixed by #59

Comments

@sourabhxyz
Copy link
Contributor

sourabhxyz commented Sep 6, 2024

Currently it is newtype CostModels = CostModels { unCostModels :: Map ScriptType (Map Text Integer) }, I propose it to be newtype CostModels = CostModels { unCostModels :: Map ScriptType [(Text, Integer)] } since cost models are no longer ordered lexicographically. Attached is the cost models of PlutusV3 as returned by Blockfrost, and we notice that very last entry here starts with letter b. Current type definition makes one lose the ordering as original returned by Blockfrost.

"PlutusV3": {
      "addInteger-cpu-arguments-intercept": 100788,
      "addInteger-cpu-arguments-slope": 420,
      "addInteger-memory-arguments-intercept": 1,
      "addInteger-memory-arguments-slope": 1,
      "appendByteString-cpu-arguments-intercept": 1000,
      "appendByteString-cpu-arguments-slope": 173,
      "appendByteString-memory-arguments-intercept": 0,
      "appendByteString-memory-arguments-slope": 1,
      "appendString-cpu-arguments-intercept": 1000,
      "appendString-cpu-arguments-slope": 59957,
      "appendString-memory-arguments-intercept": 4,
      "appendString-memory-arguments-slope": 1,
      "bData-cpu-arguments": 11183,
      "bData-memory-arguments": 32,
      "blake2b_256-cpu-arguments-intercept": 201305,
      "blake2b_256-cpu-arguments-slope": 8356,
      "blake2b_256-memory-arguments": 4,
      "cekApplyCost-exBudgetCPU": 16000,
      "cekApplyCost-exBudgetMemory": 100,
      "cekBuiltinCost-exBudgetCPU": 16000,
      "cekBuiltinCost-exBudgetMemory": 100,
      "cekConstCost-exBudgetCPU": 16000,
      "cekConstCost-exBudgetMemory": 100,
      "cekDelayCost-exBudgetCPU": 16000,
      "cekDelayCost-exBudgetMemory": 100,
      "cekForceCost-exBudgetCPU": 16000,
      "cekForceCost-exBudgetMemory": 100,
      "cekLamCost-exBudgetCPU": 16000,
      "cekLamCost-exBudgetMemory": 100,
      "cekStartupCost-exBudgetCPU": 100,
      "cekStartupCost-exBudgetMemory": 100,
      "cekVarCost-exBudgetCPU": 16000,
      "cekVarCost-exBudgetMemory": 100,
      "chooseData-cpu-arguments": 94375,
      "chooseData-memory-arguments": 32,
      "chooseList-cpu-arguments": 132994,
      "chooseList-memory-arguments": 32,
      "chooseUnit-cpu-arguments": 61462,
      "chooseUnit-memory-arguments": 4,
      "consByteString-cpu-arguments-intercept": 72010,
      "consByteString-cpu-arguments-slope": 178,
      "consByteString-memory-arguments-intercept": 0,
      "consByteString-memory-arguments-slope": 1,
      "constrData-cpu-arguments": 22151,
      "constrData-memory-arguments": 32,
      "decodeUtf8-cpu-arguments-intercept": 91189,
      "decodeUtf8-cpu-arguments-slope": 769,
      "decodeUtf8-memory-arguments-intercept": 4,
      "decodeUtf8-memory-arguments-slope": 2,
      "divideInteger-cpu-arguments-constant": 85848,
      "divideInteger-cpu-arguments-model-arguments-c00": 123203,
      "divideInteger-cpu-arguments-model-arguments-c01": 7305,
      "divideInteger-cpu-arguments-model-arguments-c02": -900,
      "divideInteger-cpu-arguments-model-arguments-c10": 1716,
      "divideInteger-cpu-arguments-model-arguments-c11": 549,
      "divideInteger-cpu-arguments-model-arguments-c20": 57,
      "divideInteger-cpu-arguments-model-arguments-minimum": 85848,
      "divideInteger-memory-arguments-intercept": 0,
      "divideInteger-memory-arguments-minimum": 1,
      "divideInteger-memory-arguments-slope": 1,
      "encodeUtf8-cpu-arguments-intercept": 1000,
      "encodeUtf8-cpu-arguments-slope": 42921,
      "encodeUtf8-memory-arguments-intercept": 4,
      "encodeUtf8-memory-arguments-slope": 2,
      "equalsByteString-cpu-arguments-constant": 24548,
      "equalsByteString-cpu-arguments-intercept": 29498,
      "equalsByteString-cpu-arguments-slope": 38,
      "equalsByteString-memory-arguments": 1,
      "equalsData-cpu-arguments-intercept": 898148,
      "equalsData-cpu-arguments-slope": 27279,
      "equalsData-memory-arguments": 1,
      "equalsInteger-cpu-arguments-intercept": 51775,
      "equalsInteger-cpu-arguments-slope": 558,
      "equalsInteger-memory-arguments": 1,
      "equalsString-cpu-arguments-constant": 39184,
      "equalsString-cpu-arguments-intercept": 1000,
      "equalsString-cpu-arguments-slope": 60594,
      "equalsString-memory-arguments": 1,
      "fstPair-cpu-arguments": 141895,
      "fstPair-memory-arguments": 32,
      "headList-cpu-arguments": 83150,
      "headList-memory-arguments": 32,
      "iData-cpu-arguments": 15299,
      "iData-memory-arguments": 32,
      "ifThenElse-cpu-arguments": 76049,
      "ifThenElse-memory-arguments": 1,
      "indexByteString-cpu-arguments": 13169,
      "indexByteString-memory-arguments": 4,
      "lengthOfByteString-cpu-arguments": 22100,
      "lengthOfByteString-memory-arguments": 10,
      "lessThanByteString-cpu-arguments-intercept": 28999,
      "lessThanByteString-cpu-arguments-slope": 74,
      "lessThanByteString-memory-arguments": 1,
      "lessThanEqualsByteString-cpu-arguments-intercept": 28999,
      "lessThanEqualsByteString-cpu-arguments-slope": 74,
      "lessThanEqualsByteString-memory-arguments": 1,
      "lessThanEqualsInteger-cpu-arguments-intercept": 43285,
      "lessThanEqualsInteger-cpu-arguments-slope": 552,
      "lessThanEqualsInteger-memory-arguments": 1,
      "lessThanInteger-cpu-arguments-intercept": 44749,
      "lessThanInteger-cpu-arguments-slope": 541,
      "lessThanInteger-memory-arguments": 1,
      "listData-cpu-arguments": 33852,
      "listData-memory-arguments": 32,
      "mapData-cpu-arguments": 68246,
      "mapData-memory-arguments": 32,
      "mkCons-cpu-arguments": 72362,
      "mkCons-memory-arguments": 32,
      "mkNilData-cpu-arguments": 7243,
      "mkNilData-memory-arguments": 32,
      "mkNilPairData-cpu-arguments": 7391,
      "mkNilPairData-memory-arguments": 32,
      "mkPairData-cpu-arguments": 11546,
      "mkPairData-memory-arguments": 32,
      "modInteger-cpu-arguments-constant": 85848,
      "modInteger-cpu-arguments-model-arguments-c00": 123203,
      "modInteger-cpu-arguments-model-arguments-c01": 7305,
      "modInteger-cpu-arguments-model-arguments-c02": -900,
      "modInteger-cpu-arguments-model-arguments-c10": 1716,
      "modInteger-cpu-arguments-model-arguments-c11": 549,
      "modInteger-cpu-arguments-model-arguments-c20": 57,
      "modInteger-cpu-arguments-model-arguments-minimum": 85848,
      "modInteger-memory-arguments-intercept": 0,
      "modInteger-memory-arguments-slope": 1,
      "multiplyInteger-cpu-arguments-intercept": 90434,
      "multiplyInteger-cpu-arguments-slope": 519,
      "multiplyInteger-memory-arguments-intercept": 0,
      "multiplyInteger-memory-arguments-slope": 1,
      "nullList-cpu-arguments": 74433,
      "nullList-memory-arguments": 32,
      "quotientInteger-cpu-arguments-constant": 85848,
      "quotientInteger-cpu-arguments-model-arguments-c00": 123203,
      "quotientInteger-cpu-arguments-model-arguments-c01": 7305,
      "quotientInteger-cpu-arguments-model-arguments-c02": -900,
      "quotientInteger-cpu-arguments-model-arguments-c10": 1716,
      "quotientInteger-cpu-arguments-model-arguments-c11": 549,
      "quotientInteger-cpu-arguments-model-arguments-c20": 57,
      "quotientInteger-cpu-arguments-model-arguments-minimum": 85848,
      "quotientInteger-memory-arguments-intercept": 0,
      "quotientInteger-memory-arguments-slope": 1,
      "remainderInteger-cpu-arguments-constant": 1,
      "remainderInteger-cpu-arguments-model-arguments-c00": 85848,
      "remainderInteger-cpu-arguments-model-arguments-c01": 123203,
      "remainderInteger-cpu-arguments-model-arguments-c02": 7305,
      "remainderInteger-cpu-arguments-model-arguments-c10": -900,
      "remainderInteger-cpu-arguments-model-arguments-c11": 1716,
      "remainderInteger-cpu-arguments-model-arguments-c20": 549,
      "remainderInteger-cpu-arguments-model-arguments-minimum": 57,
      "remainderInteger-memory-arguments-intercept": 85848,
      "remainderInteger-memory-arguments-minimum": 0,
      "remainderInteger-memory-arguments-slope": 1,
      "serialiseData-cpu-arguments-intercept": 955506,
      "serialiseData-cpu-arguments-slope": 213312,
      "serialiseData-memory-arguments-intercept": 0,
      "serialiseData-memory-arguments-slope": 2,
      "sha2_256-cpu-arguments-intercept": 270652,
      "sha2_256-cpu-arguments-slope": 22588,
      "sha2_256-memory-arguments": 4,
      "sha3_256-cpu-arguments-intercept": 1457325,
      "sha3_256-cpu-arguments-slope": 64566,
      "sha3_256-memory-arguments": 4,
      "sliceByteString-cpu-arguments-intercept": 20467,
      "sliceByteString-cpu-arguments-slope": 1,
      "sliceByteString-memory-arguments-intercept": 4,
      "sliceByteString-memory-arguments-slope": 0,
      "sndPair-cpu-arguments": 141992,
      "sndPair-memory-arguments": 32,
      "subtractInteger-cpu-arguments-intercept": 100788,
      "subtractInteger-cpu-arguments-slope": 420,
      "subtractInteger-memory-arguments-intercept": 1,
      "subtractInteger-memory-arguments-slope": 1,
      "tailList-cpu-arguments": 81663,
      "tailList-memory-arguments": 32,
      "trace-cpu-arguments": 59498,
      "trace-memory-arguments": 32,
      "unBData-cpu-arguments": 20142,
      "unBData-memory-arguments": 32,
      "unConstrData-cpu-arguments": 24588,
      "unConstrData-memory-arguments": 32,
      "unIData-cpu-arguments": 20744,
      "unIData-memory-arguments": 32,
      "unListData-cpu-arguments": 25933,
      "unListData-memory-arguments": 32,
      "unMapData-cpu-arguments": 24623,
      "unMapData-memory-arguments": 32,
      "verifyEcdsaSecp256k1Signature-cpu-arguments": 43053543,
      "verifyEcdsaSecp256k1Signature-memory-arguments": 10,
      "verifyEd25519Signature-cpu-arguments-intercept": 53384111,
      "verifyEd25519Signature-cpu-arguments-slope": 14333,
      "verifyEd25519Signature-memory-arguments": 10,
      "verifySchnorrSecp256k1Signature-cpu-arguments-intercept": 43574283,
      "verifySchnorrSecp256k1Signature-cpu-arguments-slope": 26308,
      "verifySchnorrSecp256k1Signature-memory-arguments": 10,
      "cekConstrCost-exBudgetCPU": 16000,
      "cekConstrCost-exBudgetMemory": 100,
      "cekCaseCost-exBudgetCPU": 16000,
      "cekCaseCost-exBudgetMemory": 100,
      "bls12_381_G1_add-cpu-arguments": 962335,
      "bls12_381_G1_add-memory-arguments": 18,
      "bls12_381_G1_compress-cpu-arguments": 2780678,
      "bls12_381_G1_compress-memory-arguments": 6,
      "bls12_381_G1_equal-cpu-arguments": 442008,
      "bls12_381_G1_equal-memory-arguments": 1,
      "bls12_381_G1_hashToGroup-cpu-arguments-intercept": 52538055,
      "bls12_381_G1_hashToGroup-cpu-arguments-slope": 3756,
      "bls12_381_G1_hashToGroup-memory-arguments": 18,
      "bls12_381_G1_neg-cpu-arguments": 267929,
      "bls12_381_G1_neg-memory-arguments": 18,
      "bls12_381_G1_scalarMul-cpu-arguments-intercept": 76433006,
      "bls12_381_G1_scalarMul-cpu-arguments-slope": 8868,
      "bls12_381_G1_scalarMul-memory-arguments": 18,
      "bls12_381_G1_uncompress-cpu-arguments": 52948122,
      "bls12_381_G1_uncompress-memory-arguments": 18,
      "bls12_381_G2_add-cpu-arguments": 1995836,
      "bls12_381_G2_add-memory-arguments": 36,
      "bls12_381_G2_compress-cpu-arguments": 3227919,
      "bls12_381_G2_compress-memory-arguments": 12,
      "bls12_381_G2_equal-cpu-arguments": 901022,
      "bls12_381_G2_equal-memory-arguments": 1,
      "bls12_381_G2_hashToGroup-cpu-arguments-intercept": 166917843,
      "bls12_381_G2_hashToGroup-cpu-arguments-slope": 4307,
      "bls12_381_G2_hashToGroup-memory-arguments": 36,
      "bls12_381_G2_neg-cpu-arguments": 284546,
      "bls12_381_G2_neg-memory-arguments": 36,
      "bls12_381_G2_scalarMul-cpu-arguments-intercept": 158221314,
      "bls12_381_G2_scalarMul-cpu-arguments-slope": 26549,
      "bls12_381_G2_scalarMul-memory-arguments": 36,
      "bls12_381_G2_uncompress-cpu-arguments": 74698472,
      "bls12_381_G2_uncompress-memory-arguments": 36,
      "bls12_381_finalVerify-cpu-arguments": 333849714,
      "bls12_381_finalVerify-memory-arguments": 1,
      "bls12_381_millerLoop-cpu-arguments": 254006273,
      "bls12_381_millerLoop-memory-arguments": 72,
      "bls12_381_mulMlResult-cpu-arguments": 2174038,
      "bls12_381_mulMlResult-memory-arguments": 72,
      "keccak_256-cpu-arguments-intercept": 2261318,
      "keccak_256-cpu-arguments-slope": 64571,
      "keccak_256-memory-arguments": 4,
      "blake2b_224-cpu-arguments-intercept": 207616,
      "blake2b_224-cpu-arguments-slope": 8310,
      "blake2b_224-memory-arguments": 4,
      "integerToByteString-cpu-arguments-c0": 1293828,
      "integerToByteString-cpu-arguments-c1": 28716,
      "integerToByteString-cpu-arguments-c2": 63,
      "integerToByteString-memory-arguments-intercept": 0,
      "integerToByteString-memory-arguments-slope": 1,
      "byteStringToInteger-cpu-arguments-c0": 1006041,
      "byteStringToInteger-cpu-arguments-c1": 43623,
      "byteStringToInteger-cpu-arguments-c2": 251,
      "byteStringToInteger-memory-arguments-intercept": 0,
      "byteStringToInteger-memory-arguments-slope": 1
    }

Worth noting that cardano-ledger team in general recommends to keep cost models as list of integers.

sourabhxyz added a commit to sourabhxyz/blockfrost-haskell that referenced this issue Sep 6, 2024
@sourabhxyz
Copy link
Contributor Author

sourabhxyz commented Sep 6, 2024

Worked on by #61, PR is not yet ready.

@sourabhxyz
Copy link
Contributor Author

It seems this is impossible to achieve when working with Aeson, see haskell/aeson#368.

@sourabhxyz
Copy link
Contributor Author

I have reached out to BF to either provide a new endpoint to give order of cost model parameter names (per plutus language) or to give cost models as a list of integers instead.

@sorki
Copy link
Contributor

sorki commented Sep 11, 2024

Interesting! We decided to add cost_models_raw field to the response that is just a list without name mapping so this should be doable after a release

@sorki sorki reopened this Sep 11, 2024
@sourabhxyz
Copy link
Contributor Author

Thanks @sorki for the update! I included it in conway protocol-params PR (#59) and tested for it in Atlas, works perfectly!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
2 participants