Make encodeStateAsUpdate deterministic

This commit is contained in:
Adam Chelminski 2022-06-23 15:50:35 +02:00
parent 1bc9308566
commit da052bdb0a

View File

@ -219,17 +219,21 @@ export const createDeleteSetFromStructStore = ss => {
*/ */
export const writeDeleteSet = (encoder, ds) => { export const writeDeleteSet = (encoder, ds) => {
encoding.writeVarUint(encoder.restEncoder, ds.clients.size) encoding.writeVarUint(encoder.restEncoder, ds.clients.size)
ds.clients.forEach((dsitems, client) => {
encoder.resetDsCurVal() // Ensure that the delete set is written in a deterministic order
encoding.writeVarUint(encoder.restEncoder, client) Array.from(ds.clients.entries())
const len = dsitems.length .sort((clientA, clientB) => clientB[0] - clientA[0])
encoding.writeVarUint(encoder.restEncoder, len) .forEach(([client, dsitems]) => {
for (let i = 0; i < len; i++) { encoder.resetDsCurVal()
const item = dsitems[i] encoding.writeVarUint(encoder.restEncoder, client)
encoder.writeDsClock(item.clock) const len = dsitems.length
encoder.writeDsLen(item.len) encoding.writeVarUint(encoder.restEncoder, len)
} for (let i = 0; i < len; i++) {
}) const item = dsitems[i]
encoder.writeDsClock(item.clock)
encoder.writeDsLen(item.len)
}
})
} }
/** /**