crate-crypto / rust-verkle

Apache License 2.0
119 stars 41 forks source link

possible error with two missing #48

Closed gballet closed 2 years ago

gballet commented 2 years ago

I am not yet sure if the error is with rust-verkle or go-verkle, I'm brain-dumping here.

I have a running testnet in which geth produces blocks, and I am verifying them with rust-verkle to make sure that the codebases are fully compatible.

I produce the following proof:

00000000090000000808080a0808080a0804000000bdab5fe8197dfb538e43e93b36bee12dc4b13a59bb88c96e9594b368e139c881a059443990023f4517419b00e286b52c979471c10034969ebb7ab86f7b6892d5c8f712f666f0daab3ac325f329f078f932afff9c7c970be57befaf4c6021576734854706d259fe6cb0e9fa626a8fb708fb03654aca32d003ca4078a07d7ae09d9f2b622162addd376bc0a7dcf01b8caf1e55cd10ab26f3d8f178ba3142183a43e7d77e98b9a74bf6b082682af1a0fd0d94d095c8f5cd97dbaf3c74ab32eaafbd06b9f6a3e317f60800768c7bd92482fa3b51f6cb9456fa9aa5e24a62a4c49faa13851e163c021e1eb096798cdc18ae42c637e8f96c075b627beb18013515f14984d3e47ea1df829209b850a0964e124b4da2605e881e2ba2f5e09a45672e6ca838c5ccd1a2ceb5d5ba629a0bbc8b9e1f6300debb4e6cb495c5faabe61afeb40744253e682305b5822d56ec0fb0d55338dc4fdf49803c3550a8294ebe366fec53a4cd218d32337b6c7c8b3d1d30920e9cc9aea232064ba63aba36c8a4a6e3daa07eb548b47406c09e2b619b6b9f02725ccd01c3e2ae60a461cdbe8033415d610e215070c9927f21a4b0f0c6cdf9122b2d69727d51cc6e9ae6fbcefe97936b87dbd312abd0e84942309a19d0da051f6faf1b953bbfd6b8452737b0e1d64a2f329be67a86bc4759c8430c625e21e5fa8d7f4a229c02cc8115d4f51960d8eae6fb9947169fa5ae5b3a9fbe2783bcb51fdbfbf9a828a469e08c9832d5f647848df3483c34f50e682fa271bad4e866ce04d8dc196a4135c51a534191d835998f6a6c70974a2e6444c9f85b8f314c510c929cc700ab58e7544babb1360cc2a5a7438e25a4b97603284fb60925486ffd7a8885e9bfe6ecfc0dc00ed9eddedfe96e78e60db0bec41442c042c826326c760e9f3cf6dff85b8a1cf319b9e984ef0c96ee8253e6e9762dc4d466d615304ec658d7397ddf2f6bf97a52ef70905c953be6746a18

Note that there are 9 "extension status" descriptors.

