Picardy royalty contracts have automation ability built in them, this allows easy update of royalty data on-chain using chainlink keepers and chainlink external adapters. The automation is broken into several parts.
This contract inherits the Chainlink Automation Compatible Interface that exposes two functions to the royalty contract checkUpkeep() and performUpkeep(). This contract has to be registered for automation to work. A minimum of 4 LINK token to pay for upkeep. Picardy automation registrar page Coming Soon.
All automated contracts inherit the Picardy Automation Adapter Interface, which enables it to make off-chain requests for the royalty data.
This contract makes requests to the chainlink node, returns the royalty amount on-chain based on the ticker. It inherits the PayMaster contract interface that acts as a reserve for paying royalties.
function addPicardyReg(address _picardyReg) external
This function is called by the Picardy Hub Admin to add the picardyReg address
function addValidSaleAddress(address _royaltySaleAddress) external
this function is called on the registration of automation
this function should only be called by the picardy automation Registrar
function checkIsValidSaleAddress(address _royaltySaleAddress) external view returns (bool)
this function is called to check the validity of the royalty sale address
function requestRoyaltyAmount(address _royaltySaleAddress, address _oracle, uint256 _royaltyType, string _jobId) external
this function is called by a valid royalty sale contract to request the royalty amount to be sent to the paymaster
this function should only be called by a registered royalty sale contract
function fulfillrequestRoyaltyAmount(bytes32 _requestId, uint256 amount, address _royaltySaleAddress) public
this function is called by the oracle to fulfill the request and send the royalty amount to the paymaster
this function should only be called by the oracle
function onTokenTransfer(address _sender, uint256 _amount, bytes _data) external
this is an implimentation of the ERC677 callback function for LINK token
this function should only be called by the LINK token contrac
function getRoyaltyLinkBalance(address _royaltySaleAddress) external view returns (uint256)
this function gets the link token balance of the royalty sale contract
function getPicardyReg() external view returns (address)
this function is called to get the picardy automation registrar address
function contractBalances() public view returns (uint256 eth, uint256 link)
function getPayMaster() external view returns (address)
function getChainlinkToken() external view returns (address)
function withdrawLink() external
this function is called to withdraw LINK from the contract and should be called only by the picardy hub admin
function adminWithdrawLink(address _royaltyAddress) external
this function is called by the royalty admin to take out link balance from the contract
this function should only be called by the royalty admin
function withdrawBalance() external
this function is called to withdraw ETH from the contract and should be called only by the picardy hub admin
function updateOraclePayment(uint256 _newPayment) external
ths function is called to update the oracle payment and should be called only by the picardy hub admin
function cancelRequest(bytes32 _requestId, uint256 _payment, bytes4 _callbackFunctionId, uint256 _expiration) public
Picardy Protocol will also serve as a chainlink node provider for custom royalty jobs. The chainlink node process requests, does computation and makes API calls off chain and returns the processed data on chain. This is the core of Picardy automated royalty contracts, it allows the royalty sale contracts get the royalty data on chain and updates holders royalty balance.