Skip to main content

IPublicLockV6

The PublicLock Interface

Methods​

BASIS_POINTS_DEN​

function BASIS_POINTS_DEN() external view returns (uint256)

Returns​

NameTypeDescription
_0uint256undefined

CANCEL_TYPEHASH​

function CANCEL_TYPEHASH() external view returns (bytes32)

The typehash per the EIP-712 standard

This can be computed in JS instead of read from the contract

Returns​

NameTypeDescription
_0bytes32undefined

approve​

function approve(address to, uint256 tokenId) external nonpayable

Parameters​

NameTypeDescription
toaddressundefined
tokenIduint256undefined

balanceOf​

function balanceOf(address owner) external view returns (uint256 balance)

Returns the number of NFTs in owner's account.

Parameters​

NameTypeDescription
owneraddressundefined

Returns​

NameTypeDescription
balanceuint256undefined

beneficiary​

function beneficiary() external view returns (address)

=================================================================== Auto-generated getter functions from public state variables

Returns​

NameTypeDescription
_0addressundefined

cancelAndRefund​

function cancelAndRefund() external nonpayable

Destroys the msg.sender's key and sends a refund based on the amount of time remaining.

cancelAndRefundFor​

function cancelAndRefundFor(address _keyOwner, uint8 _v, bytes32 _r, bytes32 _s) external nonpayable

Cancels a key owned by a different user and sends the funds to the msg.sender.

Parameters​

NameTypeDescription
_keyOwneraddressthis user's key will be canceled
_vuint8_r _s getCancelAndRefundApprovalHash signed by the _keyOwner
_rbytes32undefined
_sbytes32undefined

destroyLock​

function destroyLock() external nonpayable

Used to clean up old lock contracts from the blockchain. TODO: add a check to ensure all keys are INVALID!

Throws if called by other than owner.Throws if lock has not yet been disabled.

disableLock​

function disableLock() external nonpayable

Used to disable lock before migrating keys and/or destroying contract.

Throws if called by other than the owner.Throws if lock contract has already been disabled.

erc1820​

function erc1820() external view returns (address)

Returns​

NameTypeDescription
_0addressundefined

expirationDuration​

function expirationDuration() external view returns (uint256)

Returns​

NameTypeDescription
_0uint256undefined

expireKeyFor​

function expireKeyFor(address _owner) external nonpayable

A function which lets the owner of the lock expire a users' key.

Throws if called by other than lock ownerThrows if key owner does not have a valid key

Parameters​

NameTypeDescription
_owneraddressThe address of the key owner

freeTrialLength​

function freeTrialLength() external view returns (uint256)

Returns​

NameTypeDescription
_0uint256undefined

fullRefund​

function fullRefund(address _keyOwner, uint256 amount) external nonpayable

Invoked by the lock owner to destroy the user's key and perform a refund and cancellation of the keyThrows if called by other than ownerThrows if _keyOwner does not have a valid key

Parameters​

NameTypeDescription
_keyOwneraddressThe key owner to whom we wish to send a refund to
amountuint256The amount to refund the key-owner

getApproved​

function getApproved(uint256 tokenId) external view returns (address operator)

Parameters​

NameTypeDescription
tokenIduint256undefined

Returns​

NameTypeDescription
operatoraddressundefined

getBalance​

function getBalance(address _tokenAddress, address _account) external view returns (uint256)

Gets the current balance of the account provided.

Parameters​

NameTypeDescription
_tokenAddressaddressThe token type to retrieve the balance of.
_accountaddressThe account to get the balance of.

Returns​

NameTypeDescription
_0uint256undefined

getCancelAndRefundApprovalHash​

function getCancelAndRefundApprovalHash(address _keyOwner, address _txSender) external view returns (bytes32 approvalHash)

returns the hash to sign in order to allow another user to cancel on your behalf.

this can be computed in JS instead of read from the contract.

Parameters​

NameTypeDescription
_keyOwneraddressThe key owner's address (also the message signer)
_txSenderaddressThe address cancelling cancel on behalf of the keyOwner

Returns​

NameTypeDescription
approvalHashbytes32undefined

