Mina中的delta_transition_chain_proof/delta_block_chain_proof

2023-10-30 02:59

本文主要是介绍Mina中的delta_transition_chain_proof/delta_block_chain_proof,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 引言

Mina区块中的delta_transition_chain_proof/delta_block_chain_proof字段的主要目的是:Proof that the block was produced within the allotted slot time。该proof主要用于catchup或正常同步最新区块时进行验证。Mina主网中,设置delta=0,delta表示Maximum permissable delay of packets (in slots after the current)。

(* header.ml中有: *)
type t ={ protocol_state : Protocol_state.Value.Stable.V2.t; protocol_state_proof : Proof.Stable.V2.t [@sexp.opaque]; delta_block_chain_proof :(* TODO: abstract *)State_hash.Stable.V1.t * State_body_hash.Stable.V1.t list; current_protocol_version : Protocol_version.Stable.V1.t; proposed_protocol_version_opt : Protocol_version.Stable.V1.t option; body_reference : Body_reference.Stable.V1.t}(* external_transition.ml(指节点收到的由外部产块者产的区块)中有: *)
type t ={ protocol_state : Protocol_state.Value.Stable.V2.t; protocol_state_proof : Proof.Stable.V2.t [@sexp.opaque]; staged_ledger_diff : Staged_ledger_diff.Stable.V2.t; delta_transition_chain_proof :State_hash.Stable.V1.t * State_body_hash.Stable.V1.t list; current_protocol_version : Protocol_version.Stable.V1.t; proposed_protocol_version_opt : Protocol_version.Stable.V1.t option; mutable validation_callback : Validate_content.t}

生成该proof的代码为:

				let delta_block_chain_proof =Transition_chain_prover.prove~length:(Mina_numbers.Length.to_int consensus_constants.delta)~frontier previous_state_hash|> Option.value_exn
(* Transition_chain_prover: *)
let prove ?length ~frontier state_hash =let open Option.Let_syntax inlet%map requested_transition =Option.mergeTransition_frontier.(find frontier state_hash >>| Breadcrumb.validated_transition)(find_in_root_history frontier state_hash)~f:Fn.constinlet first_transition, merkle_list =Merkle_list.prove ?length ~context:frontier requested_transitionin( (External_transition.Validated.state_hashes first_transition).state_hash, merkle_list )

其中:

  • consensus_constants.delta:为Mina共识参数中delta值,当前Mina主网设置为0。
  • previous_state_hash:为commitment to previous block (hash of previous protocol state hash and body hash)。可将protocol_state看成是传统的区块头,包含了区块中最重要的信息。
  • delta_transition_chain_proof : State_hash.Stable.V1.t * State_body_hash.Stable.V1.t list:本质为state_hash和相应的merkle path证明(为list数组)。【目前Mina设置的delta=0,返回的list恒为[];而(External_transition.Validated.state_hashes first_transition).state_hashlet previous_state_hash = (Protocol_state.hashes previous_protocol_state).state_hash,这二者的计算方式有所不同实际的值有所不同?即下例的"jwHLk8kaC6B45K3sjuX2sM38649VtfpUAteTfKFQMPcqTeXjGiT"并不是某区块的state_hash。】

2. delta_transition_chain_proof示例

以https://minaexplorer.com/block/3NKaBJsN1SehD6iJwRwJSFmVzJg5DXSUQVgnMxtH4eer4aF5BrDK
和 https://storage.googleapis.com/mina_network_block_data/mainnet-77748-3NKaBJsN1SehD6iJwRwJSFmVzJg5DXSUQVgnMxtH4eer4aF5BrDK.json为例,delta_transition_chain_proof内容为:
“jwHLk8kaC6B45K3sjuX2sM38649VtfpUAteTfKFQMPcqTeXjGiT”,[]]

