Art Blocks
About
Stats
Public Functions
57
Event Types
4
Code Size
48,356 bytes
Library Use
Uses SafeMath for uint256.
Events (4) keyboard_arrow_up
Structs (1) keyboard_arrow_up
Project Event
Members
name |
string help
|
artist |
string help
|
description |
string help
|
website |
string help
|
license |
string help
|
dynamic |
bool help
|
artistAddress |
address help
|
additionalPayee |
address help
|
additionalPayeePercentage |
uint256 help
|
secondMarketRoyalty |
uint256 help
|
pricePerTokenInWei |
uint256 help
|
projectBaseURI |
string help
|
projectBaseIpfsURI |
string help
|
invocations |
uint256 help
|
maxInvocations |
uint256 help
|
scriptJSON |
string help
|
scripts |
mapping(uint256 => string) help
|
scriptCount |
uint help
|
ipfsHash |
string help
|
hashes |
uint256 help
|
useIpfs |
bool help
|
active |
bool help
|
locked |
bool help
|
paused |
bool help
|
Functions
balanceOf keyboard_arrow_up
Source Code
function balanceOf(address owner) public view returns (uint256) {
require(owner != address(0), "ERC721: balance query for the zero address");
return _ownedTokensCount[owner].current();
}
ownerOf keyboard_arrow_up
Source Code
function ownerOf(uint256 tokenId) public view returns (address) {
address owner = _tokenOwner[tokenId];
require(owner != address(0), "ERC721: owner query for nonexistent token");
return owner;
}
safeTransferFrom keyboard_arrow_up
Requirements help
Source Code
function safeTransferFrom(address from, address to, uint256 tokenId) public {
safeTransferFrom(from, to, tokenId, "");
}
transferFrom keyboard_arrow_up
Requirements help
Source Code
function transferFrom(address from, address to, uint256 tokenId) public {
//solhint-disable-next-line max-line-length
require(_isApprovedOrOwner(msg.sender, tokenId), "ERC721: transfer caller is not owner nor approved");
_transferFrom(from, to, tokenId);
}
approve keyboard_arrow_up
Requirements help
Source Code
function approve(address to, uint256 tokenId) public {
address owner = ownerOf(tokenId);
require(to != owner, "ERC721: approval to current owner");
require(msg.sender == owner || isApprovedForAll(owner, msg.sender),
"ERC721: approve caller is not owner nor approved for all"
);
_tokenApprovals[tokenId] = to;
emit Approval(owner, to, tokenId);
}
getApproved keyboard_arrow_up
Requirements help
null
Source Code
function getApproved(uint256 tokenId) public view returns (address) {
require(_exists(tokenId), "ERC721: approved query for nonexistent token");
return _tokenApprovals[tokenId];
}
setApprovalForAll keyboard_arrow_up
Requirements help
Source Code
function setApprovalForAll(address to, bool approved) public {
require(to != msg.sender, "ERC721: approve to caller");
_operatorApprovals[msg.sender][to] = approved;
emit ApprovalForAll(msg.sender, to, approved);
}
isApprovedForAll keyboard_arrow_up
safeTransferFrom keyboard_arrow_up
Requirements help
Source Code
function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public {
transferFrom(from, to, tokenId);
require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
}
totalSupply keyboard_arrow_up
tokenOfOwnerByIndex keyboard_arrow_up
Source Code
function tokenOfOwnerByIndex(address owner, uint256 index) public view returns (uint256) {
require(index < balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
return _ownedTokens[owner][index];
}
tokenByIndex keyboard_arrow_up
Requirements help
Source Code
function tokenByIndex(uint256 index) public view returns (uint256) {
require(index < totalSupply(), "ERC721Enumerable: global index out of bounds");
return _allTokens[index];
}
supportsInterface keyboard_arrow_up
name keyboard_arrow_up
symbol keyboard_arrow_up
purchase keyboard_arrow_up
Requirements help
One or more of the following:
-
the sender's address
must be equal to
undefined.artistAddress
- ORundefined.paused must not be true
Source Code
function purchase(uint256 _projectId) public payable returns (uint256 _tokenId) {
return purchaseTo(msg.sender, _projectId);
}
purchaseTo keyboard_arrow_up
Requirements help
One or more of the following:
-
the sender's address
must be equal to
undefined.artistAddress
- ORundefined.paused must not be true
Source Code
function purchaseTo(address _to, uint256 _projectId) public payable returns (uint256 _tokenId) {
require(msg.value >= projects[_projectId].pricePerTokenInWei, "Must send at least pricePerTokenInWei");
require(projects[_projectId].invocations.add(1) <= projects[_projectId].maxInvocations, "Must not exceed max invocations");
require(projects[_projectId].active || msg.sender == projects[_projectId].artistAddress, "Project must exist and be active");
require(!projects[_projectId].paused || msg.sender == projects[_projectId].artistAddress, "Purchases are paused.");
uint256 tokenId = _mintToken(_to, _projectId);
_splitFunds(_projectId);
return tokenId;
}
updateArtblocksAddress keyboard_arrow_up
Modifiers help
onlyAdmin checks for the following:
Source Code
function updateArtblocksAddress(address payable _artblocksAddress) public onlyAdmin {
artblocksAddress = _artblocksAddress;
}
updateArtblocksPercentage keyboard_arrow_up
addWhitelisted keyboard_arrow_up
Modifiers help
onlyAdmin checks for the following:
Source Code
function addWhitelisted(address _address) public onlyAdmin {
isWhitelisted[_address] = true;
}
removeWhitelisted keyboard_arrow_up
Modifiers help
onlyAdmin checks for the following:
Source Code
function removeWhitelisted(address _address) public onlyAdmin {
isWhitelisted[_address] = false;
}
toggleProjectIsLocked keyboard_arrow_up
Modifiers help
onlyWhitelisted checks for the following:
onlyUnlocked checks for the following:
Source Code
function toggleProjectIsLocked(uint256 _projectId) public onlyWhitelisted onlyUnlocked(_projectId) {
projects[_projectId].locked = true;
}
toggleProjectIsActive keyboard_arrow_up
Modifiers help
onlyWhitelisted checks for the following:
Source Code
function toggleProjectIsActive(uint256 _projectId) public onlyWhitelisted {
projects[_projectId].active = !projects[_projectId].active;
}
updateProjectArtistAddress keyboard_arrow_up
Modifiers help
onlyArtistOrWhitelisted checks for the following:
Source Code
function updateProjectArtistAddress(uint256 _projectId, address payable _artistAddress) public onlyArtistOrWhitelisted(_projectId) {
projects[_projectId].artistAddress = _artistAddress;
}
toggleProjectIsPaused keyboard_arrow_up
Modifiers help
onlyArtist checks for the following:
Source Code
function toggleProjectIsPaused(uint256 _projectId) public onlyArtist(_projectId) {
projects[_projectId].paused = !projects[_projectId].paused;
}
addProject keyboard_arrow_up
Modifiers help
onlyWhitelisted checks for the following:
Source Code
function addProject(uint256 _pricePerTokenInWei, bool _dynamic) public onlyWhitelisted {
uint256 projectId = nextProjectId;
projects[projectId].artistAddress = msg.sender;
projects[projectId].pricePerTokenInWei = _pricePerTokenInWei;
projects[projectId].paused=true;
projects[projectId].dynamic=_dynamic;
projects[projectId].maxInvocations = ONE_MILLION;
if (!_dynamic) {
projects[projectId].hashes = 0;
} else {
projects[projectId].hashes = 1;
}
nextProjectId = nextProjectId.add(1);
}
updateProjectPricePerTokenInWei keyboard_arrow_up
Modifiers help
onlyArtist checks for the following:
Source Code
function updateProjectPricePerTokenInWei(uint256 _projectId, uint256 _pricePerTokenInWei) onlyArtist(_projectId) public {
projects[_projectId].pricePerTokenInWei = _pricePerTokenInWei;
}
updateProjectName keyboard_arrow_up
Modifiers help
onlyUnlocked checks for the following:
onlyArtistOrWhitelisted checks for the following:
Source Code
function updateProjectName(uint256 _projectId, string memory _projectName) onlyUnlocked(_projectId) onlyArtistOrWhitelisted(_projectId) public {
projects[_projectId].name = _projectName;
}
updateProjectArtistName keyboard_arrow_up
Modifiers help
onlyUnlocked checks for the following:
onlyArtistOrWhitelisted checks for the following:
Source Code
function updateProjectArtistName(uint256 _projectId, string memory _projectArtistName) onlyUnlocked(_projectId) onlyArtistOrWhitelisted(_projectId) public {
projects[_projectId].artist = _projectArtistName;
}
updateProjectAdditionalPayeeInfo keyboard_arrow_up
Parameters help
Modifiers help
onlyArtist checks for the following:
Requirements help
Source Code
function updateProjectAdditionalPayeeInfo(uint256 _projectId, address payable _additionalPayee, uint256 _additionalPayeePercentage) onlyArtist(_projectId) public {
require(_additionalPayeePercentage <= 100, "Max of 100%");
projects[_projectId].additionalPayee = _additionalPayee;
projects[_projectId].additionalPayeePercentage = _additionalPayeePercentage;
}
updateProjectSecondaryMarketRoyaltyPercentage keyboard_arrow_up
Modifiers help
onlyArtist checks for the following:
Requirements help
Source Code
function updateProjectSecondaryMarketRoyaltyPercentage(uint256 _projectId, uint256 _secondMarketRoyalty) onlyArtist(_projectId) public {
require(_secondMarketRoyalty <= 100, "Max of 100%");
projects[_projectId].secondMarketRoyalty = _secondMarketRoyalty;
}
updateProjectDescription keyboard_arrow_up
Modifiers help
onlyArtist checks for the following:
Source Code
function updateProjectDescription(uint256 _projectId, string memory _projectDescription) onlyArtist(_projectId) public {
projects[_projectId].description = _projectDescription;
}
updateProjectWebsite keyboard_arrow_up
Modifiers help
onlyArtist checks for the following:
Source Code
function updateProjectWebsite(uint256 _projectId, string memory _projectWebsite) onlyArtist(_projectId) public {
projects[_projectId].website = _projectWebsite;
}
updateProjectLicense keyboard_arrow_up
Modifiers help
onlyUnlocked checks for the following:
onlyArtistOrWhitelisted checks for the following:
Source Code
function updateProjectLicense(uint256 _projectId, string memory _projectLicense) onlyUnlocked(_projectId) onlyArtistOrWhitelisted(_projectId) public {
projects[_projectId].license = _projectLicense;
}
updateProjectMaxInvocations keyboard_arrow_up
Modifiers help
onlyUnlocked checks for the following:
onlyArtistOrWhitelisted checks for the following:
Requirements help
Source Code
function updateProjectMaxInvocations(uint256 _projectId, uint256 _maxInvocations) onlyUnlocked(_projectId) onlyArtistOrWhitelisted(_projectId) public {
require(_maxInvocations > projects[_projectId].invocations, "You must set max invocations greater than current invocations");
require(_maxInvocations <= ONE_MILLION, "Cannot exceed 1,000,000");
projects[_projectId].maxInvocations = _maxInvocations;
}
updateProjectHashesGenerated keyboard_arrow_up
Modifiers help
onlyUnlocked checks for the following:
onlyWhitelisted checks for the following:
Requirements help
Source Code
function updateProjectHashesGenerated(uint256 _projectId, uint256 _hashes) onlyUnlocked(_projectId) onlyWhitelisted() public {
require(projects[_projectId].invocations == 0, "Can not modify hashes generated after a token is minted.");
require(projects[_projectId].dynamic, "Can only modify hashes on dynamic projects.");
require(_hashes <= 100 && _hashes >= 0, "Hashes generated must be a positive integer and max hashes per invocation are 100");
projects[_projectId].hashes = _hashes;
}
addProjectScript keyboard_arrow_up
Modifiers help
onlyUnlocked checks for the following:
onlyArtistOrWhitelisted checks for the following:
Source Code
function addProjectScript(uint256 _projectId, string memory _script) onlyUnlocked(_projectId) onlyArtistOrWhitelisted(_projectId) public {
projects[_projectId].scripts[projects[_projectId].scriptCount] = _script;
projects[_projectId].scriptCount = projects[_projectId].scriptCount.add(1);
}
updateProjectScript keyboard_arrow_up
Modifiers help
onlyUnlocked checks for the following:
onlyArtistOrWhitelisted checks for the following:
Requirements help
Source Code
function updateProjectScript(uint256 _projectId, uint256 _scriptId, string memory _script) onlyUnlocked(_projectId) onlyArtistOrWhitelisted(_projectId) public {
require(_scriptId < projects[_projectId].scriptCount, "scriptId out of range");
projects[_projectId].scripts[_scriptId] = _script;
}
removeProjectLastScript keyboard_arrow_up
Modifiers help
onlyUnlocked checks for the following:
onlyArtistOrWhitelisted checks for the following:
Requirements help
Source Code
function removeProjectLastScript(uint256 _projectId) onlyUnlocked(_projectId) onlyArtistOrWhitelisted(_projectId) public {
require(projects[_projectId].scriptCount > 0, "there are no scripts to remove");
delete projects[_projectId].scripts[projects[_projectId].scriptCount - 1];
projects[_projectId].scriptCount = projects[_projectId].scriptCount.sub(1);
}
updateProjectScriptJSON keyboard_arrow_up
Modifiers help
onlyUnlocked checks for the following:
onlyArtistOrWhitelisted checks for the following:
Source Code
function updateProjectScriptJSON(uint256 _projectId, string memory _projectScriptJSON) onlyUnlocked(_projectId) onlyArtistOrWhitelisted(_projectId) public {
projects[_projectId].scriptJSON = _projectScriptJSON;
}
updateProjectIpfsHash keyboard_arrow_up
Modifiers help
onlyUnlocked checks for the following:
onlyArtistOrWhitelisted checks for the following:
Source Code
function updateProjectIpfsHash(uint256 _projectId, string memory _ipfsHash) onlyUnlocked(_projectId) onlyArtistOrWhitelisted(_projectId) public {
projects[_projectId].ipfsHash = _ipfsHash;
}
updateProjectBaseURI keyboard_arrow_up
Modifiers help
onlyArtist checks for the following:
Source Code
function updateProjectBaseURI(uint256 _projectId, string memory _newBaseURI) onlyArtist(_projectId) public {
projects[_projectId].projectBaseURI = _newBaseURI;
}
updateProjectBaseIpfsURI keyboard_arrow_up
Modifiers help
onlyArtist checks for the following:
Source Code
function updateProjectBaseIpfsURI(uint256 _projectId, string memory _projectBaseIpfsURI) onlyArtist(_projectId) public {
projects[_projectId].projectBaseIpfsURI = _projectBaseIpfsURI;
}
toggleProjectUseIpfsForStatic keyboard_arrow_up
Modifiers help
onlyArtist checks for the following:
Requirements help
Source Code
function toggleProjectUseIpfsForStatic(uint256 _projectId) onlyArtist(_projectId) public {
require(!projects[_projectId].dynamic, "can only set static IPFS hash for static projects");
projects[_projectId].useIpfs = !projects[_projectId].useIpfs;
}
toggleProjectIsDynamic keyboard_arrow_up
Modifiers help
onlyUnlocked checks for the following:
onlyArtistOrWhitelisted checks for the following:
Requirements help
Source Code
function toggleProjectIsDynamic(uint256 _projectId) onlyUnlocked(_projectId) onlyArtistOrWhitelisted(_projectId) public {
require(projects[_projectId].invocations == 0, "Can not switch after a token is minted.");
if (projects[_projectId].dynamic) {
projects[_projectId].hashes = 0;
} else {
projects[_projectId].hashes = 1;
}
projects[_projectId].dynamic = !projects[_projectId].dynamic;
}
overrideTokenDynamicImageWithIpfsLink keyboard_arrow_up
Modifiers help
onlyArtist checks for the following:
Source Code
function overrideTokenDynamicImageWithIpfsLink(uint256 _tokenId, string memory _ipfsHash) onlyArtist(tokenIdToProjectId[_tokenId]) public {
staticIpfsImageLink[_tokenId] = _ipfsHash;
}
clearTokenIpfsImageUri keyboard_arrow_up
Modifiers help
onlyArtist checks for the following:
Source Code
function clearTokenIpfsImageUri(uint256 _tokenId) onlyArtist(tokenIdToProjectId[_tokenId]) public {
delete staticIpfsImageLink[tokenIdToProjectId[_tokenId]];
}
projectDetails keyboard_arrow_up
Source Code
function projectDetails(uint256 _projectId) view public returns (string memory projectName, string memory artist, string memory description, string memory website, string memory license, bool dynamic) {
projectName = projects[_projectId].name;
artist = projects[_projectId].artist;
description = projects[_projectId].description;
website = projects[_projectId].website;
license = projects[_projectId].license;
dynamic = projects[_projectId].dynamic;
}
projectTokenInfo keyboard_arrow_up
Source Code
function projectTokenInfo(uint256 _projectId) view public returns (address artistAddress, uint256 pricePerTokenInWei, uint256 invocations, uint256 maxInvocations, bool active, address additionalPayee, uint256 additionalPayeePercentage) {
artistAddress = projects[_projectId].artistAddress;
pricePerTokenInWei = projects[_projectId].pricePerTokenInWei;
invocations = projects[_projectId].invocations;
maxInvocations = projects[_projectId].maxInvocations;
active = projects[_projectId].active;
additionalPayee = projects[_projectId].additionalPayee;
additionalPayeePercentage = projects[_projectId].additionalPayeePercentage;
}
projectScriptInfo keyboard_arrow_up
Source Code
function projectScriptInfo(uint256 _projectId) view public returns (string memory scriptJSON, uint256 scriptCount, uint256 hashes, string memory ipfsHash, bool locked, bool paused) {
scriptJSON = projects[_projectId].scriptJSON;
scriptCount = projects[_projectId].scriptCount;
hashes = projects[_projectId].hashes;
ipfsHash = projects[_projectId].ipfsHash;
locked = projects[_projectId].locked;
paused = projects[_projectId].paused;
}
projectScriptByIndex keyboard_arrow_up
projectURIInfo keyboard_arrow_up
Source Code
function projectURIInfo(uint256 _projectId) view public returns (string memory projectBaseURI, string memory projectBaseIpfsURI, bool useIpfs) {
projectBaseURI = projects[_projectId].projectBaseURI;
projectBaseIpfsURI = projects[_projectId].projectBaseIpfsURI;
useIpfs = projects[_projectId].useIpfs;
}
projectShowAllTokens keyboard_arrow_up
showTokenHashes keyboard_arrow_up
tokensOfOwner keyboard_arrow_up
getRoyaltyData keyboard_arrow_up
Source Code
function getRoyaltyData(uint256 _tokenId) public view returns (address artistAddress, address additionalPayee, uint256 additionalPayeePercentage, uint256 royaltyFeeByID) {
artistAddress = projects[tokenIdToProjectId[_tokenId]].artistAddress;
additionalPayee = projects[tokenIdToProjectId[_tokenId]].additionalPayee;
additionalPayeePercentage = projects[tokenIdToProjectId[_tokenId]].additionalPayeePercentage;
royaltyFeeByID = projects[tokenIdToProjectId[_tokenId]].secondMarketRoyalty;
}
tokenURI keyboard_arrow_up
Modifiers help
onlyValidTokenId checks for the following:
null
Source Code
function tokenURI(uint256 _tokenId) external view onlyValidTokenId(_tokenId) returns (string memory) {
if (bytes(staticIpfsImageLink[_tokenId]).length > 0) {
return Strings.strConcat(projects[tokenIdToProjectId[_tokenId]].projectBaseIpfsURI, staticIpfsImageLink[_tokenId]);
}
if (!projects[tokenIdToProjectId[_tokenId]].dynamic && projects[tokenIdToProjectId[_tokenId]].useIpfs) {
return Strings.strConcat(projects[tokenIdToProjectId[_tokenId]].projectBaseIpfsURI, projects[tokenIdToProjectId[_tokenId]].ipfsHash);
}
return Strings.strConcat(projects[tokenIdToProjectId[_tokenId]].projectBaseURI, Strings.uint2str(_tokenId));
}