getCancelAndRefundValueFor​

function getCancelAndRefundValueFor(address _owner) external view returns (uint256 refund)

Determines how much of a refund a key owner would receive if they issued

Parameters​

NameTypeDescription
_owneraddressThe key owner to get the refund value for. a cancelAndRefund block.timestamp. Note that due to the time required to mine a tx, the actual refund amount will be lower than what the user reads from this call.

Returns​

NameTypeDescription
refunduint256undefined

getHasValidKey​

function getHasValidKey(address _owner) external view returns (bool)

Checks if the user has a non-expired key.

Parameters​

NameTypeDescription
_owneraddressThe address of the key owner

Returns​

NameTypeDescription
_0boolundefined

getOwnersByPage​

function getOwnersByPage(uint256 _page, uint256 _pageSize) external view returns (address[])

A function which returns a subset of the keys for this Lock as an array

Throws if there are no key owners yet

Parameters​

NameTypeDescription
_pageuint256the page of key owners requested when faceted by page size
_pageSizeuint256the number of Key Owners requested per page

Returns​

NameTypeDescription
_0address[]undefined

getTokenIdFor​

function getTokenIdFor(address _account) external view returns (uint256)

Find the tokenId for a given user

Throws if key owner does not have a valid key

Parameters​

NameTypeDescription
_accountaddressThe address of the key owner

Returns​

NameTypeDescription
_0uint256undefined

getTransferFee​

function getTransferFee(address _owner, uint256 _time) external view returns (uint256)

Determines how much of a fee a key owner would need to pay in order to transfer the key to another account. This is pro-rated so the fee goes down overtime.

Throws if _owner does not have a valid key

Parameters​

NameTypeDescription
_owneraddressThe owner of the key check the transfer fee for.
_timeuint256The amount of time to calculate the fee for.

Returns​

NameTypeDescription
_0uint256undefined

grantKeys​

function grantKeys(address[] _recipients, uint256[] _expirationTimestamps) external nonpayable

Allows the Lock owner to give a collection of users a key with no charge. Each key may be assigned a different expiration date.

Throws if called by other than the lock-owner

Parameters​

NameTypeDescription
_recipientsaddress[]An array of receiving addresses
_expirationTimestampsuint256[]An array of expiration Timestamps for the keys being granted

initialize​

function initialize(address _owner, uint256 _expirationDuration, address _tokenAddress, uint256 _keyPrice, uint256 _maxNumberOfKeys, string _lockName) external nonpayable

=================================================================== Functions

Parameters​

NameTypeDescription
_owneraddressundefined
_expirationDurationuint256undefined
_tokenAddressaddressundefined
_keyPriceuint256undefined
_maxNumberOfKeysuint256undefined
_lockNamestringundefined

invalidateOffchainApproval​

function invalidateOffchainApproval(uint256 _nextAvailableNonce) external nonpayable

Sets the minimum nonce for a valid off-chain approval message from the senders account.

This can be used to invalidate a previously signed message.

Parameters​

NameTypeDescription
_nextAvailableNonceuint256undefined

isAlive​

function isAlive() external view returns (bool)

Returns​

NameTypeDescription
_0boolundefined

isApprovedForAll​

function isApprovedForAll(address owner, address operator) external view returns (bool)

Parameters​

NameTypeDescription
owneraddressundefined
operatoraddressundefined

Returns​

NameTypeDescription
_0boolundefined

isKeyOwner​

function isKeyOwner(uint256 _tokenId, address _owner) external view returns (bool)

Checks if the given address owns the given tokenId.

Parameters​

NameTypeDescription
_tokenIduint256The tokenId of the key to check
_owneraddressThe potential key owners address

Returns​

NameTypeDescription
_0boolundefined

isOwner​

function isOwner() external view returns (bool)

Returns​

NameTypeDescription
_0boolundefined

keyCancelInterfaceId​

function keyCancelInterfaceId() external view returns (bytes32)

Returns​

NameTypeDescription
_0bytes32undefined

keyExpirationTimestampFor​

function keyExpirationTimestampFor(address _owner) external view returns (uint256 timestamp)

