Protocol Jakarta#
Important: revision PtJakarta...nGw of protocol Jakarta contains
two critical bugs
that have been corrected in the latest version PtJakart2...SqY.
This page contains all the relevant information for protocol Jakarta (see Protocol naming).
The code can be found in the src/proto_013_PtJakart directory of the
master branch of Tezos.
This page documents the changes brought by protocol Jakarta with respect to Ithaca.
New Environment Version (V5)#
This protocol requires a different protocol environment than Ithaca. It requires protocol environment V5, compared to V4 for Ithaca. (MR !4071)
Remove compatibility layers. (MR !4215)
Lwtreslib updates from stdlib 4.13. (MR !4279)
Update to data encoding 0.5 and support compact encoding. (MRs !4339, !4582)
Add Merkle proofs to the protocol. (MRs !4086, !4307, !4509, !4536, !4694)
Add pk/signature_size_in_bytes in Bls_signature. (MR !4492)
Add size_in_memory for BLS types and reset test configurations of for the typed IR size to previous values. (MR !4464)
Provide let* binding operators. (MR !4365)
Expose
Blake2b.Make_merkle_tree. (MR !4618)Sync interfaces with upstreams. (MR !4617)
Export context configuration. (MR !4601)
Remove unused function register_resolver. (MR !4591)
Liquidity Baking#
Several changes are made to the Liquidity Baking Escape Vote (MR !4201):
The options are renamed
On(instead offalse) andOff(instead oftrue) to reduce confusion.A third
Passoption is added. When this option is used the exponential moving average (EMA) of escape votes is not affected by the block. Note to developers of baking software: we don’t recommend to use this option as a default value; instead we recommend to force the user to explicitly choose one of the three options; this behavior has been implemented in Octez’tezos-baker.The escape hatch threshold is reset to 50% to account for the new symmetry in the escape vote introduced by
Passoption.The precision of the EMA computation has been increased by a factor of 1000. To achieve this without overflowing, this computation is now performed using arbitrary-precision arithmetic. The EMA itself and the EMA threshold are still stored on 32bits.
EMA is always rounded toward the threshold.
When the EMA reaches the threshold, the deactivation of the subsidy is not permanent anymore. If the proportion of bakers voting
Onlater increases and the EMA falls back below the threshold then the subsidy is restarted.The Liquidity Baking Escape Vote is renamed into “Liquidity Baking Toggle Vote”.
Transaction Optimistic Rollups#
Rollups is a new feature of the protocol supporting execution of transactions off-chain. (MRs !3915, !4198, !4200, !4203, !4332, !4428, !4309, !4360, !4369, !4447, !4357, !4344, !4480, !4275, !4017, !4489, !4499, !4496, !4515, !4453, !4508, !4531, !4484, !4495, !4446, !4561, !4538, !4593, !4583, !4548, !4594, !4590, !4603, !4604, !4576, !4517, !4572, !4634, !4653, !4521, !4649, !4668, !4523, !4664, !4635, !4667, !4758, !4703, !4739, !4702, !4755, !4756, !4768, !4750, !4733, !4726, !4780, !4779, !4784, !4772, !4782, !4790, !4801, !4740, !4376, !4793, !4841, !4930, !4917, !4835, !4951, !4878, !4913, !4956, !4963, !4965, !4972, !4976, !4984, !4999, !5078, !5080)
Smart Contract Optimistic Rollups (ongoing)#
Support for execution of smart contracts inside rollups is in progress and is not enabled yet. (MRs !3941, !4000, !4020, !4148, !4173, !4483, !4563, !4629, !4586, !4621, !4700, !4343, !4770, !4791, !4498, !4620, !4568, !4289)
Tickets Hardening#
Ticket handling has been improved via runtime token validation layer, which adds extra layer of protection for ticket semantics. (MRs !4011, !3826, !4303, !4168, !4323, !4334, !4426, !4491, !4341, !4190)
Voting procedure#
The voting power of a delegate is no longer rounded to rolls, it is now instead the full staking power of the delegate, currently expressed in mutez. (MR !4265)
Breaking Changes#
The binary encoding of the result of the
Transactionoperation has changed. Its contents now vary depending on the kind of destination. The default cases (implicit and smart contracts) are prefixed with the tag0. (MR !4205)The
consumed_gasfield in the encoding of operations becomes deprecated in favour ofconsumed_milligas, which contains a more precise readout for the same value.consumed_milligasfield was added to the encoding of block metadata for uniformity. (MR !4388)The following RPCs output format changed:
/chains/<chain_id>/blocks/<block>/votes/proposals,/chains/<chain_id>/blocks/<block>/votes/ballots,/chains/<chain_id>/blocks/<block>/votes/listings,/chains/<chain_id>/blocks/<block>/votes/total_voting_power,/chains/<chain_id>/blocks/<block>/context/delegates/<public_key_hash>/chains/<chain_id>/blocks/<block>/context/delegates/<public_key_hash>/voting_power
The voting power that was represented by
int32(denoting rolls) is now represented by anint64(denoting mutez). Furthermore, in the RPC/chains/<chain_id>/blocks/<block>/votes/listings, the fieldrollshas been replaced by the fieldvoting_power. (MR !4265)Encoding of transaction and origination operations no longer contains deprecated
big_map_difffield.lazy_storage_diffshould be used instead. (MR: !4387)The JSON and binary encodings for Liquidity Baking Toggle Votes have changed as follows:
Vote option |
Old binary encoding |
Old JSON encoding |
New binary encoding |
New JSON encoding |
|---|---|---|---|---|
|
|
|
|
|
|
any other byte |
|
|
|
|
N/A |
N/A |
|
|
The values of the Liquidity Baking EMA in block receipts and the Liquidity Baking EMA threshold in the constants have been scaled by 1000, the new value of the threshold is 1,000,000,000. To compute the proportion Off/(On + Off) of toggle votes the following formula can be used: liquidity_baking_toggle_ema / 2,000,000,000.
Receipts and balance updates may now refer to a new type of account with the kind
"freezer"and the category"bonds". Bonds are like deposits. However, they can be associated to implicit or originated accounts, unlike deposits that only apply to implicit accounts that are also delegates (see Token transfers and balance updates). (MR !4437)
Bug Fixes#
Minor Changes#
The RPC
../context/delegatescan take two additional Boolean flags,with_minimal_stakeorwithout_minimal_stake, to select delegates that have at least a minimal stake to participate in consensus and governance, or do not have such a minimal stake, respectively. (MR !3951)Make cache layout a parametric constant of the protocol. (MR !4035)
Change
blocks_per_voting periodin context withcycles_per_voting_period(MR !4456)Use dedicated error for duplicate ballots. (MR !4209)
Allow committee size to be < 4. (MR !4308)
Remove delegate_selection parameter and introduce initial_seed parameter. (MR !3842)
Retrieve a contract’s public key before prechecking an operation. (MR !4877)
Normalize types and code of views in RPCs and client commands. (MR !4911)
Michelson#
Some operations are now forbidden in views:
CREATE_CONTRACT,SET_DELEGATEandTRANSFER_TOKENScannot be used at the top-level of a view because they are stateful, andSELFbecause the entry-point does not make sense in a view. However,CREATE_CONTRACT,SET_DELEGATEandTRANSFER_TOKENSremain available in lambdas defined inside a view. (MR !3737)Non-entrypoint annotations are ignored by the typechecker and not propagated.
All contracts that used to typecheck correctly before will still typecheck correctly afterwards. Though more contracts are accepted as branches with different annotations won’t be rejected anymore.
The special annotation
%@ofPAIRhas no effect.RPCs
/chains/<chain_id>/blocks/<block>/context/contracts/<address>/typecheck_code,/chains/<chain_id>/blocks/<block>/context/contracts/<address>/trace_code, as well as typechecking errors reporting stack types, won’t report annotations anymore.In their output encodings, the objects containing the fields
itemandannotare replaced with the contents of the fielditem.RPCs
/chains/<chain_id>/blocks/<block>/context/contracts/<address>,/chains/<chain_id>/blocks/<block>/context/contracts/<address>/script/normalized,/chains/<chain_id>/blocks/<block>/context/contracts/<address>/entrypoints,/chains/<chain_id>/blocks/<block>/context/contracts/<address>/entrypoints/normalized,/chains/<chain_id>/blocks/<block>/context/contracts/<address>/entrypoints/<entrypoint>,/chains/<chain_id>/blocks/<block>/context/contracts/<address>/entrypoints/<entrypoint>/normalizedaccept a new boolean parameternormalize_typesto show types without their annotations.(MRs !4139, !4140, !4141, !4175, !4311, !4259, !4844, !4876, !4893)
Annotating the parameter toplevel constructor to designate the root entrypoint is now forbidden. Put the annotation on the parameter type instead. E.g. replace
parameter %a int;byparameter (int %a);(MR !4366)The
VOTING_POWERof a contract is no longer rounded to rolls. It is now instead the full staking power of the delegate, currently expressed in mutez. Though, developers should not rely onVOTING_POWERto query the staking power of a contract inmutez: the value returned byVOTING_POWERis still of type`natand it should only be considered relative toTOTAL_VOTING_POWER. (MR !4265)The new type
tx_rollup_l2_addresshas been introduced. It is used to identify accounts on transaction rollups’ legders. Values of typetx_rollup_l2_addressare 20-byte hashes of a BLS public keys (with a string notation based of a base58 encoding, prefixed withtz4). (MR !4431)A new instruction
MIN_BLOCK_TIMEhas been added. It can be used to push the current minimal time between blocks onto the stack. The value is obtained from the protocol’sminimal_block_delayconstant. (MR !4471)The existing type
sapling_transactionis renamedsapling_transaction_deprecatedand is deprecated. Existing onchain contracts are automatically converted. A new Michelson typesapling_transactionand an overload of the instructionSAPLING_VERIFY_UPDATEhave been added to fix the malleability problem of the old instruction (see Sapling integration). (MRs !4670, !4589)The protocol migration to Alpha will ensure that 8 smart contracts on mainnet that depend on features deprecated in Babylon, type check under the new protocol without the
--legacyflag. This will be ensured by patching the contracts. Their behaviour will remain unchanged which was tested by replaying historic transactions to these smart contracts with the updated code. For more information on which contracts are patched and how the change can be tested read the description of the MR that brought the migration. (MRs !3730, !4681)
RPC Changes#
Internal#
The following changes are not visible to the users but reflect improvements of the codebase.
BALANCEis now passed to the Michelson interpreter as a step constant instead of being read from the context each time this instruction is executed. (MR !3871)Faster gas monad. (MR !4034)
Rewrite step constants explicitly when entering a view. (MR !4230)
Update migration for Ithaca. (MR !4107)
Tenderbake: Optimizing round_and_offset. (MR !4009)
Make protocol easier to translate to Coq. (MR !4260)
Generalize the destination argument of Transaction. (MR !4205)
Do not propagate operations conditioned by a feature flag. (MR !4330)
Optimize local gas counter exhaustion checking. (MR !4305)
Fix edge case in pseudorandom computations. (MR !4385)
Ensure voting periods end at cycle ends. (MR !4425)
Gas: move Size module to lib_protocol. (MR !4337)
Fix coq:lint error ignoring message (MR !4473)
Take user/automatic protocol upgrades into account during operation simulation. (MR !4433)
Improve gas model of unparse_script. (MR !4328)
Remove unreachable code (MR !4615)
Separate internal operations. (MRs !4613, !4623, !4632, !4643)
Stakable frozen bonds. (MR !4437)
Rename first_level_of_Tenderbake for consistency. (MR !4825)
Update gas cost model. (MR !4840)
Update size cost model. (MR !4948)
Internal refactorings in Michelson typechecker and interpreter. (MRs !4502, !4693, !4692, !4658, !4507, !4578, !4506, !4133, !4429, !4427, !4298, !4297, !4363, !4364, !3863, !3696)
Other internal refactorings or documentation. (MRs !4276, !4457, !3928, !4041, !4088, !3755, !4128, !4262, !4257, !4293, !4444, !4224, !4432, !4468, !4777, !4820, !4287)