TesseractBuffer.vy — commit
# @version ^0.3.10
MIN_RESOLUTION_DELAY: constant(uint256) = 2 # blocks
@external
def buffer_transaction_with_commitment(
tx_id: bytes32,
commitment: bytes32, # keccak(payload || secret)
swap_group_id: bytes32,
deadline: uint256,
refund_to: address,
):
assert self.has_role(BUFFER_ROLE, msg.sender)
assert deadline > block.timestamp, "past deadline"
self.commitments[tx_id] = Commit({
hash: commitment,
group: swap_group_id,
reveal_block: block.number + 1,
deadline: deadline,
refund_to: refund_to,
})
log Committed(tx_id, swap_group_id, deadline) TesseractBuffer.vy — reveal + resolve gate
@external
def reveal_transaction(
tx_id: bytes32,
payload: Bytes[512],
secret: bytes32,
):
c: Commit = self.commitments[tx_id]
assert block.number >= c.reveal_block, "too early"
assert keccak256(concat(payload, secret)) == c.hash
self.revealed[tx_id] = payload
@external
def resolve_dependency(tx_id: bytes32):
assert self.has_role(RESOLVE_ROLE, msg.sender)
c: Commit = self.commitments[tx_id]
# flash loans cannot span the resolution delay
assert block.number >= c.reveal_block + MIN_RESOLUTION_DELAY
assert block.timestamp <= c.deadline, "expired -> refundable"
self._resolve_group(c.group, tx_id)