Returns the key's ExpirationTimestamp field for a given owner.Throws if owner has never owned a key for this lock

Parameters​

NameTypeDescription
_owneraddressaddress of the user for whom we search the key

Returns​

NameTypeDescription
timestampuint256undefined

keyOwnerToNonce​

function keyOwnerToNonce(address) external view returns (uint256)

Parameters​

NameTypeDescription
_0addressundefined

Returns​

NameTypeDescription
_0uint256undefined

keyPrice​

function keyPrice() external view returns (uint256)

Returns​

NameTypeDescription
_0uint256undefined

keySoldInterfaceId​

function keySoldInterfaceId() external view returns (bytes32)

Returns​

NameTypeDescription
_0bytes32undefined

maxNumberOfKeys​

function maxNumberOfKeys() external view returns (uint256)

Returns​

NameTypeDescription
_0uint256undefined

name​

function name() external view returns (string _name)

A descriptive name for a collection of NFTs in this contract

Returns​

NameTypeDescription
_namestringundefined

numberOfOwners​

function numberOfOwners() external view returns (uint256)

Public function which returns the total number of unique owners (both expired and valid). This may be larger than totalSupply.

Returns​

NameTypeDescription
_0uint256undefined

owner​

function owner() external view returns (address)

=================================================================== From Openzeppelin's Ownable.sol

Returns​

NameTypeDescription
_0addressundefined

ownerOf​

function ownerOf(uint256 tokenId) external view returns (address owner)

Returns the owner of the NFT specified by tokenId.

Parameters​

NameTypeDescription
tokenIduint256undefined

Returns​

NameTypeDescription
owneraddressundefined

owners​

function owners(uint256) external view returns (address)

Parameters​

NameTypeDescription
_0uint256undefined

Returns​

NameTypeDescription
_0addressundefined

publicLockVersion​

function publicLockVersion() external pure returns (uint256)

The version number of the current implementation on this network.

Returns​

NameTypeDescription
_0uint256undefined

purchase​

function purchase(uint256 _value, address _recipient, address _referrer, bytes _data) external payable

Purchase functionThrows if lock is disabled. Throws if lock is sold-out. Throws if _recipient == address(0).Setting _value to keyPrice exactly doubles as a security feature. That way if the lock owner increases the price while my transaction is pending I can't be charged more than I expected (only applicable to ERC-20 when more than keyPrice is approved for spending).

Parameters​

NameTypeDescription
_valueuint256the number of tokens to pay for this purchase >= the current keyPrice - any applicable discount (_value is ignored when using ETH)
_recipientaddressaddress of the recipient of the purchased key
_referreraddressaddress of the user making the referral
_databytesarbitrary data populated by the front-end which initiated the sale

refundPenaltyBasisPoints​

function refundPenaltyBasisPoints() external view returns (uint256)

Returns​

NameTypeDescription
_0uint256undefined

renounceOwnership​

function renounceOwnership() external nonpayable

safeTransferFrom​

function safeTransferFrom(address from, address to, uint256 tokenId) external nonpayable

Transfers a specific NFT (tokenId) from one account (from) to another (to). Requirements: - from, to cannot be zero. - tokenId must be owned by from. - If the caller is not from, it must be have been allowed to move this NFT by either {approve} or {setApprovalForAll}.

Parameters​

NameTypeDescription
fromaddressundefined
toaddressundefined
tokenIduint256undefined

safeTransferFrom​

function safeTransferFrom(address from, address to, uint256 tokenId, bytes data) external nonpayable

Parameters​

NameTypeDescription
fromaddressundefined
toaddressundefined
tokenIduint256undefined
databytesundefined

setApprovalForAll​

function setApprovalForAll(address operator, bool _approved) external nonpayable

Parameters​

NameTypeDescription
operatoraddressundefined
_approvedboolundefined

setBaseTokenURI​

function setBaseTokenURI(string _baseTokenURI) external nonpayable

Allows the Lock owner to update the baseTokenURI for this Lock.

Throws if called by other than the lock owner

Parameters​

NameTypeDescription
_baseTokenURIstringString representing the base of the URI for this lock.

