Skip to content

Commit 8f548fa

Browse files
rickstaayondonfu
andcommitted
feat: extend auxData to 96 bytes
Allow 64–96 byte auxData to support additional on-chain metadata. Co-authored-by: Yondon Fu <yondon.fu@gmail.com>
1 parent d03671e commit 8f548fa

2 files changed

Lines changed: 65 additions & 5 deletions

File tree

contracts/pm/mixins/MixinTicketProcessor.sol

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,10 @@ abstract contract MixinTicketProcessor is MixinContractRegistry, MTicketProcesso
7474
pure
7575
returns (uint256 creationRound, bytes32 creationRoundBlockHash)
7676
{
77-
require(_auxData.length == 64, "invalid length for ticket auxData: must be 64 bytes");
77+
require(
78+
_auxData.length >= 64 && _auxData.length <= 96,
79+
"invalid length for ticket auxData: must be between 64 and 96 bytes"
80+
);
7881

7982
// _auxData format:
8083
// Bytes [0:31] = creationRound

test/unit/TicketBroker.js

Lines changed: 61 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -798,24 +798,81 @@ describe("TicketBroker", () => {
798798
).to.be.revertedWith("ticket sender is null address")
799799
})
800800

801-
it("reverts if ticket auxData != 64 bytes", async () => {
802-
const auxData = ethers.constants.HashZero
801+
it("reverts if ticket auxData length is less than 64 bytes", async () => {
802+
await expect(
803+
broker.redeemWinningTicket(
804+
createTicket({
805+
recipient,
806+
sender,
807+
auxData: ethers.constants.HashZero
808+
}),
809+
web3.utils.asciiToHex("sig"),
810+
5
811+
)
812+
).to.be.revertedWith(
813+
"invalid length for ticket auxData: must be between 64 and 96 bytes"
814+
)
815+
})
803816

817+
it("reverts if ticket auxData is greater than 96 bytes", async () => {
804818
await expect(
805819
broker.redeemWinningTicket(
806820
createTicket({
807821
recipient,
808822
sender,
809-
auxData
823+
auxData: ethers.utils.hexConcat([
824+
createAuxData(
825+
currentRound,
826+
DUMMY_TICKET_CREATION_ROUND_BLOCK_HASH
827+
),
828+
ethers.constants.HashZero,
829+
ethers.constants.HashZero
830+
])
810831
}),
811832
web3.utils.asciiToHex("sig"),
812833
5
813834
)
814835
).to.be.revertedWith(
815-
"invalid length for ticket auxData: must be 64 bytes"
836+
"invalid length for ticket auxData: must be between 64 and 96 bytes"
816837
)
817838
})
818839

840+
it("accepts 96-byte ticket auxData", async () => {
841+
const recipientRand = 5
842+
const faceValue = 1
843+
844+
await broker.fundDeposit({value: faceValue})
845+
const auxData = ethers.utils.hexConcat([
846+
createAuxData(
847+
currentRound,
848+
DUMMY_TICKET_CREATION_ROUND_BLOCK_HASH
849+
),
850+
ethers.constants.HashZero
851+
])
852+
853+
const ticket = createWinningTicket(
854+
recipient,
855+
sender,
856+
recipientRand,
857+
faceValue,
858+
auxData
859+
)
860+
const senderSig = await signMsg(getTicketHash(ticket), sender)
861+
862+
try {
863+
await broker.redeemWinningTicket(
864+
ticket,
865+
senderSig,
866+
recipientRand
867+
)
868+
} catch (error) {
869+
console.log(
870+
error.reason || error.error?.message || error.message
871+
)
872+
throw error
873+
}
874+
})
875+
819876
it("reverts if block hash for ticket creationRound is null", async () => {
820877
await fixture.roundsManager.setMockBytes32(
821878
functionSig("blockHashForRound(uint256)"),

0 commit comments

Comments
 (0)