Skip to main content

Projects

Git Source

Mainnet: 0x9b5a4053FfBB11cA9cd858AAEE43cc95ab435418

Inherits: ERC721, IProjects, Operatable

Stores project ownership and identifying information.

Projects are represented as ERC-721's.

State Variables​

SECONDS_IN_YEAR​

uint256 private constant SECONDS_IN_YEAR = 31536000;

count​

A running count of project IDs.

uint256 public override count = 0;

uriOf​

Optional mapping for project URIs

mapping(uint256 => string) public override uriOf;

handleOf​

Each project's handle.

mapping(uint256 => bytes32) public override handleOf;

projectFor​

The project that each unique handle represents.

mapping(bytes32 => uint256) public override projectFor;

transferAddressFor​

Handles that have been transfered to the specified address.

mapping(bytes32 => address) public override transferAddressFor;

challengeExpiryOf​

The timestamps when each handle is claimable. A value of 0 means a handle isn't being challenged.

mapping(bytes32 => uint256) public override challengeExpiryOf;

Functions​

exists​

Whether the specified project exists.

function exists(uint256 _projectId) external view override returns (bool);

Parameters

NameTypeDescription
_projectIduint256The project to check the existence of.

Returns

NameTypeDescription
<none>boolA flag indicating if the project exists.

constructor​

constructor(IOperatorStore _operatorStore) ERC721("Juicebox project", "JUICEBOX PROJECT") Operatable(_operatorStore);

Parameters

NameTypeDescription
_operatorStoreIOperatorStoreA contract storing operator assignments.

create​

Create a new project.

Anyone can create a project on an owner's behalf.

function create(address _owner, bytes32 _handle, string calldata _uri, ITerminal _terminal)
external
override
returns (uint256);

Parameters

NameTypeDescription
_owneraddressThe owner of the project.
_handlebytes32A unique handle for the project.
_uristringAn ipfs CID to more info about the project.
_terminalITerminalThe terminal to set for this project so that it can start receiving payments.

Returns

NameTypeDescription
<none>uint256The new project's ID.

setHandle​

Allows a project owner to set the project's handle.

Only a project's owner or operator can set its handle.

function setHandle(uint256 _projectId, bytes32 _handle)
external
override
requirePermission(ownerOf(_projectId), _projectId, Operations.SetHandle);

Parameters

NameTypeDescription
_projectIduint256The ID of the project.
_handlebytes32The new unique handle for the project.

setUri​

Allows a project owner to set the project's uri.

Only a project's owner or operator can set its uri.

function setUri(uint256 _projectId, string calldata _uri)
external
override
requirePermission(ownerOf(_projectId), _projectId, Operations.SetUri);

Parameters

NameTypeDescription
_projectIduint256The ID of the project.
_uristringAn ipfs CDN to more info about the project. Don't include the leading ipfs://

transferHandle​

Allows a project owner to transfer its handle to another address.

Only a project's owner or operator can transfer its handle.

function transferHandle(uint256 _projectId, address _to, bytes32 _newHandle)
external
override
requirePermission(ownerOf(_projectId), _projectId, Operations.SetHandle)
returns (bytes32 _handle);

Parameters

NameTypeDescription
_projectIduint256The ID of the project to transfer the handle from.
_toaddressThe address that can now reallocate the handle.
_newHandlebytes32The new unique handle for the project that will replace the transfered one.

claimHandle​

Allows an address to claim and handle that has been transfered to them and apply it to a project of theirs.

Only a project's owner or operator can claim a handle onto it.

function claimHandle(bytes32 _handle, address _for, uint256 _projectId)
external
override
requirePermissionAllowingWildcardDomain(_for, _projectId, Operations.ClaimHandle)
requirePermission(ownerOf(_projectId), _projectId, Operations.ClaimHandle);

Parameters

NameTypeDescription
_handlebytes32The handle being claimed.
_foraddressThe address that the handle has been transfered to.
_projectIduint256The ID of the project to use the claimed handle.

challengeHandle​

Allows anyone to challenge a project's handle. After one year, the handle can be claimed by the public if the challenge isn't answered by the handle's project. This can be used to make sure a handle belonging to an unattended to project isn't lost forever.

function challengeHandle(bytes32 _handle) external;

Parameters

NameTypeDescription
_handlebytes32The handle to challenge.

renewHandle​

Allows a project to renew its handle so it can't be claimed until a year after its challenged again.

Only a project's owner or operator can renew its handle.

function renewHandle(uint256 _projectId)
external
requirePermission(ownerOf(_projectId), _projectId, Operations.RenewHandle);

Parameters

NameTypeDescription
_projectIduint256The ID of the project that current has the handle being renewed.