shareKey​

function shareKey(address _to, uint256 _tokenId, uint256 _timeShared) external nonpayable

Allows the key owner to safely share their key (parent key) by transferring a portion of the remaining time to a new key (child key).

Throws if key is not valid.Throws if _to is the zero addressEmit Transfer event

Parameters​

NameTypeDescription
_toaddressThe recipient of the shared key
_tokenIduint256the key to share
_timeShareduint256The amount of time shared checks if _to is a smart contract (code size > 0). If so, it calls onERC721Received on _to and throws if the return value is not bytes4(keccak256('onERC721Received(address,address,uint,bytes)')).

supportsInterface​

function supportsInterface(bytes4 interfaceId) external view returns (bool)

=================================================================== From ERC165.sol

Parameters​

NameTypeDescription
interfaceIdbytes4undefined

Returns​

NameTypeDescription
_0boolundefined

symbol​

function symbol() external view returns (string)

Gets the token symbol

Returns​

NameTypeDescription
_0stringundefined

tokenAddress​

function tokenAddress() external view returns (address)

Returns​

NameTypeDescription
_0addressundefined

tokenByIndex​

function tokenByIndex(uint256 index) external view returns (uint256)

Parameters​

NameTypeDescription
indexuint256undefined

Returns​

NameTypeDescription
_0uint256undefined

tokenOfOwnerByIndex​

function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId)

Parameters​

NameTypeDescription
owneraddressundefined
indexuint256undefined

Returns​

NameTypeDescription
tokenIduint256undefined

tokenURI​

function tokenURI(uint256 _tokenId) external view returns (string)

A distinct Uniform Resource Identifier (URI) for a given asset.

Throws if _tokenId is not a valid NFT. URIs are defined in RFC 3986. The URI may point to a JSON file that conforms to the "ERC721 Metadata JSON Schema". https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md

Parameters​

NameTypeDescription
_tokenIduint256The tokenID we're inquiring about

Returns​

NameTypeDescription
_0stringundefined

totalSupply​

function totalSupply() external view returns (uint256)

Returns​

NameTypeDescription
_0uint256undefined

transferFeeBasisPoints​

function transferFeeBasisPoints() external view returns (uint256)

Returns​

NameTypeDescription
_0uint256undefined

transferFrom​

function transferFrom(address from, address to, uint256 tokenId) external nonpayable

Transfers a specific NFT (tokenId) from one account (from) to another (to). Requirements: - If the caller is not from, it must be approved to move this NFT by either {approve} or {setApprovalForAll}.*

Parameters​

NameTypeDescription
fromaddressundefined
toaddressundefined
tokenIduint256undefined

transferOwnership​

function transferOwnership(address newOwner) external nonpayable

Parameters​

NameTypeDescription
newOwneraddressundefined

unlockProtocol​

function unlockProtocol() external view returns (address)

Returns​

NameTypeDescription
_0addressundefined

updateBeneficiary​

function updateBeneficiary(address _beneficiary) external nonpayable

A function which lets the owner of the lock update the beneficiary account, which receives funds on withdrawal.

Throws if called by other than owner of beneficiaryThrows if _beneficiary is address(0)

Parameters​

NameTypeDescription
_beneficiaryaddressThe new address to set as the beneficiary

updateKeyPricing​

function updateKeyPricing(uint256 _keyPrice, address _tokenAddress) external nonpayable

A function which lets the owner of the lock to change the price for future purchases.

Throws if called by other than ownerThrows if lock has been disabledThrows if _tokenAddress is not a valid token

Parameters​

NameTypeDescription
_keyPriceuint256The new price to set for keys
_tokenAddressaddressThe address of the erc20 token to use for pricing the keys, or 0 to use ETH

updateLockName​

function updateLockName(string _lockName) external nonpayable

Allows the Lock owner to assign a descriptive name for this Lock.

Throws if called by other than the lock owner

Parameters​

NameTypeDescription
_lockNamestringThe new name for the lock

updateLockSymbol​

function updateLockSymbol(string _lockSymbol) external nonpayable

