☰
Anatomy of a real FCMP++ proof
We are going to analyse the transaction below.
Testnet transaction 1 input / 2 outputs
{
"version": 2,
"unlock_time": 0,
"vin": [ {
"key": {
"amount": 0,
"key_offsets": [ ],
"k_image": "80e251c490c65c224a758c2caab46291ffe5d994232079ea37e3806ef2876584"
}
}],
"vout": [ {
"amount": 0,
"target": {
"carrot_v1": {
"key": "0792db64bace803ba7ce997fbe8ba6d935ca5bfbd527e44f7ca3dcaef17794a1",
"view_tag": "728ef0",
"encrypted_janus_anchor": "729fccfbb96c2be286c2519e9fb4c003"
}
}
}, {
"amount": 0,
"target": {
"carrot_v1": {
"key": "e44e0f9ef408366bbc4a11f8ae8f33e2a3e08157ed0ee5e241c8ef63462fcb5a",
"view_tag": "69dece",
"encrypted_janus_anchor": "5a84eed999a291d15ec3787523b00098"
}
}
}
],
"extra": [ 4, 2, 139, 23, 249, 69, 114, 105, 158, 208, 233, 120, 62, 167, 42, 193, 110, 24, 56, 78, 19, 12, 172, 199, 163, 228, 32, 157, 245, 129, 121, 180, 82, 78, 243, 134, 81, 139, 165, 169, 85, 240, 44, 55, 189, 172, 253, 173, 108, 184, 77, 229, 175, 58, 38, 154, 133, 222, 44, 0, 23, 115, 231, 164, 221, 91
],
"rct_signatures": {
"type": 7,
"txnFee": 600000000,
"ecdhInfo": [ {
"amount": "86a9b4d43efe4e09"
}, {
"amount": "fda219b8f3030566"
}],
"outPk": [ "99110cd5fd06ec29a4a32423bf04967194b3ad38ff45c99736a688689de29bc6", "9e5ebc7e7a3890fbfc51614379d52c0dee4ff93b8256fd05731b4b2fa3a18656"]
},
"rctsig_prunable": {
"nbp": 1,
"bpp": [ {
"A": "d4eabc649f89889e34f5da107b9d087339bbde961317a75b9ad665cbf6afedc4",
"A1": "788ed6be888fc0e6daa40b42d6b1abb6c40ec0606ab923f523a395d9f4d8203d",
"B": "1a264c7e8861bbcda8d5d33949564159a0e4bc1140c6f47aba1f6c2dd4251d02",
"r1": "c43f430e8a594b210918e6c25af54d434ce94883dd4b3bfed2ad19708ff7ad08",
"s1": "bb15a2a0a5d04b695e39cbf4d7185ffea40750e87c536cc24a73c7b36bfba20d",
"d1": "8ad7aa46c44628773995a31eb74d9129131e5cc5b7e4c528ee3b88fa4cd8d50e",
"L": [ "cc989f321bd35fc86abc538043cbf99e72c33a72a592c4d11854bc721cc84364", "4816b9b6ba9d87076751ffa887b48721dc3536445b70167ef4f8eae33a7e092d", "46f455ad786a659b076346582026f97dc76e16c99b60909ee7a91c13c125c7cc", "5b73a57806bd64db0364e6ac99dfe8c3a0647509c58077f5ef868f790ea22fb6", "9b242d174578aa1cc733299229b57afa0a6067ae2ae85436fe548eb8c4e9e361", "e45fdb1dd726a5d2cf6b1f69a79e76477eda93d56157ebc4efd0223ac0eb0f1c", "bfd099a99d0dc6bc165ee78ba86081668a26899f9256ed86ff6194c4cdb772bd"
],
"R": [ "2223f9a581336d01bb3699f931ee7d5155b7f53d998803aba76b30a7f90040f7", "8606934a39f9ee01dd515614e94c44cfb3e0de13cb021d997206451d850bd4df", "9d84c0c37dbce3b1b15154c6fdc09ebc37cc882b9a0f175cd584950d990a9df1", "b3e81fd5ee6910a3446055058025a666adfb936c08775542b742a4108f51ebcd", "b76ee97ffb6d6bb557447e2ef306fafe71bca21be780efa52301cb90e9bb92be", "6ef16fc8648e68ac3de3dd215a1afccca8c83dc12c3b45ae640dd4e684c9d806", "d8753041dc3f7f7d25b41e86f04d17c2e0238c173c0413770fb8216c51bd4d99"
]
}
],
"reference_block": 3073976,
"n_tree_layers": 6,
"fcmp_pp": "f71b2aa43485e2f1311d9ca29fda2af06d17f0d2dee91ea1e924f2f174f5fe5051448a0ccf621d52939d34b74e6b4c0f4ac3edad30645eba0323f4533fb0b65035c61ff53e702b2be7caed908739db92d13da85e87e1acfddf4ddc622d3104761924f4e4cfc5533081bdfc1d8eee24a62f40e61ccbed2705700d2ce3abf1ac300ac37f5eb3d5f60616e286316160f50f477d48f715cc7e5f6bad3219945537c8dd1286b09cbf6e88077112f04d3e74741c3270089887b21c931544ddfc118c307b9f1acbc068ea4cd40f61c0632137968c066054080888e310b7c5a8f39c24a79a2871b0b1e37221ac5fe4503e68742bec42d3b3808299f86d7f18432f41d7fc6e930a718752e86f80c52e9282ab782b8e5c1ab51b6e6cc0a280fdf3a2607ddd5d6fc8d36a1832c4b2affc4fd420ca25361f346fff18549e6364448a6338b50ca54b6199c6634f5b78d55ec101d6f2e59168d08d4f275d70205a4fc4938e1e01b015b0d4667cb20dfe63032644a40957ae4ee675c9240be10c579416ee10af015b930f6189a8f28b7941cdce67e4009865e869ebe68da7d863970e3805a6880bc40b21d9bcc406fa5f4422aac31f0254205500c214ed5fab3d55b491dcd46b0b1c76474565672b5464eb971e5d5b751eb0895cd69d8a86a8ad1a4b24c1199c0b9be834bc026c16cd42d81eb73cfcfe0fb5fe3d6e710e072e330d7b5b8d357f594b2c2c109c0f98472bb88b8b9b665d27249033815da3dd850fad29ef761569a09e3e52d050d6bd7869ffa209a248140bec1281924ae6c24355e4d710d84e4d671872afe8f097ec297b635d294562b5c95882326ea84ee96c3f4325282dcfc15084abce2a9704379d9639f82add2145a4ab7788b57f5ce578f54cca07fdf2346e0bdf9f2c0917e6ed2d660c0954c9e50cc50279814d0e962e63f38d8550299620e20b08f53834f024c3f242ffee939a7834a6527f396438c145c592ec7b1bce4e18127abf5a1a237c3b6325e6af7d6e83f7f5ccfc66f47eebca6ce6ec8b9f141ec939be976a4073ee90efab41defb272adc6ea89748a41e644566158f9fe587784d2eedec6e084845b95b09bbaa9dfcf0a68f259d4417554b133c5c2db6c24dc4bea608e804076e9535491a65eacf0d06d972928ff398a7614b059bf1b0ad52326d97f8a528841416dd8c60a37b942ecebf9cc6f49c9878721889a12e88d0cb8de6f89a7192b308cae8b67c045142ab332d87a5c29fd008e2bf99d72785a7a8ec240a3660f4fcaeee722c466ca85f6452eed28c6416d6254fb36a4452f21b4c43351bdcc04eceb739aa018427c49d518897b50969bfb7d9b98891d9402224b9e21b2491d1076ea4386316159d8e1bda57f840e4faffedb8dd66e1133191f453e8c98b1633d153abdecee2c19d55309a75ebcfe610643935545564ceadff98af4ed708ab3de741e084e696ccb0d6a474462bdef46bfde7562fdb8829e68cc00a167ed1879cbe0b9919260a1cdc06c3a47c4dabf08b1d8457c3f35c11e01bc8bb4b1ed2b0a98eb8e6fba86155369d3bfe3271087777b1bc664eda4513ebcd2128b45b77613b90f2b90fb4079949c48faf0f4259038bca8570bdeea0e8580f3e7626fec7cdd4b430d469a5aa393e35316e24b70695e6423f9cc8efb9624245d0a3f694c5c84941ba74eebe3cad71ad34cca4e5ee1d65b8413d1e7d9a40409b2bae53b0fc067f31bd92f84d5531ca88ec8814599f0e870f0333a3a9332a18993eeca12410a6cfa146f3153f8dc1c5c1ad90dc3fbfcd171c73344448b8e24dde01dd058ce8a81a1d8c83cf5424a6b51f9e528339432139154ea55280b0678691c3f672772a7f272986475a5c3a1a1385f87388a7f609f9801c1d3d3da9521e93ec38ae70748e6282662a7f214dfb7141a12c5bd7454156b8aace66df628c2f5e13ec63e35bb545f2e9cc5e34e5fdb0ebc3ff9bd4cb22d601a7f12d4b4131db6dae5fe17c3ac016959bbbdc71f9d3d30aa9c6edf43d07ff4e0469b2d0e865b792f71ab5b68e24c4f1f220485879b6469df3e857519bb8f051f3b91803e3455f17cf00b5d8ca6ec7121d2c8771785d2737f2bac7bc75780669e01017e05a02d056b0327984d7f1d2dee4226e85043bd887164acd8b7b430d54b5fb1bd5be7af8312e333d3b2410ad93d81f2a3c925cfbbc480077a6c173e230647b0ddf5fdb5d4699f40d299861cc6bff900442033e608bf8428beea737a40f856302f93e732099b50907498f67949bc8dd68d833bd0307e54626f63806a83f1fd953bd171b9cefec651ccf24a83f4039cde1a5dd9d8877444d9426328c58a6265d700074c448c4360fac88e33db27874d3b80050639f561c614ef753f1df9a3f6252578079bd68223d3c70b8d76a5754ac1e3dcd36d18197dfd592038ec03156fcb87ba220b19bb970733ecdb9419a28bcb2015198b6de0fc024dc076a32e0a2839b8a80ccfd73ea7824f16ed075a12a7bdaea9b8963826e905dcb172eac7f33ec31e43f358d9dead0828edaa0c97772cb7d72501e24d328753c9caf60e2f67f868a80cdea57a4a6232ee44f1cc8fb8f257e4fc87b93a985abdaa7743f92943b424ed59f306e1e13d222142715b2cc99e93c2e20935ac4b75b571facd4293fc68d8334d839da8ddcda7c00eb71a0837d2b1fba74cbdc776896c80b39d5d6724112cb99d79df2539cf112183e4113edd7888bc4b5a6ac7b6b9dd25084b091868da82024b5aeee7f2e151735c8de3445755d4fe5d9291e9af90d8aab053885835161d21713c611f89113da3f4ded2fce7889807d64704d2e3ff8f8542ea7e329a847ba9b636e3ec9850e885973b4cc0b8e4df0533a78bccefc7f9ea3534992c3535e00f7e7ef7bb56357ff4c45f6bfdb412c717240f931e6edd245c4af5a4c0f8b33d40d3dc8d466a9a52e21d41fb703114a516412303183df0e4d0bcc7076ed925d00f3daba27359be8b24e67244a04d4183062e5051d15635c159e3a5c59f281be6e76ef627f89ec76195b0e8d7b8b03dc73f75ee1994ea5a3868c0bb4a315f43ca4a12977af86ae9756b16cf72425712dcd60fa6711835c6a9c50145d948d84f4cdf62ddcb4d12ea31dc8aa3c4a9c564af4563aa9538f0edb433bce6cc8be9429d41a6370560bbeb2dee8ce7ef2b6f192d73ec8405c8da22405a925f2ad8e30237281ced4eb4569c4fb1a2620ea8d3ef530c274d149ab9b1801530055dd03500f043608d40a54e6cbf5a0e773f660064e0c373d79ade3abc1f9e76209037dbb15ea1322af4059ee4bb9c77d88c23b17eb58790a5e041b901513dbc595aa7bd40cdc904e728caab4282ed9f1e3576afab58d0c9884a3d2ebd31fd11860613dac33b32d51de1c065a39e2242207757995986e7124cbf00fd6e1790921db7891649d02c290ac742523efeae80be3fae9267d12eb313e54956fc571ac03c0f57d7cfc0e7a70102f1facfe6eb722c0bd83071ac9df8db1982884a66f48891833932aa9f6f9afb30a3ae0dc8ca3a7a2cc8b85d6e549f4425628e522c3be2f6093d1b7e05f0d11dd00bc2f8fd937790974722028888072c52089679d51bb892ab181b0fc05aa2a7a3b4a7d203f4cf7ec763a6e23c4f04bb913a051d12126729166199ecf2e8c9e66c93868e119e14fc9751a184413b12e4e8a9e19390fcf42d24570a0aec9f77cb227daf06023bc22dacd00035be962b7a5fb793bfa1bd4188153b8376adc91404678f29464c08c62dbf4e9c34c590a891871f07d0173912d307cfbcfeb4e100fb3cd11bc02a2142f3612f690758934b87390446fb9ff125041823c81325802736cce005aa4c42fd12dd377d10d8317d215fe6ceb98d08c7f04fadca64475dcef40e2fa5de2edd8ec1b8568dfc8b6864805786f2ec1449d386ab55c367b5af606d51a95be28e1bb847113a655ef8a9c92be210706b270cd009076ec8e2cfb79fa1d86c97faf205aa8a95d5c68b353056dbdf94403103dbd65b928826ed954c42a4fdff27174231bd86beb7d2e7cb591c73900def300accdd79f0359dbcc0edb059cf60832b767aa7a2a77e5ac552d72d0609320d25160579861eb569d536d01407d6d04b8438a05659f8e1908673578333f00ea5b252f0ef0cf580493bd958c2d15ab911abbddd800f56a1d878c0a87bb5160dc8c0bc4f22eb5dd621d6330a0ddfbfdf07e035dcbb9def8e98ace1d54ac9868120e83836cdaf02578571c106c91c0237158aef39701642120385e7ff79a5934adefeba2b35fb2275c8db10de231bc13f1bc262c2f5a05ec75c5a2f07c0472ec685e01526d512aedd9a52e43663c7b6c8c5bddf9b3f218c7ed4eb2882151c5a3aebb649c00ac3924e2e2d9504c258015b7c7831df4e71971ffea0a94a1481cd98a0cfe2906ed87ac910bef2592b803a87242d242565c27e98548188610b15fae077a8fad85a605d8c2517ef7429cda5431da22ce18f32841ba8acab75e0a7208bc32c0e7a9b378be7ec46197b08c374008d68493774a32cf05231ece16eefbf790436f4ca3835edc4a345c0ed2747014425733e23d37190f7efd43b67c9993a9c37987c483262822b17dc2b04e3e126c75645b0a41eef7a21ce7de3ad3c5c6bd5f1838d889f10ff7b8ab3b4a5d208c7eb57f202929c3673573a3a57fcc607651701998838f479a6be3a778ab100cff0eca7834674f210549a9308ae6ca0df3d93321ead2a40eba6c8845b127c7413936483e332340d1a668e4f1e6a4afa040df54c1c498c1afb27e4f2e76dd68af2fe6effe83b16e4b406890a4d6f3000719c233c9f2a9bdf42a458c7f649add7be6b2958386f9b582e8ef619b13aca0caa142840f7952b88ab604d459096f32b33b8a19e3052f64cbd322bd3900994affdb28e7d52383280ac6d8cef0002ca054ac497358bc34924d4e044a42c19ebea0b299f4ebf214d509419fb0d4f4b463c6ba71d28e4dda519ef1db772d587c1e4efb702ef31119578c60cbdaa17fb2b6d6d9c53274a68dcd99c020a0c183904a7c2a74946893bcde0133eaffb9e3f61d1b3ec23e22574f26f8b9ff732c02a7dba1d919164ba5fcc54cd6860b7a995157c54aed3b03d5f25b252bf6674b7bc06dc6baceb4e0f8142d587aeac11106522e6ec1dc9931e796d7229d53d47fb2010d6f50327355835e77ba496fe413099e356d113ef6b3be8051e6f7e6162fb07d116e26ef532fb1382e2a76e66b9ba5506a044ebc72831bdf68573891c57ece505cc391662802757225dcfaadb89a866281c9f737623d7ed061847c76cc34707de28e2d939b7cf96edc297d67488f178ec93969af078b0686efa01185bdf78f326c57d7ab2bf0e99d85fcac95e13ff29da900bb96dbae4b989fd3d25d25caeeb14043bb0d20f23abcfce3edf8ac2ff24e2476a19adbe7f132dac3ff8610350684338e93d9c7d8f2f073aa6e025103eb17c4e019f62d77ec8066aaf0ef7fd3cbacbafe9fa15ded252bef70b9b0e4ea7d27c1865a5b35741e3d1845c797748983c0a567358bf6758f49193c3f302472709af48a1dd57fc4540276447122479d341e58757559b7551f13cdf51cf5bf1dc3f37f8ab5573d498a0b4fc25b25886a752df97d52bda36da9be09e7f1b78a6c36e7eb645d7fab9ab3b804d0ef2a1655bc232075074c6cd7234cd83579ed7056210a5f053a8aec5eb187e52f758b400a7dd14f466e47329b93da8f9ee84f802b6664e4a1b08d1fc72f9eb0218f007914f01be417f581cef7db887265b230b2f116e3114b0c3ff9e4698f1e311a4a8c7deec10be66b89dabeb58a28f32ef90c1df4abcd4bd290e2f8a4f141e8e1ed7397a02e3b2fe7681b2a1fa189accbba290ded1c5e7ff3ece769eda1cdca3f714ab22ae9ff275d7fb1fcff348a8b806edcfa54083711a18b543752b03cd80389987f5027aa3745ae1476a797d8c400706bb02ad9cdb068067cf0361d5c814e087a5aad66ce76cd17263dcafe0ab9a5a7cbeb0382e4a9788fc6c591703ab9cb06fcc7fb78923cf018a6af7b6a59f1e0550d4777c8f64d5d26fb45b99b55d503a722579ddcec4253cc74ff44e58458315a0d8ebd4efe53671b2f3b043edcbf6aab356ff60f772f3a326aa08aacf84726c5881e3f6b24f49f93640a33f2cb74ebdedea728097a7191eebfd9353523c96f56c1c4792a67eb0524b88bcfd1d812ca678a7a33ae509f16e9f192ff58daddbf21d093dbc47c46824f4b51c6dfdf9907111ada4fc534179c871451631d2f840b1627d8b72639f1212b928d82615cae22ffcec73b9bcc243657452c7dcca3058e25ae1391911728e97cc4bf103248085f24c0e638778cf0241e507b8ee20e66ef32ab1cf20430584a8347b44ee22ab40a56947a97496c82e5eb752155db89f9bf96d146648fe1d0c98fa346bc9a39b327b59d78570b6f67d0fcc43be456e042b9e750f21032e99914dee3f265cb62e1fccb7b760d2cb7d73f3da57c361284de4830f44bd62e1dc51265f02a0cbe11095751b399f8387bb015ea6c0c309d2f35327f56e394746286e5cd67d6ca6558634080aebfd0d9df7ca9178591827d72a2e1b694b323867a2ce5f407bb0af37595882a5307e3daf230dac9ebaecfbdfda2a78e091523f8fad69ac3cffb45ebd8d277b67d8b704f69b0395ecbe21f6e5f2ef41f0895505b35f07898cf91e24dedfe64cb06a85185c0124f4b0f6c8b1f20dbe3909a3e5f7c10f2fb15a9084224498606a576bce2493225e8c010b6eed0af2eaa0aa3ff527ed93d639b02e6bdf4b7d115ed1b4c8928d9b9ba5647d90f734faebedceb2e8c4c60a40399297f9c03e0380e3ce4f25a020ee656b8751fbbd8b6fe6b07fa0b1fa452bf1ca4e17c0f43e03fe1ad6178832829943dd2ca900c032eb94dd4693f598a87ffd730dcd07be0d435a2b5c6a0217f14250ff5f8f108dabe7cfe1791ceb188f796a511231ce9fbc1f528cd12617bd91757cd555d2a38665605da7bc20ac62cb0b939092e6901b66b036ad98c8578161819ab749c118d201bc7db17c4cda64444127eba82f301b6c364c08e06b5a28af84116c716ba80575f81ce8cda913446938ff6e04324880fbddff62d8246f7e37b9abaaed0c92dcba1fbe6b7c88130cee12231455613e9806bea324eadbcc73d663f37e1966e5c8f4616fa4150ab9a90c6a0a3e3937b9ca88780fbe4a4b67e715d58255e75cfad849ed77009bca95ecdc8d19b9d922423c94086e4b3878bbed6983e7c0c7e296aa6b52d76d3d4e92c39a4a69eb1a0e2d0edda6a66f69d6c01f4e21ead0a3574615b4856c97263075af436b8ffdf7233fe0980e68547fe5beed8840b0c4515a297e4fe741a75f4bf5032f14edaf998c230406ed8527dd3f3bcaf37c369e134eb9702a695d7b8b64a90ddec5732e1263ebd6fd3d885076049706b25a3ddd06a7c201304eaf75329ea8fb5f7751627fe1523d9533ca28d6b113afe161f321016664342c9d9bf045eb15e37569bf8edd5c7687d1a0a2e475cbc42eac18e32e32fcbaa0890d8d784cc38458ae83283739e327926383c3605aaf6f19c6fa4364e550a5091efb21344aa7386dc503c5b80e83d5746aed5658c74d1edcd845718b541312e10abf38dcf82c1d26b5fecfa4a5e8da057bc167b70ec95d1d43604cbee88ec7e896dde9feb2cac2321aa792e6d04a6f069e19a99583f0479eb616eaf9c3c0504a4f68cddcb6c7d00d5eed78c9559de76bf0fcead3ec68123e3cb767bb17211bb97ed1bbf4e839e80eefb36db34bda24d5dda3b9affa2490a902a5fcf6da8463c45cfea6f3f48bcc50df82acac98823796a0b5db31c055e4526744f9769f5450501e4fc46d3b26f7cc70aab251f595ce4c900cd032c904e2064b9e2908b453b4e22e677c2f8fdaaf3bb1bbb480473e701ba667b316c6724aa3914afb1804e27394566342ad68682ba275599c8402d47992485f3477f7f76096034929693f1decb4266538668df95c3055a89a1ba1b34593262a0b52818ed78fc612e69742c408d774eea6ebbf0920f9a5bebd38089005f3a7a0511c98f357d2eb0d1b35864ddbfa271b8a3b15de13f8a4bc60d541dd51b0501c756751ab74b807d00369595e261b1a20bbf7d389e92a5a2241433c1324dbd57df3ce8b0ea78d003a71eed7a89edcb381f2ca5fefc6b38fb458684123190646211ddfd9aaab1beb5993c62e7fa978e60fcb04802a4031338a44967f6dd61bf4c68e191c81ff3f4ff20c94d641cdfdaf4d46d59a69c7a891e18d97c1e47ec151198806207a2459f20c802b22caefdc1705e2489a1f8839f4a32d43a27a8b6e220a0574ab654e3d3fc7d4c46f0e0c094b798e189b8f17514816659e9f3e430fc04e16b30a5ab03a02702f61aaebec3936594906af647e319dbf353ecc978179fe96cf679f0a8497b45d135dbd8d23bd4bc4ae8bb1daab13a8a711275ff0e6c9f65df6a6c341f5173fffc5cb1ebb20ee1743faf807fb1eae8c870fbb7b995ffc21b5b4a3d7844e3b91f9e7fc1e902358b2f16d2d6231a6ad59fc729c512a8d450993e33ddeb81b13c96dfe571e3c96c0194a49d4a3584c91df6501c68c5bc691813e49fe435ab735714b7474ec785a2beeed221fd03f1a349d5a5994791ced441f3ab91a4ec8efee971e751d002eac3f343f5c87fccf1648ce419f0eefa194cf89209173392ab2a2026d5611ce49fb7ac1d8cbfa3805971c853fe4265754e4de3ff88c4b7a2c7ee8e4fbbdcce6a8bbbf673194389ecd8ce4d388dc438bd00e111c73b31469103ade8433b78782f3424ebdd75a984b779eed00e5d4ce96e307c540ddbf0f7459a95bc870614c1fb23cedf725dbb845800a5a8e8c330d399fce08eda23ae70b8da8e0b5fae95fe315810dbc2885f4c6435c384d9f4a53c07c69b0d",
"pseudoOuts": [ "454e867009aef302815597139182d3b8123f57c3e09cd6ac724c4e7c9fe59d49"]
}
}
This transaction spends 1 input to 2 outputs against a
tree of 6 layers, and its fcmp_pp is 6304 bytes = 197 words
of 32 bytes each, where every word is either a compressed curve point or a field scalar.
The fcmp_pp field
Three regions, in order: one 480-byte block per input, then the membership proof, then a 64-byte anchor. For 1 input at 6 layers, bytes.
| byte range | size | region | source |
|---|---|---|---|
| 0 – 479 | 480 | input 0 · tuple + SAL | sal.py, blinds.py |
| 480 – 6239 | 5760 | membership proof | fcmp.py, gbp.py |
| 6240 – 6303 | 64 | root-blind Schnorr PoK | fcmp.py |
What is not in fcmp_pp and where it lives
Two things the proof depends on are located in another field of the transaction: the amount pseudo-outputs
sit in rctsig_prunable.pseudoOuts and the key images sit in each
vin. For this transaction, we have:
| value | lives in | 32 bytes |
|---|---|---|
| vin[0].k_image | 80e251c490c65c224a758c2caab46291ffe5d994232079ea37e3806ef2876584 | |
| pseudoOuts[0] | 454e867009aef302815597139182d3b8123f57c3e09cd6ac724c4e7c9fe59d49 |
How the transaction scales
The table below gives the size of fcmp_pp, in bytes, for 1, 2, 4, 8, 16, 32, 64 and 128
inputs, broken down by region, so we can see both what each part contributes and how the whole
thing scales:
| inputs | / | IPA rounds | tuple+SAL | Selene BP | Helios BP | PoK | total | Bytes / input | |
|---|---|---|---|---|---|---|---|---|---|
| 1 | 16 / 15 | 8 / 7 | 480 | 992 | 2464 | 2304 | 64 | 6304 | 6304 |
| 2 | 19 / 17 | 9 / 8 | 960 | 1152 | 2816 | 2560 | 64 | 7552 | 3776 |
| 4 | 25 / 21 | 10 / 9 | 1920 | 1472 | 3456 | 3008 | 64 | 9920 | 2480 |
| 8 | 37 / 29 | 11 / 10 | 3840 | 2112 | 4672 | 3840 | 64 | 14528 | 1816 |
| 16 | 61 / 45 | 12 / 11 | 7680 | 3392 | 7040 | 5440 | 64 | 23616 | 1476 |
| 32 | 109 / 77 | 13 / 12 | 15360 | 5952 | 11712 | 8576 | 64 | 41664 | 1302 |
| 64 | 205 / 141 | 14 / 13 | 30720 | 11072 | 20992 | 14784 | 64 | 77632 | 1213 |
| 128 | 397 / 269 | 15 / 14 | 61440 | 21312 | 39488 | 27136 | 64 | 149440 | 1167.5 |
Every 32-byte word
The whole proof, all 197 words of 32 bytes, each with its field, its defining formula, and the first and last bytes of each (full hex is in the dump above). Points and scalars are both 32 bytes.
| word · bytes | field | equation | bytes |
|---|---|---|---|
| input 0 · tuple + SAL | |||
| w0 · 0–31 | point | f71b2aa4…74f5fe50 | |
| w1 · 32–63 | point | 51448a0c…3fb0b650 | |
| w2 · 64–95 | point | 35c61ff5…2d310476 | |
| w3 · 96–127 | point | 1924f4e4…abf1ac30 | |
| w4 · 128–159 | point | 0ac37f5e…945537c8 | |
| w5 · 160–191 | point | dd1286b0…fc118c30 | |
| w6 · 192–223 | point | 7b9f1acb…f39c24a7 | |
| w7 · 224–255 | point | 9a2871b0…2f41d7fc | |
| w8 · 256–287 | point | 6e930a71…a2607ddd | |
| w9 · 288–319 | scalar | 5d6fc8d3…6338b50c | |
| w10 · 320–351 | scalar | a54b6199…938e1e01 | |
| w11 · 352–383 | scalar | b015b0d4…ee10af01 | |
| w12 · 384–415 | scalar | 5b930f61…05a6880b | |
| w13 · 416–447 | scalar | c40b21d9…dcd46b0b | |
| w14 · 448–479 | scalar | 1c764745…c1199c0b | |
| vector commitments C on Selene: C0 leaf floor, C1 floor 2, C2 floor 4, C3–C4 input 0: o_blind on T, C5–C6 input 0: i_blind on U, C7 input 0: i_blind on V (divisor only), C8–C9 input 0: i_blind_blind on T, C10–C11 input 0: c_blind on G, C12–C13 opens the blind of Helios C0, C14–C15 opens the blind of Helios C1 | |||
| w15 · 480–511 | point | 9be834bc…8d357f59 | |
| w16 · 512–543 | point | 4b2c2c10…761569a0 | |
| w17 · 544–575 | point | 9e3e52d0…d84e4d67 | |
| w18 · 576–607 | point | 1872afe8…2dcfc150 | |
| w19 · 608–639 | point | 84abce2a…fdf2346e | |
| w20 · 640–671 | point | 0bdf9f2c…50299620 | |
| w21 · 672–703 | point | e20b08f5…7b1bce4e | |
| w22 · 704–735 | point | 18127abf…8b9f141e | |
| w23 · 736–767 | point | c939be97…9fe58778 | |
| w24 · 768–799 | point | 4d2eedec…b6c24dc4 | |
| w25 · 800–831 | point | bea608e8…b0ad5232 | |
| w26 · 832–863 | point | 6d97f8a5…88d0cb8d | |
| w27 · 864–895 | point | e6f89a71…85a7a8ec | |
| w28 · 896–927 | point | 240a3660…f21b4c43 | |
| w29 · 928–959 | point | 351bdcc0…2224b9e2 | |
| w30 · 960–991 | point | 1b2491d1…91f453e8 | |
| vector commitments C on Helios: C0 floor 1, C1 floor 3, C2 the root, C3–C6 opens the blind of Selene C0, C7–C10 opens the blind of Selene C1, C11–C14 opens the blind of Selene C2 | |||
| w31 · 992–1023 | point | c98b1633…ff98af4e | |
| w32 · 1024–1055 | point | d708ab3d…8cc00a16 | |
| w33 · 1056–1087 | point | 7ed1879c…1bc8bb4b | |
| w34 · 1088–1119 | point | 1ed2b0a9…cd2128b4 | |
| w35 · 1120–1151 | point | 5b77613b…0f3e7626 | |
| w36 · 1152–1183 | point | fec7cdd4…45d0a3f6 | |
| w37 · 1184–1215 | point | 94c5c849…9b2bae53 | |
| w38 · 1216–1247 | point | b0fc067f…993eeca1 | |
| w39 · 1248–1279 | point | 2410a6cf…de01dd05 | |
| w40 · 1280–1311 | point | 8ce8a81a…91c3f672 | |
| w41 · 1312–1343 | point | 772a7f27…93ec38ae | |
| w42 · 1344–1375 | point | 70748e62…5e13ec63 | |
| w43 · 1376–1407 | point | e35bb545…6dae5fe1 | |
| w44 · 1408–1439 | point | 7c3ac016…92f71ab5 | |
| w45 · 1440–1471 | point | b68e24c4…17cf00b5 | |
| Selene (C1) Bulletproof | |||
| w46 · 1472–1503 | point | d8ca6ec7…56b03279 | |
| w47 · 1504–1535 | point | 84d7f1d2…312e333d | |
| w48 · 1536–1567 | point | 3b2410ad…4699f40d | |
| w49 · 1568–1599 | point | 299861cc…99b50907 | |
| w50 · 1600–1631 | point | 498f6794…efec651c | |
| w51 · 1632–1663 | point | cf24a83f…c4360fac | |
| w52 · 1664–1695 | point | 88e33db2…68223d3c | |
| w53 · 1696–1727 | point | 70b8d76a…9bb97073 | |
| w54 · 1728–1759 | point | 3ecdb941…73ea7824 | |
| w55 · 1760–1791 | point | f16ed075…9dead082 | |
| w56 · 1792–1823 | point | 8edaa0c9…a4a6232e | |
| w57 · 1824–1855 | point | e44f1cc8…1e13d222 | |
| w58 · 1856–1887 | point | 142715b2…8ddcda7c | |
| w59 · 1888–1919 | point | 00eb71a0…539cf112 | |
| w60 · 1920–1951 | point | 183e4113…7f2e1517 | |
| w61 · 1952–1983 | point | 35c8de34…f89113da | |
| w62 · 1984–2015 | point | 3f4ded2f…c9850e88 | |
| w63 · 2016–2047 | point | 5973b4cc…b56357ff | |
| w64 · 2048–2079 | point | 4c45f6bf…66a9a52e | |
| w65 · 2080–2111 | point | 21d41fb7…359be8b2 | |
| w66 · 2112–2143 | point | 4e67244a…89ec7619 | |
| w67 · 2144–2175 | point | 5b0e8d7b…86ae9756 | |
| w68 · 2176–2207 | point | b16cf724…d12ea31d | |
| w69 · 2208–2239 | point | c8aa3c4a…0bbeb2de | |
| w70 · 2240–2271 | point | e8ce7ef2…4569c4fb | |
| w71 · 2272–2303 | point | 1a2620ea…54e6cbf5 | |
| w72 · 2304–2335 | point | a0e773f6…59ee4bb9 | |
| w73 · 2336–2367 | point | c77d88c2…aab4282e | |
| w74 · 2368–2399 | point | d9f1e357…065a39e2 | |
| w75 · 2400–2431 | point | 24220775…2523efea | |
| w76 · 2432–2463 | point | e80be3fa…1facfe6e | |
| w77 · 2464–2495 | point | b722c0bd…3ae0dc8c | |
| w78 · 2496–2527 | point | a3a7a2cc…bc2f8fd9 | |
| w79 · 2528–2559 | point | 37790974…4a7d203f | |
| w80 · 2560–2591 | point | 4cf7ec76…3868e119 | |
| w81 · 2592–2623 | point | e14fc975…daf06023 | |
| w82 · 2624–2655 | point | bc22dacd…f29464c0 | |
| w83 · 2656–2687 | point | 8c62dbf4…11bc02a2 | |
| w84 · 2688–2719 | point | 142f3612…005aa4c4 | |
| w85 · 2720–2751 | point | 2fd12dd3…fa5de2ed | |
| w86 · 2752–2783 | point | d8ec1b85…95be28e1 | |
| w87 · 2784–2815 | point | bb847113…c97faf20 | |
| w88 · 2816–2847 | point | 5aa8a95d…f2717423 | |
| w89 · 2848–2879 | point | 1bd86beb…0832b767 | |
| w90 · 2880–2911 | point | aa7a2a77…04b8438a | |
| w91 · 2912–2943 | point | 05659f8e…911abbdd | |
| w92 · 2944–2975 | point | d800f56a…f07e035d | |
| w93 · 2976–3007 | point | cbb9def8…7158aef3 | |
| w94 · 3008–3039 | point | 97016421…f1bc262c | |
| w95 · 3040–3071 | point | 2f5a05ec…8c5bddf9 | |
| w96 · 3072–3103 | point | b3f218c7…b7c7831d | |
| w97 · 3104–3135 | point | f4e71971…7242d242 | |
| w98 · 3136–3167 | point | 565c27e9…31da22ce | |
| w99 · 3168–3199 | point | 18f32841…08d68493 | |
| w100 · 3200–3231 | point | 774a32cf…425733e2 | |
| w101 · 3232–3263 | point | 3d37190f…75645b0a | |
| w102 · 3264–3295 | scalar | 41eef7a2…b57f2029 | |
| w103 · 3296–3327 | scalar | 29c36735…ca783467 | |
| w104 · 3328–3359 | scalar | 4f210549…483e3323 | |
| w105 · 3360–3391 | point | 40d1a668…effe83b1 | |
| w106 · 3392–3423 | point | 6e4b4068…958386f9 | |
| w107 · 3424–3455 | point | b582e8ef…19e3052f | |
| w108 · 3456–3487 | point | 64cbd322…7358bc34 | |
| w109 · 3488–3519 | point | 924d4e04…d28e4dda | |
| w110 · 3520–3551 | point | 519ef1db…3274a68d | |
| w111 · 3552–3583 | point | cd99c020…3e22574f | |
| w112 · 3584–3615 | point | 26f8b9ff…3b03d5f2 | |
| w113 · 3616–3647 | point | 5b252bf6…9931e796 | |
| w114 · 3648–3679 | point | d7229d53…f6b3be80 | |
| w115 · 3680–3711 | point | 51e6f7e6…72831bdf | |
| w116 · 3712–3743 | point | 68573891…623d7ed0 | |
| w117 · 3744–3775 | point | 61847c76…078b0686 | |
| w118 · 3776–3807 | point | efa01185…dbae4b98 | |
| w119 · 3808–3839 | point | 9fd3d25d…dbe7f132 | |
| w120 · 3840–3871 | point | dac3ff86…2d77ec80 | |
| w121 · 3872–3903 | scalar | 66aaf0ef…35741e3d | |
| w122 · 3904–3935 | scalar | 1845c797…7fc45402 | |
| Helios (C2) Bulletproof | |||
| w123 · 3936–3967 | point | 76447122…3d498a0b | |
| w124 · 3968–3999 | point | 4fc25b25…ab9ab3b8 | |
| w125 · 4000–4031 | point | 04d0ef2a…ec5eb187 | |
| w126 · 4032–4063 | point | e52f758b…1fc72f9e | |
| w127 · 4064–4095 | point | b0218f00…f9e4698f | |
| w128 · 4096–4127 | point | 1e311a4a…e2f8a4f1 | |
| w129 · 4128–4159 | point | 41e8e1ed…e769eda1 | |
| w130 · 4160–4191 | point | cdca3f71…543752b0 | |
| w131 · 4192–4223 | point | 3cd80389…7cf0361d | |
| w132 · 4224–4255 | point | 5c814e08…c6c59170 | |
| w133 · 4256–4287 | point | 3ab9cb06…fb45b99b | |
| w134 · 4288–4319 | point | 55d503a7…2f3b043e | |
| w135 · 4320–4351 | point | dcbf6aab…640a33f2 | |
| w136 · 4352–4383 | point | cb74ebde…b88bcfd1 | |
| w137 · 4384–4415 | point | d812ca67…4b51c6df | |
| w138 · 4416–4447 | point | df990711…928d8261 | |
| w139 · 4448–4479 | point | 5cae22ff…c4bf1032 | |
| w140 · 4480–4511 | point | 48085f24…47b44ee2 | |
| w141 · 4512–4543 | point | 2ab40a56…a346bc9a | |
| w142 · 4544–4575 | point | 39b327b5…e3f265cb | |
| w143 · 4576–4607 | point | 62e1fccb…f02a0cbe | |
| w144 · 4608–4639 | point | 11095751…67d6ca65 | |
| w145 · 4640–4671 | point | 58634080…07bb0af3 | |
| w146 · 4672–4703 | point | 7595882a…cffb45eb | |
| w147 · 4704–4735 | point | d8d277b6…cf91e24d | |
| w148 · 4736–4767 | point | edfe64cb…a9084224 | |
| w149 · 4768–4799 | point | 498606a5…02e6bdf4 | |
| w150 · 4800–4831 | point | b7d115ed…297f9c03 | |
| w151 · 4832–4863 | point | e0380e3c…e17c0f43 | |
| w152 · 4864–4895 | point | e03fe1ad…dcd07be0 | |
| w153 · 4896–4927 | point | d435a2b5…231ce9fb | |
| w154 · 4928–4959 | point | c1f528cd…2e6901b6 | |
| w155 · 4960–4991 | point | 6b036ad9…82f301b6 | |
| w156 · 4992–5023 | point | c364c08e…4324880f | |
| w157 · 5024–5055 | point | bddff62d…5613e980 | |
| w158 · 5056–5087 | point | 6bea324e…937b9ca8 | |
| w159 · 5088–5119 | point | 8780fbe4…922423c9 | |
| w160 · 5120–5151 | point | 4086e4b3…a0e2d0ed | |
| w161 · 5152–5183 | point | da6a66f6…7233fe09 | |
| w162 · 5184–5215 | point | 80e68547…98c23040 | |
| w163 · 5216–5247 | point | 6ed8527d…263ebd6f | |
| w164 · 5248–5279 | point | d3d88507…fe1523d9 | |
| w165 · 5280–5311 | point | 533ca28d…d5c7687d | |
| w166 · 5312–5343 | point | 1a0a2e47…9e327926 | |
| w167 · 5344–5375 | point | 383c3605…e83d5746 | |
| w168 · 5376–5407 | point | aed5658c…5e8da057 | |
| w169 · 5408–5439 | point | bc167b70…04a6f069 | |
| w170 · 5440–5471 | point | e19a9958…59de76bf | |
| w171 · 5472–5503 | point | 0fcead3e…bda24d5d | |
| w172 · 5504–5535 | point | da3b9aff…8823796a | |
| w173 · 5536–5567 | point | 0b5db31c…595ce4c9 | |
| w174 · 5568–5599 | point | 00cd032c…73e701ba | |
| w175 · 5600–5631 | point | 667b316c…2d479924 | |
| w176 · 5632–5663 | scalar | 85f3477f…1b345932 | |
| w177 · 5664–5695 | scalar | 62a0b528…89005f3a | |
| w178 · 5696–5727 | scalar | 7a0511c9…1dd51b05 | |
| w179 · 5728–5759 | point | 01c75675…c1324dbd | |
| w180 · 5760–5791 | point | 57df3ce8…12319064 | |
| w181 · 5792–5823 | point | 6211ddfd…f6dd61bf | |
| w182 · 5824–5855 | point | 4c68e191…1e47ec15 | |
| w183 · 5856–5887 | point | 11988062…27a8b6e2 | |
| w184 · 5888–5919 | point | 20a0574a…f3e430fc | |
| w185 · 5920–5951 | point | 04e16b30…c978179f | |
| w186 · 5952–5983 | point | e96cf679…ff0e6c9f | |
| w187 · 5984–6015 | point | 65df6a6c…b995ffc2 | |
| w188 · 6016–6047 | point | 1b5b4a3d…12a8d450 | |
| w189 · 6048–6079 | point | 993e33dd…c5bc6918 | |
| w190 · 6080–6111 | point | 13e49fe4…91ced441 | |
| w191 · 6112–6143 | point | f3ab91a4…fa194cf8 | |
| w192 · 6144–6175 | point | 92091733…754e4de3 | |
| w193 · 6176–6207 | scalar | ff88c4b7…bd00e111 | |
| w194 · 6208–6239 | scalar | c73b3146…6e307c54 | |
| root anchor | |||
| w195 · 6240–6271 | point | 0ddbf0f7…99fce08e | |
| w196 · 6272–6303 | scalar | da23ae70…07c69b0d | |