Venues — Guest-List Rotation
Evidence scope: The behavior below is from the pinned Solidity source. A source-file hash does not establish deployed bytecode equivalence. Check the selected deployment and caller before sending a transaction.
QING.Join writes now + 1 days only when _list[LAU] < now. Joining before expiry does not renew the pass. At nonzero cover, an expired entry pays CoverCharge from msg.sender; allowance must be strictly greater than CoverCharge.
| Expiry | Join | Chat at paid venue |
|---|---|---|
| Future | No payment; no expiry extension | Expiry check passes |
| Equal to now | No payment; no expiry extension | PayCover revert |
| Past | Payment and a new one-day entry | NotAdmitted before renewal |
The play
Section titled “The play”Do not schedule a free 23-hour Join renewal: that transaction does not extend the entry. A bouncer can explicitly refresh it with setGuestlist(lau). Otherwise wait for expiry and simulate a paid Join, accounting for the exact-equality boundary. At zero cover, guest-list expiry does not gate Chat.
CROWS and staff qualify bouncers, not automatic paid-chat exemptions. A qualified bouncer can grant a guest-list entry. The one-day value is 86400 timestamp seconds, not a guaranteed number of blocks.
Use these calls here. Simulations preview the current state; each confirmed call is a separate transaction.
VenueAsset.allowance(address owner, address spender)Read
Open this function to load its call form.
VenueAsset.approve(address spender, uint256 value)Simulate / call
Open this function to load its call form.
QING.Admitted(address UserToken)Read
Open this function to load its call form.
QING.Join(address UserToken)Simulate / call
Open this function to load its call form.
QING.setGuestlist(address _a)Simulate / call
Open this function to load its call form.
QING.removeGuest(address _a)Simulate / call
Open this function to load its call form.