Allows the Lock owner to assign a Symbol for this Lock.

Throws if called by other than the lock owner

Parameters​

NameTypeDescription
_lockSymbolstringThe new Symbol for the lock

updateRefundPenalty​

function updateRefundPenalty(uint256 _freeTrialLength, uint256 _refundPenaltyBasisPoints) external nonpayable

Allow the owner to change the refund penalty.

Throws if called by other than owner

Parameters​

NameTypeDescription
_freeTrialLengthuint256The new duration of free trials for this lock
_refundPenaltyBasisPointsuint256The new refund penaly in basis-points(bps)

updateTransferFee​

function updateTransferFee(uint256 _transferFeeBasisPoints) external nonpayable

Allow the Lock owner to change the transfer fee.

Throws if called by other than lock-owner

Parameters​

NameTypeDescription
_transferFeeBasisPointsuint256The new transfer fee in basis-points(bps). Ex: 200 bps = 2%

withdraw​

function withdraw(address _tokenAddress, uint256 _amount) external nonpayable

Called by owner to withdraw all funds from the lock and send them to the beneficiary.Throws if called by other than the owner or beneficiary

Parameters​

NameTypeDescription
_tokenAddressaddressspecifies the token address to withdraw or 0 for ETH. This is usually the same as tokenAddress in MixinFunds.
_amountuint256specifies the max amount to withdraw, which may be reduced when considering the available balance. Set to 0 or MAX_UINT to withdraw everything. -- however be wary of draining funds as it breaks the cancelAndRefund and fullRefund use cases.

Events​

Approval​

event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)

Parameters​

NameTypeDescription
owner indexedaddressundefined
approved indexedaddressundefined
tokenId indexeduint256undefined

ApprovalForAll​

event ApprovalForAll(address indexed owner, address indexed operator, bool approved)

Parameters​

NameTypeDescription
owner indexedaddressundefined
operator indexedaddressundefined
approvedboolundefined

CancelKey​

event CancelKey(uint256 indexed tokenId, address indexed owner, address indexed sendTo, uint256 refund)

Parameters​

NameTypeDescription
tokenId indexeduint256undefined
owner indexedaddressundefined
sendTo indexedaddressundefined
refunduint256undefined

Destroy​

event Destroy(uint256 balance, address indexed owner)

Parameters​

NameTypeDescription
balanceuint256undefined
owner indexedaddressundefined

Disable​

event Disable()

ExpireKey​

event ExpireKey(uint256 indexed tokenId)

Parameters​

NameTypeDescription
tokenId indexeduint256undefined

NewLockSymbol​

event NewLockSymbol(string symbol)

Parameters​

NameTypeDescription
symbolstringundefined

NonceChanged​

event NonceChanged(address indexed keyOwner, uint256 nextAvailableNonce)

Parameters​

NameTypeDescription
keyOwner indexedaddressundefined
nextAvailableNonceuint256undefined

PricingChanged​

event PricingChanged(uint256 oldKeyPrice, uint256 keyPrice, address oldTokenAddress, address tokenAddress)

Parameters​

NameTypeDescription
oldKeyPriceuint256undefined
keyPriceuint256undefined
oldTokenAddressaddressundefined
tokenAddressaddressundefined

RefundPenaltyChanged​

event RefundPenaltyChanged(uint256 freeTrialLength, uint256 refundPenaltyBasisPoints)

Parameters​

NameTypeDescription
freeTrialLengthuint256undefined
refundPenaltyBasisPointsuint256undefined

Transfer​

event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)

Parameters​

NameTypeDescription
from indexedaddressundefined
to indexedaddressundefined
tokenId indexeduint256undefined

TransferFeeChanged​

event TransferFeeChanged(uint256 transferFeeBasisPoints)

Parameters​

NameTypeDescription
transferFeeBasisPointsuint256undefined

Withdrawal​

event Withdrawal(address indexed sender, address indexed tokenAddress, address indexed beneficiary, uint256 amount)

Parameters​

NameTypeDescription
sender indexedaddressundefined
tokenAddress indexedaddressundefined
beneficiary indexedaddressundefined
amountuint256undefined