Skip to main content

Solidity API

Unlock (v14)

initialize

function initialize(address _unlockOwner) external

initializeProxyAdmin

function initializeProxyAdmin() external

deploy a ProxyAdmin contract used to upgrade locks

proxyAdminAddress

function proxyAdminAddress() external view returns (address _proxyAdminAddress)

Retrieve the contract address of the proxy admin that manages the locks

Return Values

NameTypeDescription
_proxyAdminAddressaddressthe address of the ProxyAdmin instance

createLock

function createLock(uint256 _expirationDuration, address _tokenAddress, uint256 _keyPrice, uint256 _maxNumberOfKeys, string _lockName, bytes12) external returns (address)

Create lock (legacy) This deploys a lock for a creator. It also keeps track of the deployed lock.

internally call createUpgradeableLock

Parameters

NameTypeDescription
_expirationDurationuint256the duration of the lock (pass 0 for unlimited duration)
_tokenAddressaddressset to the ERC20 token address, or 0 for ETH.
_keyPriceuint256the price of each key
_maxNumberOfKeysuint256the maximum nimbers of keys to be edited
_lockNamestringthe name of the lock param _salt [deprec] -- kept only for backwards copatibility This may be implemented as a sequence ID or with RNG. It's used with create2 to know the lock's address before the transaction is mined.
bytes12

createUpgradeableLock

function createUpgradeableLock(bytes data) external returns (address)

Create lock (default) This deploys a lock for a creator. It also keeps track of the deployed lock.

this call is passed as encoded function - for instance: bytes memory data = abi.encodeWithSignature( 'initialize(address,uint256,address,uint256,uint256,string)', msg.sender, _expirationDuration, _tokenAddress, _keyPrice, _maxNumberOfKeys, _lockName );

Parameters

NameTypeDescription
databytesbytes containing the call to initialize the lock template

Return Values

NameTypeDescription
[0]addressaddress of the create lock

createUpgradeableLockAtVersion

function createUpgradeableLockAtVersion(bytes data, uint16 lockVersion) external returns (address)

Create an upgradeable lock using a specific PublicLock version

Parameters

NameTypeDescription
databytesbytes containing the call to initialize the lock template (refer to createUpgradeableLock for more details)
lockVersionuint16the version of the lock to use

createUpgradeableLockAtVersion

function createUpgradeableLockAtVersion(bytes data, uint16 lockVersion, bytes[] transactions) external returns (address)

Create an upgradeable lock using a specific PublicLock version, and execute transaction(s) on the created lock.

Parameters

NameTypeDescription
databytesbytes containing the call to initialize the lock template (refer to createUpgradeableLock for more details). Importantly, the initial lock manager needs to be set to this contract.
lockVersionuint16the version of the lock to use
transactionsbytes[]an array of transactions to be executed on the newly created lock. It is recommended to include a transaction to renounce the lock manager as the last transaction.

upgradeLock

function upgradeLock(address payable lockAddress, uint16 version) external returns (address)

Upgrade a lock to a specific version

only available for publicLockVersion > 10 (proxyAdmin /required)

Parameters

NameTypeDescription
lockAddressaddress payablethe existing lock address
versionuint16the version number you are targeting Likely implemented with OpenZeppelin TransparentProxy contract

recordKeyPurchase

function recordKeyPurchase(uint256 _value, address _referrer) external

This function keeps track of the added GDP, as well as grants of discount tokens to the referrer, if applicable. The number of discount tokens granted is based on the value of the referal, the current growth rate and the lock's discount token distribution rate This function is invoked by a previously deployed lock only.

recordConsumedDiscount

function recordConsumedDiscount(uint256 _discount, uint256 _tokens) external view

[DEPRECATED] Call to this function has been removed from PublicLock > v9.

[DEPRECATED] Kept for backwards compatibility This function will keep track of consumed discounts by a given user. It will also grant discount tokens to the creator who is granting the discount based on the amount of discount and compensation rate. This function is invoked by a previously deployed lock only.

computeAvailableDiscountFor

function computeAvailableDiscountFor(address _purchaser, uint256 _keyPrice) external pure returns (uint256 discount, uint256 tokens)

[DEPRECATED] Call to this function has been removed from PublicLock > v9.

[DEPRECATED] Kept for backwards compatibility This function returns the discount available for a user, when purchasing a a key from a lock. This does not modify the state. It returns both the discount and the number of tokens consumed to grant that discount.

globalBaseTokenURI

function globalBaseTokenURI() external view returns (string)

getGlobalBaseTokenURI

function getGlobalBaseTokenURI() external view returns (string)

Redundant with globalBaseTokenURI() for backwards compatibility with v3 & v4 locks.

globalTokenSymbol

function globalTokenSymbol() external view returns (string)

chainId

function chainId() external view returns (uint256)

getGlobalTokenSymbol

function getGlobalTokenSymbol() external view returns (string)

Redundant with globalTokenSymbol() for backwards compatibility with v3 & v4 locks.

configUnlock

function configUnlock(address _udt, address _weth, uint256 _estimatedGasForPurchase, string _symbol, string _URI, uint256 _chainId) external

Allows the owner to update configuration variables

addLockTemplate

function addLockTemplate(address impl, uint16 version) external

Add a PublicLock template to be used for future calls to createLock.

This is used to upgrade conytract per version number

publicLockImpls

function publicLockImpls(uint16 _version) external view returns (address _implAddress)

Match lock templates addresses with version numbers

Parameters

NameTypeDescription
_versionuint16the number of the version of the template

Return Values

NameTypeDescription
_implAddressaddressaddress of the lock templates

