进一步解释了如何通过cleos传递的值。正如原帖中已经提到的,这一切都围绕着字节顺序。由于某种原因,该checksum256值以不同的endian返回到索引键类型所sha256期望的范围。

如果您checksum256在表中的行中返回以下hash():

7af12386a82b6337d6b1e4c6a1119e29bb03e6209aa03c70ed3efbb9b74a290c

它首先分为两部分(每边16个字节):

7af12386a82b6337d6b1e4c6a1119e29 bb03e6209aa03c70ed3efbb9b74a290c

然后使用第一部分作为示例,以2个字符(1个字节)块反转每个部分:

7af12386a82b6337d6b1e4c6a1119e29

7a f1 23 86 a8 2b 63 37 d6 b1 e4 c6 a1 11 9e 29

29 9e 11 a1 c6 e4 b1 d6 37 63 2b a8 86 23 f1 7a

然后连接两个反转部分以形成可以与sha256索引键类型一起使用的值:

299e11a1c6e4b1d637632ba88623f17a 0c294ab7b9fb3eed703ca09a20e603bb

最终结果:

299e11a1c6e4b1d637632ba88623f17a0c294ab7b9fb3eed703ca09a20e603bb

参考

https://eosio.stackexchange.com/questions/4116/how-to-use-checksum256-secondary-index-to-get-table-rows
https://github.com/EOSIO/eos/issues/6648
https://github.com/EOSIO/eos/pull/6591