{"scheduled_time":"1636092972780","protocol_state":{"previous_state_hash":"3NKDdX6eVtAgmmTVxaFLnnPPrsGKgVepG2k5cf8HocgSw6ps8Sww","body":{"genesis_state_hash":"3NKeMoncuHab5ScarV5ViyF16cJPT4taWNSaTLS64Dp67wuXigPZ","blockchain_state":{"staged_ledger_hash":{"non_snark":{"ledger_hash":"jwD5Kx1GtLKJGSWufhkvCn8m7EFLm2LmAM7neyzLtTiN8wyn2po","aux_hash":"UworXDykADr3Lte856ePMsdawpTVhKLKT9Y3UKha7Tpbt4V1JP","pending_coinbase_aux":"XbwfEKZjgcZiyDhHRZjHUx72TuxpnuzLPwVYpVWkMAAXkSy7go"},"pending_coinbase_hash":"2mzpdUi5ddLicLGUns4iYFiNahL5B5cPkTUot83v2moNtr4mzRYf"},"snarked_ledger_hash":"jxkQm8ge9sYPwPyUYUMZ6wr7SQ6Pit5szbRvPmEzYKQQZAnACyC","genesis_ledger_hash":"jx7buQVWFLsXTtzRgSxbYcT8EYLS8KCZbLrfDcJxMtyy4thw2Ee","snarked_next_available_token":"2","timestamp":"1636092900000"},"consensus_state":{"blockchain_length":"77748","epoch_count":"15","min_window_density":"33","sub_window_densities":["6","1","3","5","4","3","5","7","4","5","6"],"last_vrf_output":"WNAmmaRL7XzyhZHiz276MbnBv4YUIJRGf9P_Xu0RBAA=","total_currency":"867667132840039233","curr_global_slot":{"slot_number":"111965","slots_per_epoch":"7140"},"global_slot_since_genesis":"111965","staking_epoch_data":{"ledger":{"hash":"jxn15ATGoe4WGgYpbssxJH9XW8NXRDy22WvSsBqvMqcnLPgPAwN","total_currency":"861208012840039233"},"seed":"2vao4i3odTHZVRbEhdkKvLoD1rW2UuiVaayVFosYtkghABg29o7i","start_checkpoint":"3NLM6x7j2Z68e8gGspyvc1aU884uU6yWkwz9aW127BFckn9b5uvo","lock_checkpoint":"3NLiFhztdCsuWSociNGMspidiYkyqNKZw6ufH7jqbgQtEgGtBb2P","epoch_length":"4697"},"next_epoch_data":{"ledger":{"hash":"jwAXd4GZgxE3YCwqs99g4MpLNiEV2ZfZPstyah4jxo753AVgL6R","total_currency":"864998092840039233"},"seed":"2vbUkQGF5swXK7PNaAJDUQirW1fbZiUJDzbBKwfPGdJXZiryburD","start_checkpoint":"3NLkdXKqoHfwZ5jT1uxSY3eoFy3C2jpAUFZ1Y6eSMsE66MNJqErx","lock_checkpoint":"3NLW5kBi9nXDzzdr2C3p9X6QaKaASMaVHp3otwreKXKJToUNK7yu","epoch_length":"3285"},"has_ancestor_in_same_checkpoint_window":true,"block_stake_winner":"B62qmsYXFNNE565yv7bEMPsPnpRCsMErf7J2v5jMnuKQ1jgwZS8BzXS","block_creator":"B62qpge4uMq4Vv5Rvc8Gw9qSquUYd6xoW1pz7HQkMSHm6h1o7pvLPAN","coinbase_receiver":"B62qk9WYHu2PBYv4EyEubnVQURcwpiV2ysuYYoMdwi8YTnwZQ7H4bLM","supercharge_coinbase":false},"constants":{"k":"290","slots_per_epoch":"7140","slots_per_sub_window":"7","delta":"0","genesis_state_timestamp":"1615939200000"}}},"protocol_state_proof":"AQEBAQEBAQEBAQABAfyCZ8XD4he3QAH80HIgGfAezhgAAQH8k9ybHSm_cswB_JQesWKV8mPiAAEB_CFDKDlOgTyvAfxQGTylbUUpgAABAAEB_IlOihwF_6cPAfy8HOdGfm3muwABACNq3aIW99rvmPThUJOt7sTCDHKGhd14jtt6WT6kuFYzAQCn9Tpe5H8iu4eCAUs2O4jrZQzs6DrhpxGQc6AzAkteOQEAAQH8xQZ4fhDIOj4B_F6Fr8O5CTsMAAEBAQEAAQH8Qm91cFzlxuYB_Cz4ZjYnTwVyAAEBAAEB_OZAKPtMoib5AfzQLLCTKmHongABAQABAfyG02v2I-l6jAH8iEeTiKBbKjkAAQEAAQH84lhBVf2xpzEB_BHUmoZUZqv_AAEBAAEB_OFYodLGFJH-AfzMLIm8ErnpVAABAQABAfxMGNX65P-rNgH8MeXQ9yLbruwAAQEAAQH8-fFQ7ZTD2TwB_EPopZeAO7DyAAEBAAEB_AVFodFdv3riAfxCkBzGujjAjgABAQABAfyFmgu3zzh_iwH8a-3QksBFIDoAAQEAAQH8EyV9kj2hjxgB_Cjq1rVlPnA2AAEBAAEB_DFjvfxSXfMNAfwQ03vM-qWnKgABAQABAfw9u8uYpRjVGwH8auCvoVqVrO4AAQEAAQH8_4zOksnfvWkB_H0-zs3vUPLwAAEBAAEB_Np8pO8v4SKuAfw9_QTgxhgP6QABAQABAfxOPTWunUVTRAH8IJwLvYO0jRoAAQEAAQH8NWq1qzPRU3IB_M1l0lZM_zlnAAEBAAEB_J2IofKS20MhAfyT6M0RL_FNXwABAQABAfzc3NisCDJ9cAH8mHqRgVdvGJ8AAAEAAQEB_Oc4nCuNu3lxAfyS4L6rm1VgHAH8Fi1AkXr5xRwB_H-LBb1N9VI7AAGVHNYP3HXWMiP5EYHwdZSahxjzCaid3EcbBzc1l2mSIFiwoLM6mA3b-sLAjDM00_Mv1kn8JdKSBz7XFUBdx9wFAQEBAQEBAAEB_H_cKwozftw5AfxzlUcCknjPGgABAQABAfyHYkiXOVf-rAH8wIdrKUAWuH4AAQEAAQH8yiZH-pNlO5QB_EkFjtbxE2TbAAEBAAEB_Ob-bwZ88i3EAfyyVmk5Zf4CbAABAQABAfwz3DYG5_0-ygH8FxZPvQICA64AAQEAAQH8cbO-YveQxEEB_E41RZxRqpJlAAEBAAEB_Oo1cWmj6IExAfwkIdFslaKGqAABAQABAfxKgrUH7qwW9QH8uHoxdQDJBAMAAQEAAQH8LW1TBwUeAfgB_BOTZGJKRlWrAAEBAAEB_OJQNmjd_rBbAfwX_tnoJBlnZAABAQABAfzR__6qjUF5QQH82cvkkjXbCtsAAQEAAQH86Fufzsl-WBsB_Niuie-SE0TFAAEBAAEB_ARddbjD5m0TAfyrzYXQSzCS-QABAQABAfyUxo3LqdBbmAH8lwAIZXaO4B8AAQEAAQH8ERPxGwUJEQAB_AYX7pGEDNoxAAEBAAEB_Gn4iXcgSl-uAfzthAXwXkQ10QABAQABAfzPbCxIxDk6WgH8EdD4I5p-FrIAAAEBAQEBAAEB_PRiou0KbJASAfwzYzmUKFHRKgABAQABAfz3c_qAAg-WyQH83ZszarSNKcsAAQEAAQH8HsHUvGwApOUB_Eqiqp5SyuCHAAEBAAEB_P4hxMctvUjRAfxnHuBu_HXT4QABAQABAfymfTactcwx1gH8Icp3IyaujmAAAQEAAQH8cDGngppKGzoB_MylECYCZqXGAAEBAAEB_Cxrkn7squFFAfzvzIGxZqssMwABAQABAfx4bvwgL0G5wwH8HuPWD2rzWHgAAQEAAQH8J-gjjF9EPfYB_LaiHNuAl65mAAEBAAEB_B5av2NUMr-2AfzMwUabw05SRQABAQABAfxILOUvISw1mgH8_lcHUNvTXp0AAQEAAQH8ASWoSqRxiCQB_MC-AL-kH_i7AAEBAAEB_LESBxwvL7WUAfy5GKn8G6fgOAABAQABAfwgtHDI3HuiSwH8DSB2EBWXgvwAAQEAAQH8J51m68nA0wkB_PcjXo2cmFjiAAEBAAEB_GhNOayv4cvqAfy76E0UHLopBQABAQABAfzgUeAo4PO5ugH8VpiUeeuLT1YAAAABAAECSDA5pdNBwJPjnxV4iNvGpdfmkzXqi8Uc11QcnW_7DBp8lKx_rowAATmxVG6S4JppbpZbJU3aZZXPa52AkyJmOLFkcQJiRYmrPagLNz8DTCQsdcQnFXLM-2f8qO2q3iMFgWeOOsZ4WXrHUsaCLimDl5zUjJo9vLv14lmN-lZ08gYBAgEBAQEAAQH8_p0afZ5vlFsB_J5qFOanysI0AAEBAAEB_AdAbP5WNI7FAfxSJQ6tLG4rcwABAQABAfyVnS4O4rVdaQH8xQbAV7LRwqcAAQEAAQH8osKaiVy12owB_O5aOFBJp21xAAEBAAEB_AaY9zrzAK7lAfwYyRPFhYzZVAABAQABAfxgblAzm_WBbQH8dOLDRt4RoM0AAQEAAQH8hyrBb9OhscUB_K2obrL_-efFAAEBAAEB_DjNh4bpMmpoAfxu_IqqVSc9FwABAQABAfyjLEwAcNxsFAH82DQn99QzR00AAQEAAQH8Yr3wmuuScUsB_AZpD-r3hK06AAEBAAEB_KOcxwA41xDdAfyx4TP4C6FIJwABAQABAfyfNjNgByGJAgH8GH8XNjCbmxsAAQEAAQH8jv8noOn7nvMB_CKCmA5iH59oAAEBAAEB_DpP60G3dOMXAfxXNTEcN1JMggABAQABAfxAM3V-VupUlwH8kc83OahzhmIAAQEAAQH80Ck9Sa9pkfIB_AslFCAAktlfAAEBAAEB_Kvb_sxftPaSAfxhccxlfGMskAABAQABAfz85W87LwKKvwH8G6-4q4yIrK0AAAEBAQEAAQH8DMVpym0zoQgB_IuGEn36D_DDAAEBAAEB_IkAs_6a1ot7AfwRKLlqjdLzswABAQABAfzBBzWGcLjPcwH8nOfrwyXsm3IAAQEAAQH8JU-rVyi2WwoB_PKA6zqDmK-xAAEBAAEB_Lkqp1a0cHOtAfz8nvHVI_lPNgABAQABAfwAfC-OYhyHWQH8h8wmonP2x5wAAQEAAQH8r_K2nh2CVCMB_H71ffbRa7nVAAEBAAEB_PaGkKDQ93sUAfxoKiRAzmJeYgABAQABAfwOrVYyYxvGrwH8--EfoRBygAkAAQEAAQH8kUGsyr4eWPkB_KbJtz6Z1R5XAAEBAAEB_L3DZM2jUE6qAfxoxf7BCucU2AABAQABAfxt3l6C36wdsgH8pQfbxReiCP4AAQEAAQH8f6rm6dYPToIB_Cx_uU6YOvb8AAEBAAEB_MoEG3EriDHDAfwpJq62x6w5kQABAQABAfzvUYH9R48P3AH8h5U7xEN6qQAAAQEAAQH8vzKG0R7YOGAB_KsFqqJwvLP5AAEBAAEB_FpHr-Xg0nWUAfz20sOuAqfL0QABAQABAfwEfC359g94vgH8VOL7MpFYPeEAAAEBAQHFn4aQFgBI2GDXcPdOc1EsQZ8KS4vGw9hYCk2yDF5eOgEBbVGq6-0G0nSa8ok7FYnvnJ0ObTJ9hN1K1DzP_I-pzTMBATzZ-9xtoegAWYXcFBvq2o0RwFpAXF_bYcNv_MBJDfcmAQF7f6cCIRNEB9wpHd3XiN9QuLeKiuPquoBTLaJT_ECpCQEFvCv5PCUdi9A-RQnu66Y8oaW6qAxQ3dSPBK4Ox3c3EQN0zzBbePrf-8hTsYmRUAEeHxFi6X_NzApRJWLEZjh3IhDCvj6Bp2c2V1PavlSytfPc9Wwgeyxz-eIngUJt16wTVSH3tu47eimSxtXKqyXtgbSqOzxFEYmJCUHHJi0c9y-nEpaXbUtL7BCGwlaB-EXsQqTXAbIHsfKHhPAsuCEmCwEBlq4Pa9LiSB9sBxPIpfnjs5edIjzY2_Uju71rcd74OyQBAW-qp5OUEo9NggJljqLtU5ceSwaAo6jWY0FYiRkxRWMsAQH_v28Lo818reRiIpPUzqASYqKfNzC9iCO9e0HrHsuaBgEBARbL0NaRWMlSRSNMwZSy2vAqL3hHkv8YHzIzfXSUDpcWAQHSsSQdmUVrzE7AUA9zE8FeBYsyVqQQc3uomyt0uUA_GQEBgfTYznuyfPGxd8FzYqkBK3K5oVIOyDrcoL0gzaHgdikBAa4RUMme42bKeyFk-VyqqLPkCx8zQmB4oWHEEIpHuUglAQUSwDH34aFmRzn7SNFtkNC_16Jwb4a1nkd08VF5TtTpC-uYI6IvmSYJ7dKT1Ssk8uMSxwLSZ6BvEwHKJYvkiFUg2NsVQPCI6y9CMWXCqJ5tOiszxg0NspVeqIirAdI7lSrCEC6dorSiWhCOWBqbIwuTWG0JxbRf0ycocIL_bn8wB3uGYDCFBppUdlyeF8aLTizxdwIEZj6T0fUQKnRXT5g8AQGf1ntCuVPIcWo9lPqo6X2o5jIn7MGXk79PDhFUFt7WKwEBdGzyhvuJq52Q_NxWtbRWlaS3MwV3AHlVl3B3kEES_ygBASvjkoZC7RU35xoFHO64IPg6c0gkM_yhEftfZPQluh0RAbeKnQYvN0EJX-66eBul89XsW31TIGqowlTG01BFjD4vn07NlTCZSMYyww4uN7mRaFmcwhxYTDQrmM2flLHiJygBAQEBAQGfP1pCUlwOROtFqeGJJtcHb_EKynWbDnyrfJl5UiHfEzJ2QnMnfUrdwLZ11u5Fohfv5XafLPiEo6HEi0-IuucfAQEBpfcr70oGQ6bxfJJMoYIdJMjFi7i3v5QTRn2pcB0StCfuMMY6dMQGIhXVlprtegvZpLVf4CtbEsmNlkZgkPvfLQEBATCbkGfPJXmYLZh9f1-rbjFv9MIe6a95LYnY59XPmbEZeBfbIhvlXAXlz6BEHCTFI7YPp6tNpGWyU93dpfsHxQYBAQHqidH0Z7L0IenfN2sRvlVvkN85TzqZR_WCjLEgr_AsD5OhrP5-aJu_uaLSRrNIkn8afmBeIlzofrlcqV_nR1seAQEFAQH8O7Vl94cFJ-ZNBc_33ZVXpzbq1tVqEhdyPCRwWw9VIq7AB-ZtWeg_ECXqEHl5IeCvD8QP242QUQMXCBJTIy4uAQHaaMCPDiSXHgS_LIp0MpyHU6t2mwCFGUGlhGwcbEJvGnOUqL2N020CaLCAPUF15Zinb6IW8nXQYmLiZEJ2lGU9AQGbdpiCw8zAwluQAvZoM9npleYDyFUW1IIw481ZXOJbFz8-HIgq0mr-nLnRYdjUZVBtuYaIYQ04QLGnFrVfjBE6AQGLwg5R7sxYXxdJlI0tDgwL7tgfT5WR5Rt7rj5RogItKtaoodbHKyCfhJh2p2QIJntKav6GliWDxDYZw7wrdEkyAQFe6Xd0k6s8GC0ip6f4lhJNqn1BPF81S-il3wf3xF0qJq7My9qUxZYX9bJc9AGMD0wppdp0LNTai2W1NaxrsH0WAQHkXRP-sMZNWysvjxx2IhYuvsHk8ets0kLvSmbth0vNHuoOlLBdjdJ9bY5t3YBgZKFO2hDwQMGRUsmeJfqbHlsYAQEBETmpTk_ctjxQ90WTO4-XpvMyBBI5PQdONBINVFTWiaAQLMMB971ymI8aUfH8qCQYBYMWje0COObe5RQUCUUsnTtGzmd15bzD4b9crydQDDm9Rh7EZAfi6KaVCEZ-XVnIDIs0dwWPZlnoZ5mnkVNzxGzAWpQmEzOwmPRaVo7Ratkl2rB20vP-C60MOUWdzBxBOJt-_7EpXDmTqHb6dXVJEQqJsjdoO77zNdOfZWLmNkxSyWRzi2WL9zIVtmL4hazBHmj5cFiYs1hSIlL-OOERQw72A3IeF0Byxs6K_x907Us7W4QVhWX1W92Js51NqDwKRtOxQwgBywOVuXYvEJUNPwouMMPjOlQfJsCedQiGDTA64rlShqPmnXBSWqBiDFPQAtg0_OQJntqy7i2sXTay8J0l7FP7ZU3RP3aeLQ6mgUMIXn7dKP9t2_IhUsz8-_wzi-fjc9r93ifnkXWt4VBTxSql_CgRJy0Eiv0hyT7qKbrog1FbZnFZMXU9PdO1LDrSEgecDFJlyfdJ1NcXsxCMNTscc65vagWfloZhPsHujzYQY4E8ifUQ6t4JFgbL5CXvaxmGqhJGUmEL42D-NM5iRD37JgPubfB9FVsRnKaOHZJfA0kYdqwKHUSL05mJ9Yi2PgmajUYltW_QIHKHqzgYqji_AcTNIu3CCRU_bGqjHkARtb2CwXRr0Xgw99qUCy70eVPMGf-j7W0-yFxaH18CXQXgRYKEqIVXfNN638j0SRPNQHCNbWkcwtTk2kBzt3MeGx5zCgfx8YendUuGXlZw6TFrzJFMUyZp6KJnJ70EMeIzHZ7wMy_xFKAyTOyuEYcZZbE8Vo0_vr3N9TJNLhVAfAbyek0NE9pG0BgAJ-ves5oKXidg1dLo9BJZi6e87cEHIQKh666w-0g_ymwFfzZvWTJlT8vYhbYcl6fiQYWWmFYvovHYojyJ713XAiHj-jdwpofGwPMffcgHfNhYsdXI8AIz6vIE7sSKvqzVdBwEETGbKvFc4zaXIOPLRDxNRz3INYXUIxBjYtlogbAhSfLvZ8SqawiZdsrF1INUC1M9xgMcNTHncQOkXt5gDmeYEl4LgNzVlWv_830vJtyhBU7SIRY96i-FBsH8pv4WrmrDuCpNK8jY-Gr4tCX3It3nrRPjMdTXI9WDkaCYFD4wH4tIGiKf0J18AOYHY3j7GU_UQtYVRUsHLwL2RNEFH_kFC23kCMLUuJi4u1SICYuMCR34dwOSwsZ_RSbD40MgPHjfnKyMg-QjhkRlB59uiOb3nPJjHnSWPNEw2zKISUCKRTjqqbrGEn_syQO2ElhFnqQ7iT8FOcGY0PRYFFoHWayaYQYPVGhOMmheixy5dSAyZiWosDzswuuvM8Rgv8eRhd6W25U06Z9ydYyeMDxEd-Cnt453FWVjzxYeDBrb4u2AmWfeaMYL3Hh89YNwTEzkPnprfZAXTeOyalroTehMXHDB93Lve9y6oPfijKK0UWGojtpS6SJTMoWR-xt1vYQaK9RYoqwjDUsbNQjJA8189reG9l9lBppzM9o7Qq8C46goOwxiIY9hvJzrnvxRSy33JNm1ixkm33V27WzIW2sGd3gCeezqj_TwmwMat9BIO-Ptsfe8JhtJREpg066xqxzNVExc0AkhGydU7EqQZqxRuG-lIOqHME1uLttrFFx0EflHp7AizgQhOhDpYOH3Ke9D3tZ95AU7itWJntEx8msnSdFDyj4H_X8ao6CAgi-0yb4VvK32SDD1NkGuWTtjTlBX2VZdHZYm8Lf97MXqObN1gYEas8S0L3ZhJ8u5j567aDL9nUFTVVzYOdAySOQlxyu4KNQl4OkwgdTEzMXJNQcc294zlTA0LrUgEAQolCeXizaF7jZN5CX9BL7agtDcwaofK2pwkaFY5GSECQK-5QY5Cdcnfi9SHo6W_cxz0likUQwfIfVq5LeznnZFy2QFqROSg09s8Pgbw2Aelzme165-aJ-yNhEwNKsIhmJFVS0c3s7pGlpIjAGxCyr2nTZ7VHj7lrmU3CYMiosh-V4icMbKLe-pIDzKB0TRiDVbrdyZ1x_-sGez12L31lQfcudJ5v2ExYjDjbU9paZsmJraFSjihI3acpVGLy6ydI8PFx6svxSYbKNjPBvbDu7GIDdieNht17sr3C1JpIC-4R-7p5K1C7PYcuBTKsf9pxexFEI_WWfAeN1r1eB0hUtq44NhrAYGY2qYw-IjxtqjM5lrZ0XSIaXAQ6uuAby79b90ZDkHVkYx29FLWD3sLXHmewEyhyPES0l8TjpzaQKYkDWR8fDEHoQGq1aJBwKa1Mn8mumMfPsubyF4IyY8AbbH5NYGCwzlXlQgTSMyHBHngavy-QhYqExy1Q4QFLwS8DxzU3MTOzNec3m-8Q2H3XEE9pMnXUroNvB5J6syvXJEYRwg8YkTXyYypW1pEx0ofo-SQrRFSCRlaacHcufnQuidpZ9m2Ram5GzujrI2qxYjOBWDN7XbS3SM5pasX5fFtZjGJ6X8Z-HRK7XE0SZLEIE_Nnuc7jvFBDS5cu9xKfj-d33CHMu9ynoC4uWyOU6J_yoOxUO1WMw1J8sEfUT4MkOPqepUJfXCWIpZ5-YcCUsqFALnjMrDrocLyNNqye3zeiM0llom7GRBUARVOgu_qhSAH0FwZSIatvelXDBuApqMgFvAeggcd9JAWgU2OLVjYrRpgAyoQCzBAqlfK7LsgXmqfrtz3EqiyEkHSywoKzH-95N_3PGIjCLVgI--das5IptlDWz8-ee5L3i93zKWaV3iXdw9B7eAhwum0yw7AL2dAzE9VJgSJcGHU8kFOHj35LCcxzfzpSDSSXvx8Lgs0SpghNUavKyFS7vi7Dg5rdy37t4BqMnw8S-kwc5EHlK9QetaIv01qd52w-8tsCDkBzucUuYEOwUx6Uq2Qfnp74SlgcrFA4sMWX5hHvaTPXZgNUv9hDNtkjR4_dST8MM6CnSbv-8Jor_UVwEujxcC5HnJGFfYExH0Jm1u0jMbhmI3QbDHOQrfTax4tz8FvzYOosD9oTx3a5dzZGis0lg1LmHkSANhH6jVRqhVFtRHLa-FJjMD7gfiGsaAatUvCAIxcwSuMTWIGGoyu_Vz71IWFvJBPy3mP8Ra-0EnSoMwpJfCxhRMo4ChHp496YEIXjsBAQGNLFJlMmvlQ6YgKkOW9pIxPZotU-RsGTBsBHLYdOLoBQEBwMMUpUByzCsqdYI1wF6oEQEUigFzKgHQhpFTYxP0TikBAdVYrhqiidw3x0M84ho_ykA5Ph07lB9x51DEgWJ_1Qo-AQE_6YNIoiucwXuJv31YfNndNc8rlyL_xwZV39ZgwAi6EAEFyIoZCDiAPKraviC9UJdejvMFKbF0VZjnJpR-e_mbcwJSJiqKkHUXurAV9pX3OCHT_d7cKLPMKdk6Y0wTfeZnOjhJZ2lA1nydyKOvXFe4NbG2y-B2YLto9ltTcMBnpHESnmiOlLnJ9SBAGn53tyO8NFCbaYOotdk6kX-w025lZgEmMfMCNQnzQbGxlLEKQfgEctbYL6srOH7_XE1q1maNEgEB2L8vfqhGnOmHtnrUvbuRgI7-yehGTbmHRgh4x_v2FxsBAcR3N0sBitbxFMa4KkSgXqacq9eLEDHqjSYIRalJCyohAQHHTt8lq8MBA_YDZiTSj99YlWtuqIfXExIxjkFuwCMCAgEBAYcIdlceER2FdlvmvQF_1-W7HAWmOkuOgYJ5QWGlVcoTAQFgV1jdtyt2TFI_JxH2iPKiKxb3zcOdNhq-of3uAccsPQEB4Ur6Qh8bgnRGlcLLZO9CEI7z3SnSMIecjGpNhMN3vR8BAVCqxM0Xc-97TiJIMP1aHnyDl9FBWxDArbwMrX6Y1B09AQWNiu9uQVYKOuEGxn8RR5lKzcB4tWGBYfzqdDiGKWtuA6LdAl_GNhcaKFqcOXIlpBfWxoGrulQ1XCm2DGRfjMMCLC0fgP3HHguoR6Arm8BkACEfaZs_ab67TCLAqxJVlA-CNJifmJwzz9yddf6LOv1g6ood1Muof6Er7LxPZuUMK3Pvwy1KfrmIV0-8nsmlm3yZH4jGnL_mpHmtgsLXMFYaAQGa3zfDzMfvLJlT4JOPU035rQAOHxBbVNoyCt1NyWMEKQEBd34Ufr46TGmGtWKhOK5OeO8Abr3374M2D-mUmc_aaTkBAbD8EL0Bt2M-EUCmKUd3EzbN_7BHivzQedBvurXzOXAD","staged_ledger_diff":{"diff":[{"completed_works":[],"commands":[{"data":["Signed_command",{"payload":{"common":{"fee":"0.01","fee_token":"1","fee_payer_pk":"B62qoSuxNqwogusxxZbs3gpJUxCCN4GZEv21FX8S2DtNpToLgKnrexM","nonce":"5694","valid_until":"4294967295","memo":"E4Yd7qwaRCHR6t7i6ToM98eSUy5eKKadQUPZX7Vpw4CWBvWyd8fzK"},"body":["Payment",{"source_pk":"B62qoSuxNqwogusxxZbs3gpJUxCCN4GZEv21FX8S2DtNpToLgKnrexM","receiver_pk":"B62qn2MtuQ9GyyVnotUHB9Ehp9EZre5m6TYpGx64tBCDHHBZFZRURnL","token_id":"1","amount":"27370000"}]},"signer":"B62qoSuxNqwogusxxZbs3gpJUxCCN4GZEv21FX8S2DtNpToLgKnrexM","signature":"7mXTB1bcHYLJTmTfMtTboo4FSGStvera3z2wd6qjSxhpz1hZFMZZjcyaWAFEmZhgbq6DqVqGsNodnYKsCbMAq7D8yWo5bRSd"}],"status":["Applied",{"fee_payer_account_creation_fee_paid":null,"receiver_account_creation_fee_paid":null,"created_token":null},{"fee_payer_balance":"59778375293571","source_balance":"59778375293571","receiver_balance":"11241317900"}]},{"data":["Signed_command",{"payload":{"common":{"fee":"0.001","fee_token":"1","fee_payer_pk":"B62qktYjLR4e9YBeC1LYF2S67g1sxyquh51q13tLuaJTHNxQ5MCs7U6","nonce":"80780","valid_until":"4294967295","memo":"E4YM2vTHhWEg66xpj52JErHUBU4pZ1yageL4TVDDpTTSsv8mK6YaH"},"body":["Payment",{"source_pk":"B62qktYjLR4e9YBeC1LYF2S67g1sxyquh51q13tLuaJTHNxQ5MCs7U6","receiver_pk":"B62qmWdrzP4KE4PB7oj15XYpFYWKBz9KVsj33u4BBzmZDWJKvwDnAw1","token_id":"1","amount":"1000"}]},"signer":"B62qktYjLR4e9YBeC1LYF2S67g1sxyquh51q13tLuaJTHNxQ5MCs7U6","signature":"7mXM9KAun1w3vemQWFkWp9YoTjLb4ZLfBpnf9eMzufdCk6W9h3wTBJ2NVDdpFUzqrznCW8qjstE5HwABXeDomKd7gZyG2cFW"}],"status":["Applied",{"fee_payer_account_creation_fee_paid":null,"receiver_account_creation_fee_paid":null,"created_token":null},{"fee_payer_balance":"15259324000","source_balance":"15259324000","receiver_balance":"249250000"}]},{"data":["Signed_command",{"payload":{"common":{"fee":"0.001","fee_token":"1","fee_payer_pk":"B62qre3erTHfzQckNuibViWQGyyKwZseztqrjPZBv6SQF384Rg6ESAy","nonce":"104077","valid_until":"4294967295","memo":"E4YM2vTHhWEg66xpj52JErHUBU4pZ1yageL4TVDDpTTSsv8mK6YaH"},"body":["Payment",{"source_pk":"B62qre3erTHfzQckNuibViWQGyyKwZseztqrjPZBv6SQF384Rg6ESAy","receiver_pk":"B62qjYanmV7y9njVeH5UHkz3GYBm7xKir1rAnoY4KsEYUGLMiU45FSM","token_id":"1","amount":"1000"}]},"signer":"B62qre3erTHfzQckNuibViWQGyyKwZseztqrjPZBv6SQF384Rg6ESAy","signature":"7mXPMG1JmXEQfvL15JB14M4G3Ck9nyRTReaX7HRaMPR8XfrQjyPwFMXngNxmkNQ17vTBtsHwc1x7Emw2tTxXGnxgNUrVf5pW"}],"status":["Applied",{"fee_payer_account_creation_fee_paid":null,"receiver_account_creation_fee_paid":null,"created_token":null},{"fee_payer_balance":"990175941111","source_balance":"990175941111","receiver_balance":"817846858"}]}],"coinbase":["One",null],"internal_command_balances":[["Coinbase",{"coinbase_receiver_balance":"20203793056339","fee_transfer_receiver_balance":null}],["Fee_transfer",{"receiver1_balance":"20203805056339","receiver2_balance":null}]]},null]},"delta_transition_chain_proof":["jwHLk8kaC6B45K3sjuX2sM38649VtfpUAteTfKFQMPcqTeXjGiT",[]]}