The associated (keys, values) are shown below. There are 10 different stems, but two stems use the same proof of absence (path 0x69...). All the blocks that don't verify seem to have the same feature (there's 500+ of them so far, only checked a dozen).

      [
        088bcd6531bcfdd7d4529b689d415af18485f3e5f7f08d50d0d3fc6f95e01500,
        "",
      ],
      [
        088bcd6531bcfdd7d4529b689d415af18485f3e5f7f08d50d0d3fc6f95e01502,
        "",
      ],
      [
        088bcd6531bcfdd7d4529b689d415af18485f3e5f7f08d50d0d3fc6f95e01503,
        "",
      ],
      [
        1be5b2c8a376ad34ba9e5917ef6f84de1d342758d5e147f7b9d05b90a2cd6700,
        "",
      ],
      [
        1be5b2c8a376ad34ba9e5917ef6f84de1d342758d5e147f7b9d05b90a2cd6701,
        "",
      ],
      [
        1be5b2c8a376ad34ba9e5917ef6f84de1d342758d5e147f7b9d05b90a2cd6702,
        "",
      ],
      [
        1be5b2c8a376ad34ba9e5917ef6f84de1d342758d5e147f7b9d05b90a2cd6703,
        "",
      ],
      [
        1be5b2c8a376ad34ba9e5917ef6f84de1d342758d5e147f7b9d05b90a2cd6704,
        "",
      ],
      [
        212e8cb758fb84a7ae1715f444bdb71c4c9e5db400a88cdee03338b91c5e8f79,
        "",
      ],
      [
        6766d007d8fd90ea45b2ac9027ff04fa57e49527f11010a12a73f58ffa580800,
        0000000000000000000000000000000000000000000000000000000000000000,
      ],
      [
        6766d007d8fd90ea45b2ac9027ff04fa57e49527f11010a12a73f58ffa580801,
        e89208cfa015d5191e0200000000000000000000000000000000000000000000,
      ],
      [
        6766d007d8fd90ea45b2ac9027ff04fa57e49527f11010a12a73f58ffa580802,
        3300000000000000000000000000000000000000000000000000000000000000,
      ],
      [
        6766d007d8fd90ea45b2ac9027ff04fa57e49527f11010a12a73f58ffa580803,
        c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470,
      ],
      [
        6766d007d8fd90ea45b2ac9027ff04fa57e49527f11010a12a73f58ffa580804,
        0000000000000000000000000000000000000000000000000000000000000000,
      ],
      [
        694dc6ea427eea992996e5dfa6992eb0434d7e305574cf74f45226538e34a800,
        "",
      ],
      [
        694dc6ea427eea992996e5dfa6992eb0434d7e305574cf74f45226538e34a802,
        "",
      ],
      [
        694dc6ea427eea992996e5dfa6992eb0434d7e305574cf74f45226538e34a803,
        "",
      ],
      [
        695921dca3b16c5cc850e94cdd63f573c467669e89cec88935d03474d6bdf900,
        "",
      ],
      [
        695921dca3b16c5cc850e94cdd63f573c467669e89cec88935d03474d6bdf901,
        "",
      ],
      [
        695921dca3b16c5cc850e94cdd63f573c467669e89cec88935d03474d6bdf902,
        "",
      ],
      [
        695921dca3b16c5cc850e94cdd63f573c467669e89cec88935d03474d6bdf903,
        "",
      ],
      [
        695921dca3b16c5cc850e94cdd63f573c467669e89cec88935d03474d6bdf904,
        "",
      ],
      [
        6d3edc4c95095f56c4019b8aa097cfd9e3f7095966788bc497e488d78f29fa00,
        "",
      ],
      [
        6d3edc4c95095f56c4019b8aa097cfd9e3f7095966788bc497e488d78f29fa01,
        "",
      ],
      [
        6d3edc4c95095f56c4019b8aa097cfd9e3f7095966788bc497e488d78f29fa02,
        "",
      ],
      [
        6d3edc4c95095f56c4019b8aa097cfd9e3f7095966788bc497e488d78f29fa03,
        "",
      ],
      [
        6d3edc4c95095f56c4019b8aa097cfd9e3f7095966788bc497e488d78f29fa04,
        "",
      ],
      [
        8cbef1db2d70a48f58505953351092c37f903bcf78b0aff05b1d544609fb8900,
        "",
      ],
      [
        8cbef1db2d70a48f58505953351092c37f903bcf78b0aff05b1d544609fb8901,
        "",
      ],
      [
        8cbef1db2d70a48f58505953351092c37f903bcf78b0aff05b1d544609fb8902,
        "",
      ],
      [
        8cbef1db2d70a48f58505953351092c37f903bcf78b0aff05b1d544609fb8903,
        "",
      ],
      [
        8cbef1db2d70a48f58505953351092c37f903bcf78b0aff05b1d544609fb8904,
        "",
      ],
      [
        9f2a59ea98d7cb610eff49447571e1610188937ce9266c6b4ded1b6ee37ecd00,
        0000000000000000000000000000000000000000000000000000000000000000,
      ],
      [
        9f2a59ea98d7cb610eff49447571e1610188937ce9266c6b4ded1b6ee37ecd01,
        e06a0ec345e83437e43b00000000000000000000000000000000000000000000,
      ],
      [
        9f2a59ea98d7cb610eff49447571e1610188937ce9266c6b4ded1b6ee37ecd02,
        0200000000000000000000000000000000000000000000000000000000000000,
      ],
      [
        9f2a59ea98d7cb610eff49447571e1610188937ce9266c6b4ded1b6ee37ecd03,
        c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470,
      ],
      [
        f1dd4962bea2321c889520858b4784bcf8f21181312ce2d7396244bd493e1d00,
        "",
      ],
      [
        f1dd4962bea2321c889520858b4784bcf8f21181312ce2d7396244bd493e1d01,
        "",
      ],
      [
        f1dd4962bea2321c889520858b4784bcf8f21181312ce2d7396244bd493e1d02,
        "",
      ],
      [
        f1dd4962bea2321c889520858b4784bcf8f21181312ce2d7396244bd493e1d03,
        "",
      ],
      [
        f1dd4962bea2321c889520858b4784bcf8f21181312ce2d7396244bd493e1d04,
        "",
      ],
    ],

It's quite hard to see why the verification in rust-verkle fails, would you have some insights on how to figure out if this is indeed the problem?

gballet commented 2 years ago

btw, it's totally possible to reconstruct the tree, my explorer code does it (a bug is always possible, of course)

image

so either it's a bug in the way rust-verkle reconstructs the tree, or in the way go-verkle produces the proof in that case.

kevaundray commented 2 years ago

Closing this issue as its a deduplication of #50