allow adding erased msgs

This commit is contained in:
Andre Staltz 2023-09-07 16:38:58 +03:00
parent b92d25c6a2
commit 25eb244608
No known key found for this signature in database
GPG Key ID: 9EDE23EA7E8A4890
2 changed files with 39 additions and 7 deletions

View File

@ -298,18 +298,21 @@ function validateData(msg) {
* @param {Msg} msg * @param {Msg} msg
*/ */
function validateDataSizeHash(msg) { function validateDataSizeHash(msg) {
const [dataHash, dataSize] = representData(msg.data) const { dataHash: actualHash, dataSize: actualSize } = msg.metadata
if (!Number.isSafeInteger(dataSize) || dataSize < 0) { if (!Number.isSafeInteger(actualSize) || actualSize < 0) {
// prettier-ignore // prettier-ignore
return `invalid msg: dataSize ${dataSize} should have been an unsigned integer\n` + JSON.stringify(msg) return `invalid msg: dataSize ${actualSize} should have been an unsigned integer\n` + JSON.stringify(msg)
} }
if (dataHash !== msg.metadata.dataHash) {
if (msg.data === null) return
const [expectedHash, expectedSize] = representData(msg.data)
if (actualHash !== expectedHash) {
// prettier-ignore // prettier-ignore
return `invalid msg: data hash "${dataHash}" does not match metadata.dataHash "${msg.metadata.dataHash}"\n` + JSON.stringify(msg) return `invalid msg: metadata.dataHash "${actualHash}" should have been "${expectedHash}"\n` + JSON.stringify(msg)
} }
if (dataSize !== msg.metadata.dataSize) { if (expectedSize !== msg.metadata.dataSize) {
// prettier-ignore // prettier-ignore
return `invalid msg: data size "${dataSize}" does not match metadata.dataSize "${msg.metadata.dataSize}"\n` + JSON.stringify(msg) return `invalid msg: metadata.dataSize ${actualSize} should have been "${expectedSize}"\n` + JSON.stringify(msg)
} }
} }

View File

@ -136,3 +136,32 @@ test('validate 2nd forked msg', (t) => {
const err = MsgV3.validate(msg1B, tangle, pubkeys, msgID1B, mootID) const err = MsgV3.validate(msg1B, tangle, pubkeys, msgID1B, mootID)
assert.ifError(err, 'valid 2nd forked msg') assert.ifError(err, 'valid 2nd forked msg')
}) })
test('validate erased msg', (t) => {
const keypair = Keypair.generate('ed25519', 'alice')
const account = MsgV3.getMsgID(
MsgV3.createAccount(keypair, 'person', 'alice')
)
const pubkeys = new Set([keypair.public])
const moot = MsgV3.createMoot(account, 'post', keypair)
const mootID = MsgV3.getMsgID(moot)
const tangle = new MsgV3.Tangle(mootID)
tangle.add(mootID, moot)
const msg1 = MsgV3.create({
account,
accountTips: [account],
domain: 'post',
data: { text: 'Hello world!' },
tangles: {
[mootID]: tangle,
},
keypair,
})
msg1.data = null
const msgID1 = MsgV3.getMsgID(msg1)
const err = MsgV3.validate(msg1, tangle, pubkeys, msgID1, mootID)
assert.ifError(err, 'valid erased msg')
})