protocol_state结构为:

FieldTypeDescription
versionu8 (= 0x01)Block structure version
previous_state_hashState_hash.Stable.V1.tCommitment to previous block (hash of previous protocol state hash and body hash)
bodyProtocol_state.Body.Value.Stable.V1The body of the protocol state

其它基础术语有:

  • Transition:等同于block区块。
  • Transition Frontier:为本地data store中包含的网络中的最新 k k k个区块。为rose tree-type数据结构,该tree中的每个节点可能有多个children,即分叉。该tree中的每个节点都可称为breadcrumb。【Mina主网共识中设置 k = 290 k=290 k=290 k k k表示:Depth of finality (number of confirmations)】
    When a node receives a block from a peer, it is first validated, applied to the existing state, and added to the node’s transition frontier. If, according to the consensus rules, it results in increasing the length of the blockchain, the node’s best tip is updated, and the root of the transition frontier is moved up to only maintain k blocks in the transition frontier.【产块者自己产的块称为internal transition,接收其它产块者的区块称为external transition。】
    在这里插入图片描述
    catchup的基本流程为:
(** [Ledger_catchup] is a procedure that connects a foreign external transitioninto a transition frontier by requesting a path of external_transitionsfrom its peer. It receives the state_hash to catchup from[Catchup_scheduler]. With that state_hash, it will ask its peers fora merkle path/list from their oldest transition to the state_hash it isasking for. Upon receiving the merkle path/list, it will do the following:1. verify the merkle path/list is correct by calling[Transition_chain_verifier.verify]. This function would returns a listof state hashes if the verification is successful.2. using the list of state hashes to poke a transition frontierin order to find the hashes of missing transitions. If none of the hashesare found, then it means some more transitions are missing.Once the list of missing hashes are computed, it would do another request todownload the corresponding transitions in a batch fashion. Next it will perform thefollowing validations on each external_transition:1. Check the list of transitions corresponds to the list of hashes that werequested;2. Each transition is checked through [Transition_processor.Validator] and[Protocol_state_validator]If any of the external_transitions is invalid,1) the sender is punished;2) those external_transitions that already passed validation would beinvalidated.Otherwise, [Ledger_catchup] will build a corresponding breadcrumb path fromthe path of external_transitions. A breadcrumb from the path is built usingits corresponding external_transition staged_ledger_diff and applying it toits preceding breadcrumb staged_ledger to obtain its correspondingstaged_ledger. If there was an error in building the breadcrumbs, thencatchup would invalidate the cached transitions.After building the breadcrumb path, [Ledger_catchup] will then send it tothe [Processor] via writing them to catchup_breadcrumbs_writer. *)

