Closed adamczykm closed 2 years ago
Let me write the path I would follow for this tomorrow, please help me to correct it if needed.
@Luis-omega I can answer some of these questions
query
field is currentProtocolParameters
ProtocolParameters
newEnvIO
, you should make the Ogmios query and parse the response to get the protocol parameters. You'll also need to add a command-line flag for the Ogmios host/portAh here's another thing: you should probably implement some retry logic. Websocket connections can be kind of tricky
@ngua do you think that we could make use of overriding pparams locally?
@adamczykm What would be the use-case for that?
Idk. Maybe for some hacky workarounds and tests during debugging.
Thanks for the help @ngua it saves me lots of time.
I now need more help in the translation from Ogmios response to real Cardano parameters.
This is the current file under server/config
{
"txFeePerByte": 44,
"minUTxOValue": null,
"stakePoolDeposit": 500000000,
"utxoCostPerWord": 34482,
"decentralization": 0.25,
"poolRetireMaxEpoch": 18,
"extraPraosEntropy": null,
"collateralPercentage": 150,
"stakePoolTargetNum": 150,
"maxBlockBodySize": 65536,
"maxTxSize": 16384,
"treasuryCut": 0.2,
"minPoolCost": 340000000,
"maxCollateralInputs": 3,
"maxValueSize": 5000,
"maxBlockExecutionUnits": {
"memory": 50000000,
"steps": 40000000000
},
"maxBlockHeaderSize": 1100,
"costModels": {
"PlutusScriptV1": {
"sha2_256-memory-arguments": 4,
"equalsString-cpu-arguments-constant": 1000,
"cekDelayCost-exBudgetMemory": 100,
"lessThanEqualsByteString-cpu-arguments-intercept": 103599,
"divideInteger-memory-arguments-minimum": 1,
"appendByteString-cpu-arguments-slope": 621,
"blake2b-cpu-arguments-slope": 29175,
"iData-cpu-arguments": 150000,
"encodeUtf8-cpu-arguments-slope": 1000,
"unBData-cpu-arguments": 150000,
"multiplyInteger-cpu-arguments-intercept": 61516,
"cekConstCost-exBudgetMemory": 100,
"nullList-cpu-arguments": 150000,
"equalsString-cpu-arguments-intercept": 150000,
"trace-cpu-arguments": 150000,
"mkNilData-memory-arguments": 32,
"lengthOfByteString-cpu-arguments": 150000,
"cekBuiltinCost-exBudgetCPU": 29773,
"bData-cpu-arguments": 150000,
"subtractInteger-cpu-arguments-slope": 0,
"unIData-cpu-arguments": 150000,
"consByteString-memory-arguments-intercept": 0,
"divideInteger-memory-arguments-slope": 1,
"divideInteger-cpu-arguments-model-arguments-slope": 118,
"listData-cpu-arguments": 150000,
"headList-cpu-arguments": 150000,
"chooseData-memory-arguments": 32,
"equalsInteger-cpu-arguments-intercept": 136542,
"sha3_256-cpu-arguments-slope": 82363,
"sliceByteString-cpu-arguments-slope": 5000,
"unMapData-cpu-arguments": 150000,
"lessThanInteger-cpu-arguments-intercept": 179690,
"mkCons-cpu-arguments": 150000,
"appendString-memory-arguments-intercept": 0,
"modInteger-cpu-arguments-model-arguments-slope": 118,
"ifThenElse-cpu-arguments": 1,
"mkNilPairData-cpu-arguments": 150000,
"lessThanEqualsInteger-cpu-arguments-intercept": 145276,
"addInteger-memory-arguments-slope": 1,
"chooseList-memory-arguments": 32,
"constrData-memory-arguments": 32,
"decodeUtf8-cpu-arguments-intercept": 150000,
"equalsData-memory-arguments": 1,
"subtractInteger-memory-arguments-slope": 1,
"appendByteString-memory-arguments-intercept": 0,
"lengthOfByteString-memory-arguments": 4,
"headList-memory-arguments": 32,
"listData-memory-arguments": 32,
"consByteString-cpu-arguments-intercept": 150000,
"unIData-memory-arguments": 32,
"remainderInteger-memory-arguments-minimum": 1,
"bData-memory-arguments": 32,
"lessThanByteString-cpu-arguments-slope": 248,
"encodeUtf8-memory-arguments-intercept": 0,
"cekStartupCost-exBudgetCPU": 100,
"multiplyInteger-memory-arguments-intercept": 0,
"unListData-memory-arguments": 32,
"remainderInteger-cpu-arguments-model-arguments-slope": 118,
"cekVarCost-exBudgetCPU": 29773,
"remainderInteger-memory-arguments-slope": 1,
"cekForceCost-exBudgetCPU": 29773,
"sha2_256-cpu-arguments-slope": 29175,
"equalsInteger-memory-arguments": 1,
"indexByteString-memory-arguments": 1,
"addInteger-memory-arguments-intercept": 1,
"chooseUnit-cpu-arguments": 150000,
"sndPair-cpu-arguments": 150000,
"cekLamCost-exBudgetCPU": 29773,
"fstPair-cpu-arguments": 150000,
"quotientInteger-memory-arguments-minimum": 1,
"decodeUtf8-cpu-arguments-slope": 1000,
"lessThanInteger-memory-arguments": 1,
"lessThanEqualsInteger-cpu-arguments-slope": 1366,
"fstPair-memory-arguments": 32,
"modInteger-memory-arguments-intercept": 0,
"unConstrData-cpu-arguments": 150000,
"lessThanEqualsInteger-memory-arguments": 1,
"chooseUnit-memory-arguments": 32,
"sndPair-memory-arguments": 32,
"addInteger-cpu-arguments-intercept": 197209,
"decodeUtf8-memory-arguments-slope": 8,
"equalsData-cpu-arguments-intercept": 150000,
"mapData-cpu-arguments": 150000,
"mkPairData-cpu-arguments": 150000,
"quotientInteger-cpu-arguments-constant": 148000,
"consByteString-memory-arguments-slope": 1,
"cekVarCost-exBudgetMemory": 100,
"indexByteString-cpu-arguments": 150000,
"unListData-cpu-arguments": 150000,
"equalsInteger-cpu-arguments-slope": 1326,
"cekStartupCost-exBudgetMemory": 100,
"subtractInteger-cpu-arguments-intercept": 197209,
"divideInteger-cpu-arguments-model-arguments-intercept": 425507,
"divideInteger-memory-arguments-intercept": 0,
"cekForceCost-exBudgetMemory": 100,
"blake2b-cpu-arguments-intercept": 2477736,
"remainderInteger-cpu-arguments-constant": 148000,
"tailList-cpu-arguments": 150000,
"encodeUtf8-cpu-arguments-intercept": 150000,
"equalsString-cpu-arguments-slope": 1000,
"lessThanByteString-memory-arguments": 1,
"multiplyInteger-cpu-arguments-slope": 11218,
"appendByteString-cpu-arguments-intercept": 396231,
"lessThanEqualsByteString-cpu-arguments-slope": 248,
"modInteger-memory-arguments-slope": 1,
"addInteger-cpu-arguments-slope": 0,
"equalsData-cpu-arguments-slope": 10000,
"decodeUtf8-memory-arguments-intercept": 0,
"chooseList-cpu-arguments": 150000,
"constrData-cpu-arguments": 150000,
"equalsByteString-memory-arguments": 1,
"cekApplyCost-exBudgetCPU": 29773,
"quotientInteger-memory-arguments-slope": 1,
"verifySignature-cpu-arguments-intercept": 3345831,
"unMapData-memory-arguments": 32,
"mkCons-memory-arguments": 32,
"sliceByteString-memory-arguments-slope": 1,
"sha3_256-memory-arguments": 4,
"ifThenElse-memory-arguments": 1,
"mkNilPairData-memory-arguments": 32,
"equalsByteString-cpu-arguments-slope": 247,
"appendString-cpu-arguments-intercept": 150000,
"quotientInteger-cpu-arguments-model-arguments-slope": 118,
"cekApplyCost-exBudgetMemory": 100,
"equalsString-memory-arguments": 1,
"multiplyInteger-memory-arguments-slope": 1,
"cekBuiltinCost-exBudgetMemory": 100,
"remainderInteger-memory-arguments-intercept": 0,
"sha2_256-cpu-arguments-intercept": 2477736,
"remainderInteger-cpu-arguments-model-arguments-intercept": 425507,
"lessThanEqualsByteString-memory-arguments": 1,
"tailList-memory-arguments": 32,
"mkNilData-cpu-arguments": 150000,
"chooseData-cpu-arguments": 150000,
"unBData-memory-arguments": 32,
"blake2b-memory-arguments": 4,
"iData-memory-arguments": 32,
"nullList-memory-arguments": 32,
"cekDelayCost-exBudgetCPU": 29773,
"subtractInteger-memory-arguments-intercept": 1,
"lessThanByteString-cpu-arguments-intercept": 103599,
"consByteString-cpu-arguments-slope": 1000,
"appendByteString-memory-arguments-slope": 1,
"trace-memory-arguments": 32,
"divideInteger-cpu-arguments-constant": 148000,
"cekConstCost-exBudgetCPU": 29773,
"encodeUtf8-memory-arguments-slope": 8,
"quotientInteger-cpu-arguments-model-arguments-intercept": 425507,
"mapData-memory-arguments": 32,
"appendString-cpu-arguments-slope": 1000,
"modInteger-cpu-arguments-constant": 148000,
"verifySignature-cpu-arguments-slope": 1,
"unConstrData-memory-arguments": 32,
"quotientInteger-memory-arguments-intercept": 0,
"equalsByteString-cpu-arguments-constant": 150000,
"sliceByteString-memory-arguments-intercept": 0,
"mkPairData-memory-arguments": 32,
"equalsByteString-cpu-arguments-intercept": 112536,
"appendString-memory-arguments-slope": 1,
"lessThanInteger-cpu-arguments-slope": 497,
"modInteger-cpu-arguments-model-arguments-intercept": 425507,
"modInteger-memory-arguments-minimum": 1,
"sha3_256-cpu-arguments-intercept": 0,
"verifySignature-memory-arguments": 1,
"cekLamCost-exBudgetMemory": 100,
"sliceByteString-cpu-arguments-intercept": 150000
}
},
"maxTxExecutionUnits": {
"memory": 10000000,
"steps": 10000000000
},
"protocolVersion": {
"minor": 0,
"major": 2
},
"txFeeFixed": 155381,
"stakeAddressDeposit": 2000000,
"monetaryExpansion": 3.0e-3,
"poolPledgeInfluence": 0.3,
"executionUnitPrices": {
"priceSteps": 7.21e-5,
"priceMemory": 5.77e-2
}
}
And this is the Ogmios response :
{
"type": "jsonwsp/response",
"version": "1.0",
"servicename": "ogmios",
"methodname": "Query",
"result": {
"minFeeCoefficient": 44,
"minFeeConstant": 155381,
"maxBlockBodySize": 98304,
"maxBlockHeaderSize": 1100,
"maxTxSize": 16384,
"stakeKeyDeposit": 2000000,
"poolDeposit": 500000000,
"poolRetirementEpochBound": 18,
"desiredNumberOfPools": 500,
"poolInfluence": "3/10",
"monetaryExpansion": "3/1000",
"treasuryExpansion": "1/5",
"decentralizationParameter": "0/1",
"extraEntropy": "neutral",
"protocolVersion": {
"major": 6,
"minor": 0
},
"minPoolCost": 340000000,
"coinsPerUtxoWord": 34482,
"costModels": {
"plutus:v1": {
"addInteger-cpu-arguments-intercept": 197209,
"addInteger-cpu-arguments-slope": 0,
"addInteger-memory-arguments-intercept": 1,
"addInteger-memory-arguments-slope": 1,
"appendByteString-cpu-arguments-intercept": 396231,
"appendByteString-cpu-arguments-slope": 621,
"appendByteString-memory-arguments-intercept": 0,
"appendByteString-memory-arguments-slope": 1,
"appendString-cpu-arguments-intercept": 150000,
"appendString-cpu-arguments-slope": 1000,
"appendString-memory-arguments-intercept": 0,
"appendString-memory-arguments-slope": 1,
"bData-cpu-arguments": 150000,
"bData-memory-arguments": 32,
"blake2b-cpu-arguments-intercept": 2477736,
"blake2b-cpu-arguments-slope": 29175,
"blake2b-memory-arguments": 4,
"cekApplyCost-exBudgetCPU": 29773,
"cekApplyCost-exBudgetMemory": 100,
"cekBuiltinCost-exBudgetCPU": 29773,
"cekBuiltinCost-exBudgetMemory": 100,
"cekConstCost-exBudgetCPU": 29773,
"cekConstCost-exBudgetMemory": 100,
"cekDelayCost-exBudgetCPU": 29773,
"cekDelayCost-exBudgetMemory": 100,
"cekForceCost-exBudgetCPU": 29773,
"cekForceCost-exBudgetMemory": 100,
"cekLamCost-exBudgetCPU": 29773,
"cekLamCost-exBudgetMemory": 100,
"cekStartupCost-exBudgetCPU": 100,
"cekStartupCost-exBudgetMemory": 100,
"cekVarCost-exBudgetCPU": 29773,
"cekVarCost-exBudgetMemory": 100,
"chooseData-cpu-arguments": 150000,
"chooseData-memory-arguments": 32,
"chooseList-cpu-arguments": 150000,
"chooseList-memory-arguments": 32,
"chooseUnit-cpu-arguments": 150000,
"chooseUnit-memory-arguments": 32,
"consByteString-cpu-arguments-intercept": 150000,
"consByteString-cpu-arguments-slope": 1000,
"consByteString-memory-arguments-intercept": 0,
"consByteString-memory-arguments-slope": 1,
"constrData-cpu-arguments": 150000,
"constrData-memory-arguments": 32,
"decodeUtf8-cpu-arguments-intercept": 150000,
"decodeUtf8-cpu-arguments-slope": 1000,
"decodeUtf8-memory-arguments-intercept": 0,
"decodeUtf8-memory-arguments-slope": 8,
"divideInteger-cpu-arguments-constant": 148000,
"divideInteger-cpu-arguments-model-arguments-intercept": 425507,
"divideInteger-cpu-arguments-model-arguments-slope": 118,
"divideInteger-memory-arguments-intercept": 0,
"divideInteger-memory-arguments-minimum": 1,
"divideInteger-memory-arguments-slope": 1,
"encodeUtf8-cpu-arguments-intercept": 150000,
"encodeUtf8-cpu-arguments-slope": 1000,
"encodeUtf8-memory-arguments-intercept": 0,
"encodeUtf8-memory-arguments-slope": 8,
"equalsByteString-cpu-arguments-constant": 150000,
"equalsByteString-cpu-arguments-intercept": 112536,
"equalsByteString-cpu-arguments-slope": 247,
"equalsByteString-memory-arguments": 1,
"equalsData-cpu-arguments-intercept": 150000,
"equalsData-cpu-arguments-slope": 10000,
"equalsData-memory-arguments": 1,
"equalsInteger-cpu-arguments-intercept": 136542,
"equalsInteger-cpu-arguments-slope": 1326,
"equalsInteger-memory-arguments": 1,
"equalsString-cpu-arguments-constant": 1000,
"equalsString-cpu-arguments-intercept": 150000,
"equalsString-cpu-arguments-slope": 1000,
"equalsString-memory-arguments": 1,
"fstPair-cpu-arguments": 150000,
"fstPair-memory-arguments": 32,
"headList-cpu-arguments": 150000,
"headList-memory-arguments": 32,
"iData-cpu-arguments": 150000,
"iData-memory-arguments": 32,
"ifThenElse-cpu-arguments": 1,
"ifThenElse-memory-arguments": 1,
"indexByteString-cpu-arguments": 150000,
"indexByteString-memory-arguments": 1,
"lengthOfByteString-cpu-arguments": 150000,
"lengthOfByteString-memory-arguments": 4,
"lessThanByteString-cpu-arguments-intercept": 103599,
"lessThanByteString-cpu-arguments-slope": 248,
"lessThanByteString-memory-arguments": 1,
"lessThanEqualsByteString-cpu-arguments-intercept": 103599,
"lessThanEqualsByteString-cpu-arguments-slope": 248,
"lessThanEqualsByteString-memory-arguments": 1,
"lessThanEqualsInteger-cpu-arguments-intercept": 145276,
"lessThanEqualsInteger-cpu-arguments-slope": 1366,
"lessThanEqualsInteger-memory-arguments": 1,
"lessThanInteger-cpu-arguments-intercept": 179690,
"lessThanInteger-cpu-arguments-slope": 497,
"lessThanInteger-memory-arguments": 1,
"listData-cpu-arguments": 150000,
"listData-memory-arguments": 32,
"mapData-cpu-arguments": 150000,
"mapData-memory-arguments": 32,
"mkCons-cpu-arguments": 150000,
"mkCons-memory-arguments": 32,
"mkNilData-cpu-arguments": 150000,
"mkNilData-memory-arguments": 32,
"mkNilPairData-cpu-arguments": 150000,
"mkNilPairData-memory-arguments": 32,
"mkPairData-cpu-arguments": 150000,
"mkPairData-memory-arguments": 32,
"modInteger-cpu-arguments-constant": 148000,
"modInteger-cpu-arguments-model-arguments-intercept": 425507,
"modInteger-cpu-arguments-model-arguments-slope": 118,
"modInteger-memory-arguments-intercept": 0,
"modInteger-memory-arguments-minimum": 1,
"modInteger-memory-arguments-slope": 1,
"multiplyInteger-cpu-arguments-intercept": 61516,
"multiplyInteger-cpu-arguments-slope": 11218,
"multiplyInteger-memory-arguments-intercept": 0,
"multiplyInteger-memory-arguments-slope": 1,
"nullList-cpu-arguments": 150000,
"nullList-memory-arguments": 32,
"quotientInteger-cpu-arguments-constant": 148000,
"quotientInteger-cpu-arguments-model-arguments-intercept": 425507,
"quotientInteger-cpu-arguments-model-arguments-slope": 118,
"quotientInteger-memory-arguments-intercept": 0,
"quotientInteger-memory-arguments-minimum": 1,
"quotientInteger-memory-arguments-slope": 1,
"remainderInteger-cpu-arguments-constant": 148000,
"remainderInteger-cpu-arguments-model-arguments-intercept": 425507,
"remainderInteger-cpu-arguments-model-arguments-slope": 118,
"remainderInteger-memory-arguments-intercept": 0,
"remainderInteger-memory-arguments-minimum": 1,
"remainderInteger-memory-arguments-slope": 1,
"sha2_256-cpu-arguments-intercept": 2477736,
"sha2_256-cpu-arguments-slope": 29175,
"sha2_256-memory-arguments": 4,
"sha3_256-cpu-arguments-intercept": 0,
"sha3_256-cpu-arguments-slope": 82363,
"sha3_256-memory-arguments": 4,
"sliceByteString-cpu-arguments-intercept": 150000,
"sliceByteString-cpu-arguments-slope": 5000,
"sliceByteString-memory-arguments-intercept": 0,
"sliceByteString-memory-arguments-slope": 1,
"sndPair-cpu-arguments": 150000,
"sndPair-memory-arguments": 32,
"subtractInteger-cpu-arguments-intercept": 197209,
"subtractInteger-cpu-arguments-slope": 0,
"subtractInteger-memory-arguments-intercept": 1,
"subtractInteger-memory-arguments-slope": 1,
"tailList-cpu-arguments": 150000,
"tailList-memory-arguments": 32,
"trace-cpu-arguments": 150000,
"trace-memory-arguments": 32,
"unBData-cpu-arguments": 150000,
"unBData-memory-arguments": 32,
"unConstrData-cpu-arguments": 150000,
"unConstrData-memory-arguments": 32,
"unIData-cpu-arguments": 150000,
"unIData-memory-arguments": 32,
"unListData-cpu-arguments": 150000,
"unListData-memory-arguments": 32,
"unMapData-cpu-arguments": 150000,
"unMapData-memory-arguments": 32,
"verifySignature-cpu-arguments-intercept": 3345831,
"verifySignature-cpu-arguments-slope": 1,
"verifySignature-memory-arguments": 1
}
},
"prices": {
"memory": "577/10000",
"steps": "721/10000000"
},
"maxExecutionUnitsPerTransaction": {
"memory": 16000000,
"steps": 10000000000
},
"maxExecutionUnitsPerBlock": {
"memory": 80000000,
"steps": 40000000000
},
"maxValueSize": 5000,
"collateralPercentage": 150,
"maxCollateralInputs": 3
},
"reflection": null
}
I don't know where to find minUTxOValue
, so, unless I see it or someone points it (please), I guess I need to put a question in Ogmios about the right correspondence.
The current Aeson parser (relating file params to real protocol parameters ) is here : https://input-output-hk.github.io/cardano-node/cardano-api/lib/src/Cardano.Api.ProtocolParameters.html#ProtocolParameters
I was able to eliminate possibilities and get most of the map, the only parameter that I still don't know how to get is minUTxOValue
Just an update :
I got most of it implemented and now the Haskell server refuses to start nix run -L .#ctl-runtime
, probably because is failing to attempt to decode minUTxOValue
or I have noticed that Ogmios isn't ready before Haskell server dies.
I got little time remaining this week, so I probably going to clean the code on Friday and track the server crash on Monday.
The draft branch is compiling now in case someone wants to look for the crash.
@Luis-omega
minUTxOValue
, since it's already null
in the JSON file, can't we just set it to Nothing
if it's not in the Ogmios response? I think just using Aeson's .:?
would work, no?yes, it seems that minUtxo
value is no longer used, so it must be sure to set it to null.
The currenr retry logic don't wait, but it should be just a line adding a sleep inside.
I will try these on Monday.
I don't know why, but :
nix run -L .#ctl-runtime
at the root folder, the initialization for Haskell server fails (currently try 300 times (one every 0.5 segs))nix run -L .#ctl-runtime
at the root folder and then running cabal test
on the server, every server test is able to get the parameters from the Ogmios instance. Aditional things :
config/pparams.json
has "extraPraosEntropy": null
but ogmios returns "extraEntropy": "neutral"
, should I leave it as null or use the function makePraosNonce
over the ogmios value? costModels
need a little fix So, once I fix those and do a little cleanup, the pr would be ready to review.
CTL server could set the current protocol parameters by querying the Ogmios instance for it. Now they are set from a static file which requires keeping it consistent or errors will happen. These errors might not be immediately recognized as PP mismatch errors which cost us dev time.