publicLockVersions

function publicLockVersions(address _impl) external view returns (uint16)

Match version numbers with lock templates addresses

Parameters

NameTypeDescription
_impladdressthe address of the deployed template contract (PublicLock)

Return Values

NameTypeDescription
[0]uint16number of the version corresponding to this address

publicLockLatestVersion

function publicLockLatestVersion() external view returns (uint16 _version)

Retrive the latest existing lock template version

Return Values

NameTypeDescription
_versionuint16the version number of the latest template (used to deploy contracts)

setLockTemplate

function setLockTemplate(address payable _publicLockAddress) external

Upgrade the PublicLock template used for future calls to createLock.

This will initialize the template and revokeOwnership.

resetTrackedValue

function resetTrackedValue(uint256 _grossNetworkProduct, uint256 _totalDiscountGranted) external

grossNetworkProduct

function grossNetworkProduct() external view returns (uint256)

totalDiscountGranted

function totalDiscountGranted() external view returns (uint256)

locks

function locks(address) external view returns (bool deployed, uint256 totalSales, uint256 yieldedDiscountTokens)

publicLockAddress

function publicLockAddress() external view returns (address)

uniswapOracles

function uniswapOracles(address) external view returns (address)

weth

function weth() external view returns (address)

udt

function udt() external view returns (address)

governanceToken

function governanceToken() external view returns (address)

estimatedGasForPurchase

function estimatedGasForPurchase() external view returns (uint256)

networkBaseFee

function networkBaseFee() external view returns (uint256)

Helper to get the network mining basefee as introduced in EIP-1559

this helper can be wrapped in try/catch statement to avoid revert in networks where EIP-1559 is not implemented

unlockVersion

function unlockVersion() external pure returns (uint16)

setOracle

function setOracle(address _tokenAddress, address _oracleAddress) external

allows the owner to set the oracle address to use for value conversions setting the _oracleAddress to address(0) removes support for the token

This will also call update to ensure at least one datapoint has been recorded.

__initializeOwnable

function __initializeOwnable(address sender) external

isOwner

function isOwner() external view returns (bool)

Returns true if the caller is the current owner.

owner

function owner() external view returns (address)

Returns the address of the current owner.

renounceOwnership

function renounceOwnership() external

_Leaves the contract without owner. It will not be possible to call onlyOwner functions anymore. Can only be called by the current owner.

NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner._

transferOwnership

function transferOwnership(address newOwner) external

Transfers ownership of the contract to a new account (newOwner). Can only be called by the current owner.

setProtocolFee

function setProtocolFee(uint256 _protocolFee) external

Set the fee collected by the protocol

Parameters

NameTypeDescription
_protocolFeeuint256fee (in basis points)

protocolFee

function protocolFee() external view returns (uint256)

The fee (in basis points) collected by the protocol on each purchase / extension / renewal of a key

Return Values

NameTypeDescription
[0]uint256the protocol fee in basic point

getAdmin

function getAdmin() external view returns (address)

Returns the ProxyAdmin contract address that manage upgrades for the current Unlock contract.

this reads the address directly from storage, at the slot _ADMIN_SLOT defined by Open Zeppelin's EIP1967 Proxy implementation which corresponds to the keccak-256 hash of "eip1967.proxy.admin" subtracted by 1

postLockUpgrade

function postLockUpgrade() external

Call executed by a lock after its version upgrade triggred by upgradeLock

  • PublicLock v12 > v13 (mainnet): migrate an existing Lock to another instance of the Unlock contract

The msg.sender will be the upgraded lock

transferTokens

function transferTokens(address token, address to, uint256 amount) external

Functions which transfers tokens held by the contract It handles both ERC20 and the base currency.

This function is onlyOwner

Parameters

NameTypeDescription
tokenaddressthe address of the token to transfer (pass the 0x0 address for the base currency)
toaddressthe address to transfer the tokens to
amountuint256the amount of tokens to transfer

removeLock

function removeLock(address lock) external

Removes a lock from the list of locks. This will prevent the lock from being able to receive governance tokens. The lock will still be able to sell its memberships.

This function is onlyOwner

Parameters

NameTypeDescription
lockaddressaddress of the lock to remove

swapAndBurn

function swapAndBurn(address token, uint256 amount, uint24 poolFee) external

Send tokens held by this contract to the UDT SwapBurner contract. The tokens sent to the contract are then swapped for UDT and UDT itself will be sent to a burner address. This function can be called by anyone (not only the contract owner) as a way to ensure decentralization.

Parameters

NameTypeDescription
tokenaddressthe address of the token (zero address for native) to swap and burn
amountuint256the amount of tokens to swap and burn
poolFeeuint24the poolFee of the token - WETH/Wrapped Native asset to use for the swap

setSwapBurner

function setSwapBurner(address _swapBurnerAddress) external

Set the UDT Swap and Burn contract address

Parameters

NameTypeDescription
_swapBurnerAddressaddressthe address of the SwapBurner contract instance

swapBurnerAddress

function swapBurnerAddress() external view returns (address)

The address of the UDT Swap and Burn contract

burnLock

function burnLock(address lockAddress) external

Disable an existing lock after this step, the lock will be unsable

Parameters

NameTypeDescription
lockAddressaddressthe addres of the lock

burnedLockImpl

function burnedLockImpl() external view returns (address)

The implementation used to disable an existing lock

setBurnedLockImpl

function setBurnedLockImpl(address implAddress) external

Set the implementation that will be used when disabling a lock

burnLock will perform a proxy upgrade of the lock to this contract

Parameters

NameTypeDescription
implAddressaddressan empty implementation contract