frontier同步流程为:
在这里插入图片描述

当节点处于catchup状态时,会调用verify_transition->External_transition.validate_delta_transition_chain

(* transition_frontier结构体定义为: *)
type t ={ logger : Logger.t; verifier : Verifier.t; consensus_local_state : Consensus.Data.Local_state.t; catchup_tree : Catchup_tree.t; full_frontier : Full_frontier.t; persistent_root : Persistent_root.t; persistent_root_instance : Persistent_root.Instance.t; persistent_frontier : Persistent_frontier.t; persistent_frontier_instance : Persistent_frontier.Instance.t; extensions : Extensions.t; genesis_state_hash : State_hash.t; closed : unit Ivar.t}
(* Full_frontier结构体定义为: *)
(* Invariant: The path from the root to the tip inclusively, will be max_length *)
type t ={ root_ledger : Ledger.Any_ledger.witness; mutable root : State_hash.t; mutable best_tip : State_hash.t; logger : Logger.t; table : Node.t State_hash.Table.t; mutable protocol_states_for_root_scan_state :Protocol_states_for_root_scan_state.t; consensus_local_state : Consensus.Data.Local_state.t; max_length : int; precomputed_values : Precomputed_values.t; time_controller : Block_time.Controller.t; persistent_root_instance : Persistent_root.Instance.t}(* full frontier中单个node为: *)
module Node = structtype t ={ breadcrumb : Breadcrumb.t; successor_hashes : State_hash.t list; length : int}
(* Breadcrumb结构体为: *)
type t ={ validated_transition : External_transition.Validated.t; staged_ledger : Staged_ledger.t [@sexp.opaque]; just_emitted_a_proof : bool; transition_receipt_time : Time.t option}(* Extensions结构体定义为: *)type t ={ root_history : Root_history.Broadcasted.t; snark_pool_refcount : Snark_pool_refcount.Broadcasted.t; best_tip_diff : Best_tip_diff.Broadcasted.t; transition_registry : Transition_registry.Broadcasted.t; ledger_table : Ledger_table.Broadcasted.t; identity : Identity.Broadcasted.t; new_breadcrumbs : New_breadcrumbs.Broadcasted.t}(* Root_history结构体定义为: *)type t ={ history : Root_data.Historical.t Queue.t; capacity : int; mutable current_root : Root_data.Historical.t; mutable protocol_states_for_root_scan_state :Full_frontier.Protocol_states_for_root_scan_state.t}
(* Root_dat结构为: *)
type t ={ transition : External_transition.Validated.Stable.V3.t; common : Common.Stable.V2.t; staged_ledger_target_ledger_hash : Ledger_hash.Stable.V1.t}

3. delta_transition_chain_proof验证

当catchup或正常同步最新区块时,会对delta_transition_chain_proof进行验证:

Merkle_list_verifier.verify ~init:init_state_hash merkle_list target_hash

附录A. 获取Mina最新区块API

可通过如下API获取Mina canonical chain上的最近区块信息,默认返回最新区块信息,最多可返回最近的10个区块新。For full block data use the GraphQL API.

$ curl --request GET \
>  --url https://api.minaexplorer.com/blocks?limit=1
{"blocks": [{"blockHeight": 131444, "canonical": true, "creator": "B62qphpEdBwSycpN67XFjcXSEY9j18chmttFTXYerhTPMX4JkXubWkd", "creatorAccount": {"publicKey": "B62qphpEdBwSycpN67XFjcXSEY9j18chmttFTXYerhTPMX4JkXubWkd"}, "dateTime": "Mon, 25 Apr 2022 08:18:00 GMT", "protocolState": {"blockchainState": {"date": 1650874680000, "snarkedLedgerHash": "jxdqjqb13YoWnqmcYLsLHzcufdu7WHhM5DPZcz77R6KNTUaHU7o", "stagedLedgerHash": "jwJ9SunhJxpAvTJHrskGnoXG6oD5A1cKV9CJpBy49iMsZnHmVhE", "utcDate": 1650874680000}, "consensusState": {"blockHeight": 131444, "blockchainLength": 131444, "epoch": 27, "epochCount": 27, "hasAncestorInSameCheckpointWindow": true, "lastVrfOutput": "EiRtbPoEfWdYFSmLFvXsybucaXdtuw4KHrzqU1JhgEePTmvGKV2RC", "minWindowDensity": 14, "nextEpochData": {"epochLength": 854, "ledger": {"hash": "jx29wpTRDF8tuMFXgqT8inkJhb5chPjtZiwgTHzs6GxsvAy5KiH", "totalCurrency": 911458252840039233}, "lockCheckpoint": "3NK7scXTiS5huxuaZZWhiDJLPu8aAWZmPau4q2RLE1wu3YppsSb5", "seed": "2vaMPjFYKDJpeBbyZeBkTXzuPBRLXA6PZpcKe1QrBkmdCmRAqmP5", "startCheckpoint": "3NKsqyz5gDjjf3rKjzNUFTPXbnth3ZULGfBzhP47uXUvSqkmrjvp"}, "slot": 1306, "slotSinceGenesis": 194086, "stakingEpochData": {"epochLength": 4924, "ledger": {"hash": "jxsdc9d3AkKmVSWZQExucepfuLwfzQHtZpiCFArGqtfVe5jveiZ", "totalCurrency": 907174972840039233}, "lockCheckpoint": "3NKkU6PNVgY6RNSgXpQ5V3mKdjNuwFWPB5DSsEG5tTnAcyscvJhz", "seed": "2vakgmuzxwow8WB6EBGggsTBZyRcbDTgBXJWJkWwvs5athQ1WeGk", "startCheckpoint": "3NK86sb3HTArDahaSLWbsMihC49N2rC72sYP2vTVEr6mq8gLNvqH"}, "totalCurrency": 912225772840039233}, "previousStateHash": "3NK7scXTiS5huxuaZZWhiDJLPu8aAWZmPau4q2RLE1wu3YppsSb5"}, "receivedTime": "Mon, 25 Apr 2022 08:19:19 GMT", "snarkJobs": [], "stateHash": "3NL3TectUwQUQW86AurwRCWz1H4n4cQRXyJZa5a7AmtxQ3cCe4NH", "stateHashField": "13610166132023585511305744971845126343390668980628345075948931205879504829316", "transactions": {"coinbase": 720000000000, "coinbaseReceiverAccount": {"publicKey": "B62qmybys2vViMnedZSheEZ6ZSBjNwXHr9uBDy8kMUEJx8UsJ53r11D"}, "feeTransfer": [{"fee": 91100000, "recipient": "B62qmybys2vViMnedZSheEZ6ZSBjNwXHr9uBDy8kMUEJx8UsJ53r11D", "type": "Fee_transfer"}], "userCommands": [{"amount": 1000, "blockHeight": 131444, "blockStateHash": "3NL3TectUwQUQW86AurwRCWz1H4n4cQRXyJZa5a7AmtxQ3cCe4NH", "dateTime": "Mon, 25 Apr 2022 08:18:00 GMT", "fee": 1000000, "feePayer": {"publicKey": "B62qre3erTHfzQckNuibViWQGyyKwZseztqrjPZBv6SQF384Rg6ESAy", "token": 1}, "feeToken": 1, "from": "B62qre3erTHfzQckNuibViWQGyyKwZseztqrjPZBv6SQF384Rg6ESAy", "fromAccount": {"publicKey": "B62qre3erTHfzQckNuibViWQGyyKwZseztqrjPZBv6SQF384Rg6ESAy", "token": 1}, "hash": "Ckpa1G9q2VATS1kHGqyoUjZUtMtNw7UiSBZJwMrRM5riopodrA9ji", "id": "PSJ6tbskxprEcucuCKvoyV3ujHYFFvF3crYB37cjvPWsFzwkTTem7pXZRuwMJWSgr6JRDZhj2Gt1K3KokxsQ1diisxyESSyQEWZ2DoqF7Yaaox45aJcPHQFFza5es2wjLwyDRXYT6fujqbxfYgiwN8dxCnCBwyx3TND9FSKg3a7bzSFhGd2npF7XjBaC86wsJgtrKg7yNcUj8BvtkpHvpJBPG8QfxHoRc3qr2z1MbZVu3LQK7G2n12W6sTDNBJuxNEAZiV3RPTVE6VmsfHfPhtXDTgd3dai2xBc6WP7Hj3V5hXu6WrScCbWhoku8BF6mxV8ahPePo8oQUhUHtDcmwXVH7gsN1UhprJRKzvnvmferyLcubwti1ZDKgUgH15UVxjsCtTp3k4mWP", "isDelegation": false, "kind": "PAYMENT", "memo": "E4YM2vTHhWEg66xpj52JErHUBU4pZ1yageL4TVDDpTTSsv8mK6YaH", "nonce": 184335, "receiver": {"publicKey": "B62qjYanmV7y9njVeH5UHkz3GYBm7xKir1rAnoY4KsEYUGLMiU45FSM"}, "source": {"publicKey": "B62qre3erTHfzQckNuibViWQGyyKwZseztqrjPZBv6SQF384Rg6ESAy"}, "to": "B62qjYanmV7y9njVeH5UHkz3GYBm7xKir1rAnoY4KsEYUGLMiU45FSM", "toAccount": {"publicKey": "B62qjYanmV7y9njVeH5UHkz3GYBm7xKir1rAnoY4KsEYUGLMiU45FSM", "token": 1}, "token": 1}, {"amount": 1905000, "blockHeight": 131444, "blockStateHash": "3NL3TectUwQUQW86AurwRCWz1H4n4cQRXyJZa5a7AmtxQ3cCe4NH", "dateTime": "Mon, 25 Apr 2022 08:18:00 GMT", "fee": 10000000, "feePayer": {"publicKey": "B62qqa9g4CFfkSuX2j22S52z6UfcDcS9tMTgQrFKZ21v7GrEP6Zu5Tc", "token": 1}, "feeToken": 1, "from": "B62qqa9g4CFfkSuX2j22S52z6UfcDcS9tMTgQrFKZ21v7GrEP6Zu5Tc", "fromAccount": {"publicKey": "B62qqa9g4CFfkSuX2j22S52z6UfcDcS9tMTgQrFKZ21v7GrEP6Zu5Tc", "token": 1}, "hash": "CkpYtQ48qS3CaHkaVB7okZwKLq4twFg56ofN5yKe37SZmtTP29kPj", "id": "PSJ6tbskxprEcue6aySgF6jSQg4w7tC2a2QekB6rDZbAsLEVPoXdyHSt46774q9KkPyeSsQuKAsoByhMgAz3jU7iC6rbfuhHShgNvCDZbbDzrJpGLxxEWbH3BiHXd83WbY1axTsCQge8mmKAvixUADTQmhS5Va8ayoYCt87DHkAMEqscoqVn8ufdgB23EHX5G5gyttrsfhahL8pUBznSeAB3Lvu5Z673VoT3ahra5efhZt34iUVJiyK9ATY7J1FBfF1m22xsmeYsfcoN7DXTgwv9VqxmKKJDQaBY1EQtvRws7QX4BVeQfawTRPmmivEQCNMeFZYxUdwuEanw93LEAkqLdgbPe3t9K7aqLiL6aasFSQ1dXAjLqGgbEpYCdnPzGTFdxfGCTX337", "isDelegation": false, "kind": "PAYMENT", "memo": "E4Yd7qwaRCHR6t7i6ToM98eSUy5eKKadQUPZX7Vpw4CWBvWyd8fzK", "nonce": 4187, "receiver": {"publicKey": "B62qq3fsYyjPWfhLSfoXDd2dxopsrzCPaQnvfdQm3wtmHT9UarBkh3f"}, "source": {"publicKey": "B62qqa9g4CFfkSuX2j22S52z6UfcDcS9tMTgQrFKZ21v7GrEP6Zu5Tc"}, "to": "B62qq3fsYyjPWfhLSfoXDd2dxopsrzCPaQnvfdQm3wtmHT9UarBkh3f", "toAccount": {"publicKey": "B62qq3fsYyjPWfhLSfoXDd2dxopsrzCPaQnvfdQm3wtmHT9UarBkh3f", "token": 1}, "token": 1}, {"amount": 253303898779, "blockHeight": 131444, "blockStateHash": "3NL3TectUwQUQW86AurwRCWz1H4n4cQRXyJZa5a7AmtxQ3cCe4NH", "dateTime": "Mon, 25 Apr 2022 08:18:00 GMT", "fee": 10100000, "feePayer": {"publicKey": "B62qopdvPkbF8Gp3Uafs5zPgmTnqCPe3arBoT5xCZ6CjenYVuDBrzjX", "token": 1}, "feeToken": 1, "from": "B62qopdvPkbF8Gp3Uafs5zPgmTnqCPe3arBoT5xCZ6CjenYVuDBrzjX", "fromAccount": {"publicKey": "B62qopdvPkbF8Gp3Uafs5zPgmTnqCPe3arBoT5xCZ6CjenYVuDBrzjX", "token": 1}, "hash": "CkpYYo8BCAsr7eY7UVbqUswPKUsFXXvPL3JKZPabrpAiWhA2jckNb", "id": "8Y6GSZvuW1bNvwdV9zWpr1LrtTAJmAgyskzbbvaNBVayaa9CHDTskBPCcgkwaTcfcYTSgoex6KgRw4FYtN9ZLo7uA9gd8djS4TbShP53seShLg3KXfBUdeWHmwqUeJqymta2iZSaWjzksLBYimCAfecsoer4CTePLmKhLRPuUZDA5nrtNqZVCaNx5Kudv9PNGKbm5Z8fMcoRamLNBbyq9uDKzmdvgShnLDoYVfE4PLYrPbEJMcpa24fXGa8J1eXbvKLoHtpUfSgGaxBH6YSKhPnsBP6bW35vjjns5eCNnDeBArfjzGK9WPmfNPeYbZ78HGXNimddBcBzcYyCFsgD4Vj7n2SqaqwLcBNkB6Hz5xaV1LF8qVM8XYiTk9R9apGy7ENXHgy67nBW53oZ", "isDelegation": false, "kind": "PAYMENT", "memo": "E4YM2vTHhWEg66xpj52JErHUBU4pZ1yageL4TVDDpTTSsv8mK6YaH", "nonce": 1, "receiver": {"publicKey": "B62qpEva8DE1Z6KPSi3MpZEKgrrNnj7ZGVF5PzKD6RXVgU5cxmD4JM9"}, "source": {"publicKey": "B62qopdvPkbF8Gp3Uafs5zPgmTnqCPe3arBoT5xCZ6CjenYVuDBrzjX"}, "to": "B62qpEva8DE1Z6KPSi3MpZEKgrrNnj7ZGVF5PzKD6RXVgU5cxmD4JM9", "toAccount": {"publicKey": "B62qpEva8DE1Z6KPSi3MpZEKgrrNnj7ZGVF5PzKD6RXVgU5cxmD4JM9", "token": 1}, "token": 1}, {"amount": 38951000000, "blockHeight": 131444, "blockStateHash": "3NL3TectUwQUQW86AurwRCWz1H4n4cQRXyJZa5a7AmtxQ3cCe4NH", "dateTime": "Mon, 25 Apr 2022 08:18:00 GMT", "fee": 20000000, "feePayer": {"publicKey": "B62qp2BETsTNsFg1TXcbwt4zYH4SWgjvGtNB1SjKWhb1m6xjYaW3Us4", "token": 1}, "feeToken": 1, "from": "B62qp2BETsTNsFg1TXcbwt4zYH4SWgjvGtNB1SjKWhb1m6xjYaW3Us4", "fromAccount": {"publicKey": "B62qp2BETsTNsFg1TXcbwt4zYH4SWgjvGtNB1SjKWhb1m6xjYaW3Us4", "token": 1}, "hash": "CkpZZJ3LZUnGMCDSnNCXEDfXnDFrcwUWAtz2huy3eSFFRYuo17LGN", "id": "8Y6GSZvuW1bNvwdHapkk5X5MbRx2ikTCaYmKsZBVCedhH9RM8B9gQEgT3VVm8Crs6u5vHWHsHqytYDQf9XbRmawUfVdThyka2AgHMgq4Hj82Mdr3ti4L8PWffFwXNhnmHuZRKyH4iuK5Qf9eWbEhuusgeEoJwseU5fXkgufHLMC9FEuNCu2vv43EQmxmkJa84n9PMLA1WCxcHqMQ8hAw3rGeVDPjYys57YfG7c6DjcTB4H1UdDMybrUUjPWFn4xtkMMNpRmPLcKaheoyLvxM6qy84rTEUuhzvxUREFzCDaWBp2CRn1VcN2fTE1kprtoTo5hJBdk4TYUssHHeCTwUBF3Dk5VH2233fdhQezYQBu4K7Px9cX7i3kwnaEybnCtQrN9uEuPCghUNZD9j", "isDelegation": false, "kind": "PAYMENT", "memo": "E4YM2vTHhWEg66xpj52JErHUBU4pZ1yageL4TVDDpTTSsv8mK6YaH", "nonce": 2, "receiver": {"publicKey": "B62qpq3jk9tAb52DTEZaLhgM7j8EgXX9U6Xkm5n9KRXVdgLwi4ad8tL"}, "source": {"publicKey": "B62qp2BETsTNsFg1TXcbwt4zYH4SWgjvGtNB1SjKWhb1m6xjYaW3Us4"}, "to": "B62qpq3jk9tAb52DTEZaLhgM7j8EgXX9U6Xkm5n9KRXVdgLwi4ad8tL", "toAccount": {"publicKey": "B62qpq3jk9tAb52DTEZaLhgM7j8EgXX9U6Xkm5n9KRXVdgLwi4ad8tL", "token": 1}, "token": 1}, {"amount": 730458000000, "blockHeight": 131444, "blockStateHash": "3NL3TectUwQUQW86AurwRCWz1H4n4cQRXyJZa5a7AmtxQ3cCe4NH", "dateTime": "Mon, 25 Apr 2022 08:18:00 GMT", "fee": 50000000, "feePayer": {"publicKey": "B62qmLLkkx3y22DXfNACbF24dSiBVjvAQVLup9RBXhNvgDVQkkvLbmT", "token": 1}, "feeToken": 1, "from": "B62qmLLkkx3y22DXfNACbF24dSiBVjvAQVLup9RBXhNvgDVQkkvLbmT", "fromAccount": {"publicKey": "B62qmLLkkx3y22DXfNACbF24dSiBVjvAQVLup9RBXhNvgDVQkkvLbmT", "token": 1}, "hash": "CkpZ3MA7iLm8dDtwv7nDDYdmEFFmvRkxuts7qoZLxTxgPP4DmcTw6", "id": "CB1PypTjpLT56HzVoH38qjS2Fth7PNdUviE7xKgsnE8T63PKz2UybbM46HC7V5wJUUhtcdADpV7hKdmUcRXt7Hm7CaP9qnDtfH9gvAU6jTym4jWBa4TCztHfh86aou7ZW3eEFzM5CrMCV3rD2zSzfHkGVNvBHvmTbvxgddj33Cb7JqXSbY8Fem1XxnWwaSu4wnXgQiz2fAHc9xSAi1K2EB9yh5sbhCE3FBMYJeP12nSa6q6J4k3H5Q3WVrVwvLmsznXsSqJam5ya9df4TmFoVswL94EQk14oHhDtVjkheg4j5kr33majEs25soMQeBt6ZRWWiZ7JG5dw7cJWjeUo2DxVfwFgFE2YWKtXEUqPWAMk3qGienVNYxw4mUGWzMfS8eZPxBD2xTJPaRduxrDi", "isDelegation": false, "kind": "PAYMENT", "memo": "E4YM2vTHhWEg66xpj52JErHUBU4pZ1yageL4TVDDpTTSsv8mK6YaH", "nonce": 0, "receiver": {"publicKey": "B62qkRodi7nj6W1geB12UuW2XAx2yidWZCcDthJvkf9G4A6G5GFasVQ"}, "source": {"publicKey": "B62qmLLkkx3y22DXfNACbF24dSiBVjvAQVLup9RBXhNvgDVQkkvLbmT"}, "to": "B62qkRodi7nj6W1geB12UuW2XAx2yidWZCcDthJvkf9G4A6G5GFasVQ", "toAccount": {"publicKey": "B62qkRodi7nj6W1geB12UuW2XAx2yidWZCcDthJvkf9G4A6G5GFasVQ", "token": 1}, "token": 1}]}, "winnerAccount": {"balance": {"blockHeight": 131444, "liquid": 1180040858424360, "locked": 1000000000, "stateHash": "3NL3TectUwQUQW86AurwRCWz1H4n4cQRXyJZa5a7AmtxQ3cCe4NH", "total": 1180041858424360, "unknown": 1180041858424360}, "publicKey": "B62qmanR1vreSJgKYZcHSiNrov8jvXShfcjioaBLpCGbr7vrt3DxZq9"}}]
}

附录1. Mina系列博客

Mina系列博客有:

  • Mina概览
  • Mina的支付流程
  • Mina的zkApp
  • Mina中的Pasta(Pallas和Vesta)曲线
  • Mina中的Schnorr signature
  • Mina中的Pickles SNARK
  • Mina中的Kimchi SNARK
  • Mina Kimchi SNARK 代码解析
  • Mina Berkeley QANet测试网zkApp初体验
  • Mina中的Poseidon hash
  • Mina中的多项式承诺方案
  • Recursive SNARKs总览
  • Mina技术白皮书
  • Mina代码解析
  • Mina中的Snark Worker
  • Mina中的Scan State
  • Mina中的VRF

这篇关于Mina中的delta_transition_chain_proof/delta_block_chain_proof的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/305156

相关文章

13 transition数组的动画使用

划重点 动画:transitiontransition-group :数组动画数组的 添加 / 删除 豆腐粉丝汤 清淡又健康 <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><me

12 动画transition的使用2

划重点 Vue 动画:transition / transform在动画周期中执行动动画(上一篇是通过动画样式控制动画) 清蒸扇贝 <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><

[Linux Kernel Block Layer第一篇] block layer架构设计

目录 1. single queue架构 2. multi-queue架构(blk-mq)  3. 问题 随着SSD快速存储设备的发展,内核社区越发发现,存储的性能瓶颈从硬件存储设备转移到了内核block layer,主要因为当时的内核block layer是single hw queue的架构,导致cpu锁竞争问题严重,本文先提纲挈领的介绍内核block layer的架构演进,然

DELTA_IA-ASD_ASDA-A2简明教程

该文章仅供参考,编写人不对任何实验设备、人员及测量结果负责!!! 0 引言 文章主要介绍电机的硬件连接、软件配置、转动调试以及软件控制。文章中提到的内容在产品手册中都有说明,强烈建议在操作前通读产品手册,这里以《DELTA_IA-ASD_ASDA-A2_UM_SC_20240510.pdf》为例,简要介绍该产品手册内容 文章脉络:硬件连接 - JOG测试 - 位置脉冲命令测试 - 软件控制测

block对变量捕获的方式

之前见很多文章对block捕获变量的方法,会进行诸如此类的描述:“block会捕获被引用的变量, 并对其进行copy操作, 因此, 可能会导致其引用计数加1,如果处理不好, 可能因循环引用导致内存泄漏。” 实际上, 这种说法并不严谨。block对变量的捕获, 根据变量类型的不同,会采用不同的捕获方式。 (1)静态或者全局变量, 在block中直接是指针传递的方式传入block中,对其进行的操作

webservice系列3---chain

本节摘要:本节主要介绍webservice的高级特性chain的开发和配置 1.引言       之前在上webservice系列2---javabean&handler中讲了handler的使用,当有多个handler的时候,难道我们要一个一个的在wsdd文件中配置,然后一个一个的引入到需要的webservice中码?of course ,no。Apache组织已经替我们考虑到了这种需求,ch

Linux block_device gendisk和hd_struct到底是个啥关系

本文的源码版本是Linux 5.15版本,有图有真相: 1.先从块设备驱动说起 安卓平台有一个非常典型和重要的块设备驱动:zram,我们来看一下zram这个块设备驱动加载初始化和swapon的逻辑,完整梳理完这个逻辑将对Linux块设备驱动模型有深入的理解。 zram驱动加载的时候会调用zram_add函数,源码如下: 1887/*1888 * Allocate and initia

设计模式 -- 职责链模式(Chain of Responsibility Pattern)

1 问题引出 1.1 学校 OA 系统的采购审批项目 如果金额 小于等于 5000, 由教学主任审批 (0<=x<=5000)如果金额 小于等于 10000, 由院长审批 (5000<x<=10000)如果金额 小于等于 30000, 由副校长审批 (10000<x<=30000)如果金额 超过 30000 以上,有校长审批 ( 30000<x) 1.2 传统方式 传统方式是

Flink 原理与实现:Operator Chain原理

硬刚大数据系列文章链接: 2021年从零到大数据专家的学习指南(全面升级版) 2021年从零到大数据专家面试篇之Hadoop/HDFS/Yarn篇 2021年从零到大数据专家面试篇之SparkSQL篇 2021年从零到大数据专家面试篇之消息队列篇 2021年从零到大数据专家面试篇之Spark篇 2021年从零到大数据专家面试篇之Hbase篇

重磅 | Delta Lake正式加入Linux基金会,重塑数据湖存储标准

大数据技术与架构 点击右侧关注,大数据开发领域最强公众号! 暴走大数据 点击右侧关注,暴走大数据! 作者:wwwzw By 暴走大数据 场景描述:2019年10月16日,在荷兰阿姆斯特丹举行的 Spark+AI 欧洲峰会上,DataBricks 和 Linux