Crossbell
Cross-platform, ring a bell.
Explore the Wiki »
View Website
·
Join Discord
·
Report Bug
🐳 Introduction
Crossbell is an ownership platform composed of
- an EVM-compatible blockchain
- a protocol implemented by a set of smart contracts
Specifically, the information generated from social activities will be the initial form of data-ownership by users on Crossbell.
This repository is the implementation of the protocol.
⚙ Development
Install foundry if you don't have one:
# install foundry
curl -L https://foundry.paradigm.xyz | bash
foundryup
Compile and run tests:
yarn
yarn test
#run single test function using --match-test
forge test --match-test testXXX -vvvvv
#run single test contract using --match-contract
forge test --match-contract xxxTest -vvvvv
#run a group of tests using --match-path
forge test --match-path test/... -vvvvv
Deploy:
forge script scripts/Deploy.s.sol:Deploy --private-key $PRIVATE_KEY --broadcast --legacy --rpc-url $RPC_URL --ffi
forge script scripts/Deploy.s.sol:Deploy --sig 'sync()' --private-key $PRIVATE_KEY --broadcast --legacy --rpc-url $RPC_URL --ffi
Contents
ERC721
Inherits: Context, ERC165, IERC721, IERC721Metadata
Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including the Metadata extension, but not including the Enumerable extension, which is available separately as {ERC721Enumerable}.
State Variables
_name
string private _name;
_symbol
string private _symbol;
_owners
mapping(uint256 => address) private _owners;
_balances
mapping(address => uint256) private _balances;
_tokenApprovals
mapping(uint256 => address) private _tokenApprovals;
_operatorApprovals
mapping(address => mapping(address => bool)) private _operatorApprovals;
Functions
__ERC721_Init
function __ERC721_Init(string calldata name_, string calldata symbol_) internal;
supportsInterface
See {IERC165-supportsInterface}.
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool);
balanceOf
See {IERC721-balanceOf}.
function balanceOf(address owner) public view virtual override returns (uint256);
ownerOf
See {IERC721-ownerOf}.
function ownerOf(uint256 tokenId) public view virtual override returns (address);
name
See {IERC721Metadata-name}.
function name() public view virtual override returns (string memory);
symbol
See {IERC721Metadata-symbol}.
function symbol() public view virtual override returns (string memory);
tokenURI
See {IERC721Metadata-tokenURI}.
function tokenURI(uint256) public view virtual override returns (string memory);
approve
See {IERC721-approve}.
function approve(address to, uint256 tokenId) public virtual override;
getApproved
See {IERC721-getApproved}.
function getApproved(uint256 tokenId) public view virtual override returns (address);
setApprovalForAll
See {IERC721-setApprovalForAll}.
function setApprovalForAll(address operator, bool approved) public virtual override;
isApprovedForAll
See {IERC721-isApprovedForAll}.
function isApprovedForAll(address owner, address operator) public view virtual override returns (bool);
transferFrom
See {IERC721-transferFrom}.
function transferFrom(address from, address to, uint256 tokenId) public virtual override;
safeTransferFrom
See {IERC721-safeTransferFrom}.
function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override;
safeTransferFrom
See {IERC721-safeTransferFrom}.
function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override;
_safeTransfer
*Safely transfers tokenId
token from from
to to
, checking first that contract recipients
are aware of the ERC721 protocol to prevent tokens from being forever locked.
_data
is additional data, it has no specified format and it is sent in call to to
.
This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
implement alternative mechanisms to perform token transfer, such as signature-based.
Requirements:
from
cannot be the zero address.to
cannot be the zero address.tokenId
token must exist and be owned byfrom
.- If
to
refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event.*
function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual;
_exists
Returns whether tokenId
exists.
Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
Tokens start existing when they are minted (_mint
),
and stop existing when they are burned (_burn
).
function _exists(uint256 tokenId) internal view virtual returns (bool);
_isApprovedOrOwner
*Returns whether spender
is allowed to manage tokenId
.
Requirements:
tokenId
must exist.*
function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool);
_safeMint
*Safely mints tokenId
and transfers it to to
.
Requirements:
tokenId
must not exist.- If
to
refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event.*
function _safeMint(address to, uint256 tokenId) internal virtual;
_safeMint
Same as {xref-ERC721-_safeMint-address-uint256-}[_safeMint
], with an additional data
parameter which is
forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual;
_mint
*Mints tokenId
and transfers it to to
.
WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
Requirements:
tokenId
must not exist.to
cannot be the zero address. Emits a {Transfer} event.*
function _mint(address to, uint256 tokenId) internal virtual;
_burn
*Destroys tokenId
.
The approval is cleared when the token is burned.
Requirements:
tokenId
must exist. Emits a {Transfer} event.*
function _burn(uint256 tokenId) internal virtual;
_transfer
*Transfers tokenId
from from
to to
.
As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
Requirements:
to
cannot be the zero address.tokenId
token must be owned byfrom
. Emits a {Transfer} event.*
function _transfer(address from, address to, uint256 tokenId) internal virtual;
_approve
Approve to
to operate on tokenId
Emits a {Approval} event.
function _approve(address to, uint256 tokenId) internal virtual;
_setApprovalForAll
Approve operator
to operate on all of owner
tokens
Emits a {ApprovalForAll} event.
function _setApprovalForAll(address owner, address operator, bool approved) internal virtual;
_checkOnERC721Received
Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. The call is not executed if the target address is not a contract.
function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data) private returns (bool);
Parameters
Name | Type | Description |
---|---|---|
from | address | address representing the previous owner of the given token ID |
to | address | target address that will receive the tokens |
tokenId | uint256 | uint256 ID of the token to be transferred |
_data | bytes | bytes optional data to send along with the call |
Returns
Name | Type | Description |
---|---|---|
<none> | bool | bool whether the call correctly returned the expected magic value |
_beforeTokenTransfer
*Hook that is called before any token transfer. This includes minting and burning. Calling conditions:
- When
from
andto
are both non-zero,from
'stokenId
will be transferred toto
. - When
from
is zero,tokenId
will be minted forto
. - When
to
is zero,from
'stokenId
will be burned. from
andto
are never both zero. To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].*
function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual;
_afterTokenTransfer
*Hook that is called after any transfer of tokens. This includes minting and burning. Calling conditions:
- when
from
andto
are both non-zero. from
andto
are never both zero. To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].*
function _afterTokenTransfer(address from, address to, uint256 tokenId) internal virtual;
ERC721Enumerable
Inherits: ERC721, IERC721Enumerable
State Variables
_ownedTokens
mapping(address => mapping(uint256 => uint256)) private _ownedTokens;
_ownedTokensIndex
mapping(uint256 => uint256) private _ownedTokensIndex;
_allTokens
uint256[] private _allTokens;
_allTokensIndex
mapping(uint256 => uint256) private _allTokensIndex;
Functions
supportsInterface
See {IERC165-supportsInterface}.
function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool);
tokenOfOwnerByIndex
See {IERC721Enumerable-tokenOfOwnerByIndex}.
function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256);
totalSupply
See {IERC721Enumerable-totalSupply}.
function totalSupply() public view virtual override returns (uint256);
tokenByIndex
See {IERC721Enumerable-tokenByIndex}.
function tokenByIndex(uint256 index) public view virtual override returns (uint256);
_beforeTokenTransfer
*Hook that is called before any token transfer. This includes minting and burning. Calling conditions:
- When
from
andto
are both non-zero,from
'stokenId
will be transferred toto
. - When
from
is zero,tokenId
will be minted forto
. - When
to
is zero,from
'stokenId
will be burned. from
cannot be the zero address.to
cannot be the zero address. To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].*
function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual override;
_addTokenToOwnerEnumeration
Private function to add a token to this extension's ownership-tracking data structures.
function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private;
Parameters
Name | Type | Description |
---|---|---|
to | address | address representing the new owner of the given token ID |
tokenId | uint256 | uint256 ID of the token to be added to the tokens list of the given address |
_addTokenToAllTokensEnumeration
Private function to add a token to this extension's token tracking data structures.
function _addTokenToAllTokensEnumeration(uint256 tokenId) private;
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | uint256 ID of the token to be added to the tokens list |
_removeTokenFromOwnerEnumeration
Private function to remove a token from this extension's ownership-tracking data structures. Note that
while the token is not assigned a new owner, the _ownedTokensIndex
mapping is not updated: this allows for
gas optimizations e.g. when performing a transfer operation (avoiding double writes).
This has O(1) time complexity, but alters the order of the _ownedTokens array.
function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private;
Parameters
Name | Type | Description |
---|---|---|
from | address | address representing the previous owner of the given token ID |
tokenId | uint256 | uint256 ID of the token to be removed from the tokens list of the given address |
_removeTokenFromAllTokensEnumeration
Private function to remove a token from this extension's token tracking data structures. This has O(1) time complexity, but alters the order of the _allTokens array.
function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private;
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | uint256 ID of the token to be removed from the tokens list |
LinklistBase
Inherits: ERC165
State Variables
_name
string private _name;
_symbol
string private _symbol;
_owners
For compatibility with previous ERC721Enumerable, we need to keep the unused slots for upgradeability.
mapping(uint256 => address) private _owners;
_balances
mapping(address => uint256) private _balances;
_tokenApprovals
mapping(uint256 => address) private _tokenApprovals;
_operatorApprovals
mapping(address => mapping(address => bool)) private _operatorApprovals;
_ownedTokens
mapping(address => mapping(uint256 => uint256)) private _ownedTokens;
_ownedTokensIndex
mapping(uint256 => uint256) private _ownedTokensIndex;
_allTokens
uint256[] private _allTokens;
_allTokensIndex
mapping(uint256 => uint256) private _allTokensIndex;
Functions
_initialize
function _initialize(string calldata name_, string calldata symbol_) internal;
supportsInterface
See {IERC165-supportsInterface}.
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165) returns (bool);
name
See {IERC721Metadata-name}.
function name() public view returns (string memory);
symbol
See {IERC721Metadata-symbol}.
function symbol() public view returns (string memory);
NFTBase
Inherits: ERC721Enumerable
Functions
_initialize
function _initialize(string calldata name, string calldata symbol) internal;
burn
function burn(uint256 tokenId) public virtual;
Contents
- IERC20Mintable
- ILinkModule
- ILinkModule4Address
- ILinkModule4Character
- ILinkModule4ERC721
- ILinkModule4Linklist
- ILinkModule4Note
- ILinklist
- IMintModule4Note
- IMintNFT
- ITipsWithConfig
- ITipsWithFee
- IWeb3Entry
IERC20Mintable
Functions
mint
function mint(address to, uint256 amount) external;
ILinkModule
Functions
initializeLinkModule
function initializeLinkModule(uint256 characterId, uint256 noteId, string calldata name, string calldata symbol)
external
returns (bytes memory);
processLink
function processLink(address to, uint256 characterId, uint256 noteId, bytes calldata data) external;
ILinkModule4Address
Functions
initializeLinkModule
function initializeLinkModule(address account, bytes calldata data) external returns (bytes memory);
processLink
function processLink(address account, uint256 noteId, bytes calldata data) external;
ILinkModule4Character
Functions
initializeLinkModule
function initializeLinkModule(uint256 characterId, bytes calldata data) external returns (bytes memory);
processLink
function processLink(address caller, uint256 characterId, bytes calldata data) external;
ILinkModule4ERC721
Functions
initializeLinkModule
function initializeLinkModule(address tokenAddress, uint256 tokenId, bytes calldata data)
external
returns (bytes memory);
processLink
function processLink(address account, address tokenAddress, uint256 tokenId, bytes calldata data) external;
ILinkModule4Linklist
Functions
initializeLinkModule
function initializeLinkModule(uint256 tokenId, bytes calldata data) external returns (bytes memory);
processLink
function processLink(address account, uint256 tokenId, bytes calldata data) external;
ILinkModule4Note
Functions
initializeLinkModule
function initializeLinkModule(uint256 characterId, uint256 noteId, bytes calldata data)
external
returns (bytes memory);
processLink
function processLink(address caller, uint256 characterId, uint256 noteId, bytes calldata data) external;
ILinklist
Functions
initialize
Initializes the contract.
function initialize(string calldata name_, string calldata symbol_, address web3Entry_) external;
Parameters
Name | Type | Description |
---|---|---|
name_ | string | The name of the token. |
symbol_ | string | The symbol of the token. |
web3Entry_ | address | The address of the Web3Entry contract. |
mint
Mints a Linklist NFT to the specified character with linkType. This can only be called by web3Entry.
function mint(uint256 characterId, bytes32 linkType) external returns (uint256 tokenId);
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | The character ID to mint to. |
linkType | bytes32 | The type of link. |
Returns
Name | Type | Description |
---|---|---|
tokenId | uint256 | The minted token ID. |
burn
Burns a Linklist NFT.
Only web3Entry can burn the Linklist NFT.
function burn(uint256 tokenId) external;
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID to burn. |
setUri
Sets URI for a linklist.
You can set any URI for your linklist, and the functionality of this URI is undetermined and expandable. One scenario that comes to mind is setting a cover for your liked notes or following list in your bookmarks.
function setUri(uint256 tokenId, string memory uri) external;
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID to set URI. |
uri | string | The new URI to set. |
setLinkType
Sets the link type of the linklist NFT.
function setLinkType(uint256 tokenId, bytes32 linkType) external;
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist to set. |
linkType | bytes32 | The link type to set. |
addLinkingCharacterId
Adds a linked character to a linklist.
function addLinkingCharacterId(uint256 tokenId, uint256 toCharacterId) external;
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist. |
toCharacterId | uint256 | The character ID to link. |
removeLinkingCharacterId
Removes a linked character from a linklist.
function removeLinkingCharacterId(uint256 tokenId, uint256 toCharacterId) external;
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist. |
toCharacterId | uint256 | The character ID to remove. |
addLinkingNote
Adds a linked note to a linklist.
function addLinkingNote(uint256 tokenId, uint256 toCharacterId, uint256 toNoteId) external returns (bytes32);
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist. |
toCharacterId | uint256 | The character ID to link. |
toNoteId | uint256 | The note ID to link. |
Returns
Name | Type | Description |
---|---|---|
<none> | bytes32 | linkKey The link key. |
removeLinkingNote
Removes a linked note from a linklist.
function removeLinkingNote(uint256 tokenId, uint256 toCharacterId, uint256 toNoteId) external;
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist. |
toCharacterId | uint256 | The character ID to remove. |
toNoteId | uint256 | The note ID to remove. |
addLinkingERC721
Adds a linked ERC721 to a linklist.
function addLinkingERC721(uint256 tokenId, address tokenAddress, uint256 erc721TokenId) external returns (bytes32);
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist. |
tokenAddress | address | The address of ERC721 contract. |
erc721TokenId | uint256 | The token ID of ERC721. |
Returns
Name | Type | Description |
---|---|---|
<none> | bytes32 | linkKey The link key of ERC721. |
removeLinkingERC721
Removes a linked ERC721 from a linklist.
function removeLinkingERC721(uint256 tokenId, address tokenAddress, uint256 erc721TokenId) external;
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist. |
tokenAddress | address | The address of ERC721 contract. |
erc721TokenId | uint256 | The token ID of ERC721. |
addLinkingAddress
Adds a linked address to a linklist.
function addLinkingAddress(uint256 tokenId, address ethAddress) external;
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist. |
ethAddress | address | The address to link. |
removeLinkingAddress
Removes a linked address from a linklist.
function removeLinkingAddress(uint256 tokenId, address ethAddress) external;
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist. |
ethAddress | address | The address to remove. |
addLinkingAnyUri
Adds a linked anyURI to a linklist.
function addLinkingAnyUri(uint256 tokenId, string memory toUri) external returns (bytes32);
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist. |
toUri | string | The anyURI to link. |
Returns
Name | Type | Description |
---|---|---|
<none> | bytes32 | linkKey The link key of anyURI. |
removeLinkingAnyUri
Removes a linked anyURI from a linklist.
function removeLinkingAnyUri(uint256 tokenId, string memory toUri) external;
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist. |
toUri | string | The anyURI to remove. |
addLinkingLinklistId
Adds a linked linklist to a linklist.
function addLinkingLinklistId(uint256 tokenId, uint256 linklistId) external;
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist. |
linklistId | uint256 | The linklist ID to link. |
removeLinkingLinklistId
Removes a linked linklist from a linklist.
function removeLinkingLinklistId(uint256 tokenId, uint256 linklistId) external;
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist. |
linklistId | uint256 | The linklist ID to remove. |
getLinkingCharacterIds
Returns the linked character IDs of the linklist NFT.
function getLinkingCharacterIds(uint256 tokenId) external view returns (uint256[] memory);
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist to check. |
Returns
Name | Type | Description |
---|---|---|
<none> | uint256[] | The linked character IDs. |
getLinkingCharacterListLength
Returns the length of linked character IDs of the linklist NFT.
function getLinkingCharacterListLength(uint256 tokenId) external view returns (uint256);
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist to check. |
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | The length of linked character IDs . |
getOwnerCharacterId
Returns the character ID who owns the linklist NFT.
function getOwnerCharacterId(uint256 tokenId) external view returns (uint256);
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist to check. |
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | The character ID who owns the linklist NFT. |
getLinkingNotes
Returns the linked notes of the linklist NFT.
function getLinkingNotes(uint256 tokenId) external view returns (DataTypes.NoteStruct[] memory results);
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist to check. |
Returns
Name | Type | Description |
---|---|---|
results | DataTypes.NoteStruct[] | The linked notes. |
getLinkingNote
Return the linked note of the linklist NFT by linkKey.
function getLinkingNote(bytes32 linkKey) external view returns (DataTypes.NoteStruct memory);
Parameters
Name | Type | Description |
---|---|---|
linkKey | bytes32 | The link key of the note. |
Returns
Name | Type | Description |
---|---|---|
<none> | DataTypes.NoteStruct | The linked note. |
getLinkingNoteListLength
Returns the length of linked notes of the linklist NFT.
function getLinkingNoteListLength(uint256 tokenId) external view returns (uint256);
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist to check. |
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | The length of linked notes. |
getLinkingERC721s
Returns the linked ERC721s of the linklist NFT.
function getLinkingERC721s(uint256 tokenId) external view returns (DataTypes.ERC721Struct[] memory results);
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist to check. |
Returns
Name | Type | Description |
---|---|---|
results | DataTypes.ERC721Struct[] | The linked ERC721s. |
getLinkingERC721
Return the linked ERC721 of the linklist NFT by linkKey.
function getLinkingERC721(bytes32 linkKey) external view returns (DataTypes.ERC721Struct memory);
Parameters
Name | Type | Description |
---|---|---|
linkKey | bytes32 | The link key of the ERC721. |
Returns
Name | Type | Description |
---|---|---|
<none> | DataTypes.ERC721Struct | The linked ERC721. |
getLinkingERC721ListLength
Returns the length of linked ERC721s of the linklist NFT.
function getLinkingERC721ListLength(uint256 tokenId) external view returns (uint256);
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist to check. |
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | The length of linked ERC721s. |
getLinkingAddresses
Returns the linked addresses of the linklist NFT.
function getLinkingAddresses(uint256 tokenId) external view returns (address[] memory);
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist to check. |
Returns
Name | Type | Description |
---|---|---|
<none> | address[] | The linked addresses. |
getLinkingAddressListLength
Returns the linked address of the linklist NFT by linkKey.
function getLinkingAddressListLength(uint256 tokenId) external view returns (uint256);
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist to check. |
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | The length of linked address. |
getLinkingAnyUris
Returns the linked anyURIs of the linklist NFT.
function getLinkingAnyUris(uint256 tokenId) external view returns (string[] memory results);
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist to check. |
Returns
Name | Type | Description |
---|---|---|
results | string[] | The linked anyURIs. |
getLinkingAnyUri
Return the linked anyURI of the linklist NFT by linkKey.
function getLinkingAnyUri(bytes32 linkKey) external view returns (string memory);
Parameters
Name | Type | Description |
---|---|---|
linkKey | bytes32 | The link key of the anyURI. |
Returns
Name | Type | Description |
---|---|---|
<none> | string | The linked anyURI. |
getLinkingAnyUriKeys
Returns the length of linked anyURIs of the linklist NFT.
function getLinkingAnyUriKeys(uint256 tokenId) external view returns (bytes32[] memory);
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist to check. |
Returns
Name | Type | Description |
---|---|---|
<none> | bytes32[] | The length of linked anyURIs. |
getLinkingAnyListLength
Returns the length of linked Uris of the linklist NFT.
function getLinkingAnyListLength(uint256 tokenId) external view returns (uint256);
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist to check. |
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | The length of linked Uris. |
getLinkingLinklistIds
Returns the linked linklists of the linklist NFT.
function getLinkingLinklistIds(uint256 tokenId) external view returns (uint256[] memory);
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist to check. |
Returns
Name | Type | Description |
---|---|---|
<none> | uint256[] | The linked linklists. |
getLinkingLinklistLength
Return the length of linked linklist of the linklist NFT.
function getLinkingLinklistLength(uint256 tokenId) external view returns (uint256);
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist to check. |
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | The length of linked linklist. |
getCurrentTakeOver
This function is deprecated..
function getCurrentTakeOver(uint256 tokenId) external view returns (uint256);
getLinkType
Returns the link type of the linklist NFT.
function getLinkType(uint256 tokenId) external view returns (bytes32);
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist to check. |
Returns
Name | Type | Description |
---|---|---|
<none> | bytes32 | The link type. |
Uri
Returns the URI of the linklist NFT.
function Uri(uint256 tokenId) external view returns (string memory);
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist to check. |
Returns
Name | Type | Description |
---|---|---|
<none> | string | The URI of the linklist NFT. |
characterOwnerOf
Returns the character ID who owns the Linklist NFT.
function characterOwnerOf(uint256 tokenId) external view returns (uint256);
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID to check. |
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | The character ID. |
totalSupply
Returns the total supply of the Linklist NFTs.
function totalSupply() external view returns (uint256);
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | The total supply of the Linklist NFTs. |
balanceOf
Returns the balance of the character.
function balanceOf(uint256 characterId) external view returns (uint256);
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | The character ID to check. |
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | uint256 The balance of the character. |
balanceOf
Returns the balance of the address.
function balanceOf(address account) external view returns (uint256 balance);
Parameters
Name | Type | Description |
---|---|---|
account | address | The address to check. |
Returns
Name | Type | Description |
---|---|---|
balance | uint256 | The balance of the address. |
ownerOf
Returns the owner of the tokenId
token.
function ownerOf(uint256 tokenId) external view returns (address);
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID to check. |
Returns
Name | Type | Description |
---|---|---|
<none> | address | The owner of the tokenId token. |
IMintModule4Note
Functions
initializeMintModule
Initialize the MintModule for a specific note.
function initializeMintModule(uint256 characterId, uint256 noteId, bytes calldata data)
external
returns (bytes memory);
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | The character ID of the note to initialize. |
noteId | uint256 | The note ID to initialize. |
data | bytes | The data passed from the user to be decoded. |
Returns
Name | Type | Description |
---|---|---|
<none> | bytes | bytes The returned data of calling initializeMintModule. |
processMint
Processes the mint logic.
Triggered when the mintNote
of web3Entry is called, if mint module of note is set.
function processMint(address to, uint256 characterId, uint256 noteId, bytes calldata data) external;
Parameters
Name | Type | Description |
---|---|---|
to | address | The receive address of the NFT. |
characterId | uint256 | The character ID of the note owner. |
noteId | uint256 | The note ID. |
data | bytes | The data passed from the user to be decoded. |
IMintNFT
Functions
initialize
Initialize the mint nft.
function initialize(
uint256 characterId_,
uint256 noteId_,
address web3Entry_,
string calldata name_,
string calldata symbol_
) external;
Parameters
Name | Type | Description |
---|---|---|
characterId_ | uint256 | The character ID of the note to initialize. |
noteId_ | uint256 | The note ID to initialize. |
web3Entry_ | address | The address of web3Entry contract. |
name_ | string | The name to set for this NFT. |
symbol_ | string | The symbol to set for this NFT. |
mint
Mints a note NFT to the specified address. This can only be called by web3Entry, and is called upon note.
function mint(address to) external returns (uint256);
Parameters
Name | Type | Description |
---|---|---|
to | address | The address to mint the NFT to. |
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | uint256 The minted token ID. |
setTokenRoyalty
Changes the royalty percentage of specific token ID for secondary sales. Can only be called by character owner of note.
function setTokenRoyalty(uint256 tokenId, address recipient, uint96 fraction) external;
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID to set. |
recipient | address | The receive address. |
fraction | uint96 | The royalty percentage measured in basis points. Each basis point represents 0.01%. |
setDefaultRoyalty
Changes the default royalty percentage for secondary sales. Can only be called by character owner of note.
function setDefaultRoyalty(address recipient, uint96 fraction) external;
Parameters
Name | Type | Description |
---|---|---|
recipient | address | The receive address. |
fraction | uint96 | The royalty percentage measured in basis points. Each basis point represents 0.01%. |
deleteDefaultRoyalty
Deletes the default royalty percentage. Can only be called by character owner of note.
function deleteDefaultRoyalty() external;
originalReceiver
Returns the original receiver of specified NFT.
function originalReceiver(uint256 tokenId) external view returns (address);
Returns
Name | Type | Description |
---|---|---|
<none> | address | The address of original receiver. |
getSourceNotePointer
Returns the source note pointer mapped to this note NFT.
function getSourceNotePointer() external view returns (uint256 characterId, uint256 noteId);
Returns
Name | Type | Description |
---|---|---|
characterId | uint256 | The character ID. |
noteId | uint256 | The note ID. |
ITipsWithConfig
This is the interface for the TipsWithConfig contract.
Functions
initialize
Initialize the contract, setting web3Entry address.
function initialize(address web3Entry_) external;
Parameters
Name | Type | Description |
---|---|---|
web3Entry_ | address | Address of web3Entry. |
setDefaultFeeFraction
Sets the default fee percentage of specific receiver.
The feeReceiver can be a platform account.
function setDefaultFeeFraction(address feeReceiver, uint256 fraction) external;
Parameters
Name | Type | Description |
---|---|---|
feeReceiver | address | The fee receiver address. |
fraction | uint256 | The percentage measured in basis points. Each basis point represents 0.01%. |
setFeeFraction4Character
Sets the fee percentage of specific <receiver, character>.
If this is set, it will override the default fee fraction.
function setFeeFraction4Character(address feeReceiver, uint256 characterId, uint256 fraction) external;
Parameters
Name | Type | Description |
---|---|---|
feeReceiver | address | The fee receiver address. |
characterId | uint256 | The character ID. |
fraction | uint256 | The percentage measured in basis points. Each basis point represents 0.01%. |
setTipsConfig4Character
Sets the tips config of specific <fromCharacter, toCharacter>.
Emits a {SetTipsConfig4Character} event.
If the tips config of specific <fromCharacter, toCharacter> is already, it will try to collect the tips first, and then override the tips config.
function setTipsConfig4Character(
uint256 fromCharacterId,
uint256 toCharacterId,
address token,
uint256 amount,
uint256 startTime,
uint256 endTime,
uint256 interval,
address feeReceiver
) external;
Parameters
Name | Type | Description |
---|---|---|
fromCharacterId | uint256 | The token ID of character that would send the reward. |
toCharacterId | uint256 | The token ID of character that would receive the reward. |
token | address | The token address. |
amount | uint256 | The amount of token. |
startTime | uint256 | The start time of tips. |
endTime | uint256 | The end time of tips. |
interval | uint256 | The interval of tips. |
feeReceiver | address | The fee receiver address. |
cancelTips4Character
Cancels the tips config.
Emits a {CancelTips4Character} event.
It will try to collect the tips first, and then delete the tips config.
function cancelTips4Character(uint256 tipConfigId) external;
Parameters
Name | Type | Description |
---|---|---|
tipConfigId | uint256 | The tip config ID to cancel. |
collectTips4Character
Collects all unredeemed token from the fromCharacter
to the toCharacter
.
Emits a {CollectTips4Character} event if collects successfully.
It will transfer all unredeemed token from the fromCharacter
to the toCharacter
.
function collectTips4Character(uint256 tipConfigId) external returns (uint256 collectedAmount);
Parameters
Name | Type | Description |
---|---|---|
tipConfigId | uint256 | The tip config ID. |
Returns
Name | Type | Description |
---|---|---|
collectedAmount | uint256 | The amount of token collected. |
getFeeFraction
Returns the fee percentage of specific <receiver, note>.
It will return the first non-zero value by priority feeFraction4Character and defaultFeeFraction.
function getFeeFraction(address feeReceiver, uint256 characterId) external view returns (uint256);
Parameters
Name | Type | Description |
---|---|---|
feeReceiver | address | The fee receiver address. |
characterId | uint256 | The character ID . |
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | fraction The percentage measured in basis points. Each basis point represents 0.01%. |
getFeeAmount
Returns how much the fee is owed by <feeFraction, tipAmount>.
function getFeeAmount(address feeReceiver, uint256 characterId, uint256 tipAmount) external view returns (uint256);
Parameters
Name | Type | Description |
---|---|---|
feeReceiver | address | The fee receiver address. |
characterId | uint256 | The character ID . |
tipAmount | uint256 |
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | The fee amount. |
getTipsConfigId
Return the tips config Id.
function getTipsConfigId(uint256 fromCharacterId, uint256 toCharacterId) external view returns (uint256);
Parameters
Name | Type | Description |
---|---|---|
fromCharacterId | uint256 | The token ID of character that initiated a reward. |
toCharacterId | uint256 | The token ID of character that would receive the reward. |
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | uint256 Returns tips config ID. |
getTipsConfig
Return the tips config.
function getTipsConfig(uint256 tipConfigId) external view returns (TipsConfig memory config);
Parameters
Name | Type | Description |
---|---|---|
tipConfigId | uint256 | The tip config ID. |
getWeb3Entry
Returns the address of web3Entry contract.
function getWeb3Entry() external view returns (address);
Returns
Name | Type | Description |
---|---|---|
<none> | address | The address of web3Entry contract. |
Structs
TipsConfig
struct TipsConfig {
uint256 id;
uint256 fromCharacterId;
uint256 toCharacterId;
address token;
uint256 amount;
uint256 startTime;
uint256 endTime;
uint256 interval;
address feeReceiver;
uint256 totalRound;
uint256 currentRound;
}
ITipsWithFee
This is the interface for the TipsWithFee contract.
Functions
initialize
Initializes the TipsWithFee.
function initialize(address web3Entry_, address token_) external;
Parameters
Name | Type | Description |
---|---|---|
web3Entry_ | address | Address of web3Entry. |
token_ | address | Address of token. |
setDefaultFeeFraction
Changes the default fee percentage of specific receiver.
The feeReceiver can be a platform account.
function setDefaultFeeFraction(address feeReceiver, uint256 fraction) external;
Parameters
Name | Type | Description |
---|---|---|
feeReceiver | address | The fee receiver address. |
fraction | uint256 | The percentage measured in basis points. Each basis point represents 0.01%. |
setFeeFraction4Character
Changes the fee percentage of specific <receiver, character>.
If feeFraction4Character is set, it will override the default fee fraction.
function setFeeFraction4Character(address feeReceiver, uint256 characterId, uint256 fraction) external;
Parameters
Name | Type | Description |
---|---|---|
feeReceiver | address | The fee receiver address. |
characterId | uint256 | The character ID. |
fraction | uint256 | The percentage measured in basis points. Each basis point represents 0.01%. |
setFeeFraction4Note
Changes the fee percentage of specific <receiver, note>.
If feeFraction4Note is set, it will override feeFraction4Character and the default fee fraction.
function setFeeFraction4Note(address feeReceiver, uint256 characterId, uint256 noteId, uint256 fraction) external;
Parameters
Name | Type | Description |
---|---|---|
feeReceiver | address | The fee receiver address. |
characterId | uint256 | The character ID . |
noteId | uint256 | The note ID . |
fraction | uint256 | The percentage measured in basis points. Each basis point represents 0.01%. |
getFeeFraction
Returns the fee percentage of specific <receiver, note>.
It will return the first non-zero value by priority feeFraction4Note, feeFraction4Character and defaultFeeFraction.
function getFeeFraction(address feeReceiver, uint256 characterId, uint256 noteId) external view returns (uint256);
Parameters
Name | Type | Description |
---|---|---|
feeReceiver | address | The fee receiver address. |
characterId | uint256 | The character ID . |
noteId | uint256 | The note ID . |
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | fraction The percentage measured in basis points. Each basis point represents 0.01%. |
getFeeAmount
Returns how much the fee is owed by <feeFraction, tipAmount>.
function getFeeAmount(address feeReceiver, uint256 characterId, uint256 noteId, uint256 tipAmount)
external
view
returns (uint256);
Parameters
Name | Type | Description |
---|---|---|
feeReceiver | address | The fee receiver address. |
characterId | uint256 | The character ID . |
noteId | uint256 | The note ID . |
tipAmount | uint256 |
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | The fee amount. |
getWeb3Entry
Returns the address of web3Entry contract.
function getWeb3Entry() external view returns (address);
Returns
Name | Type | Description |
---|---|---|
<none> | address | The address of web3Entry contract. |
getToken
Returns the address of mira token contract.
function getToken() external view returns (address);
Returns
Name | Type | Description |
---|---|---|
<none> | address | The address of mira token contract. |
IWeb3Entry
Functions
initialize
Initializes the Web3Entry.
function initialize(
string calldata name_,
string calldata symbol_,
address linklist_,
address mintNFTImpl_,
address periphery_,
address newbieVilla_
) external;
Parameters
Name | Type | Description |
---|---|---|
name_ | string | The name to set for the web3Entry character NFT. |
symbol_ | string | The symbol to set for the web3Entry character NFT. |
linklist_ | address | The address of linklist contract to set. |
mintNFTImpl_ | address | The address of mintNFTImpl contract to set. |
periphery_ | address | The address of periphery contract to set. |
newbieVilla_ | address | The address of newbieVilla contract to set. |
createCharacter
This method creates a character with the given parameters to the given address.
function createCharacter(DataTypes.CreateCharacterData calldata vars) external returns (uint256 characterId);
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.CreateCharacterData | The CreateCharacterData struct containing the following parameters: to : The address receiving the character.handle : The handle to set for the character.uri : The URI to set for the character metadata.linkModule : The link module to use, can be the zero address.linkModuleInitData : The link module initialization data, if any. |
setHandle
Sets new handle for a given character.
Owner permission only.
function setHandle(uint256 characterId, string calldata newHandle) external;
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | The character id to set new handle for. |
newHandle | string | New handle to set. |
setSocialToken
Sets a social token for a given character.
Owner permission only.
function setSocialToken(uint256 characterId, address tokenAddress) external;
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | The characterId to set social token for. |
tokenAddress | address | Token address to be set. |
setCharacterUri
Sets a new URI for a given character.
function setCharacterUri(uint256 characterId, string calldata newUri) external;
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | The characterId to to be set. |
newUri | string | New URI to be set. |
setPrimaryCharacterId
Sets a given character as primary.
Only character owner can call this function.
function setPrimaryCharacterId(uint256 characterId) external;
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | The character id to to be set. |
grantOperatorPermissions
Grant an address as an operator and authorize it with custom permissions.
Every bit in permissionBitMap stands for a corresponding method in Web3Entry. more details in OP.sol.
function grantOperatorPermissions(uint256 characterId, address operator, uint256 permissionBitMap) external;
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | ID of your character that you want to authorize. |
operator | address | Address to grant operator permissions to. |
permissionBitMap | uint256 | Bitmap used for finer grained operator permissions controls. |
grantOperatorPermissionsWithSig
Grant an address as an operator and authorize it with custom permissions via signature.
Only character owner can call.
Every bit in permissionBitMap stands for a corresponding method in Web3Entry. more details in OP.sol.
function grantOperatorPermissionsWithSig(
uint256 characterId,
address operator,
uint256 permissionBitMap,
DataTypes.EIP712Signature calldata signature
) external;
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | ID of your character that you want to authorize. |
operator | address | Address to grant operator permissions to. |
permissionBitMap | uint256 | Bitmap used for finer grained operator permissions controls. |
signature | DataTypes.EIP712Signature | The EIP712Signature struct containing the character owner's signature. |
grantOperators4Note
Grant operators allowlist and blocklist roles of a note.
function grantOperators4Note(
uint256 characterId,
uint256 noteId,
address[] calldata blocklist,
address[] calldata allowlist
) external;
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | ID of character that you want to set. |
noteId | uint256 | ID of note that you want to set. |
blocklist | address[] | blocklist addresses that you want to grant. |
allowlist | address[] | allowlist addresses that you want to grant. |
setLinklistUri
Sets a new metadataURI for a given link list.
function setLinklistUri(uint256 linkListId, string calldata uri) external;
Parameters
Name | Type | Description |
---|---|---|
linkListId | uint256 | The linklist id to set for. |
uri | string | The metadata uri to set. |
setLinklistType
Sets a link type for a given linklist.
Emits a {DetachLinklist} event and a {AttachLinklist} event from web3Entry contract..
Emits a {LinkTypeSet} event from linklist contract.
Linklist is the group of all linking objects with the same link type, like "like".
Each character can only have one linklist for each link type.
It will fail if you try to set a link type which is already set for some linklist owned by the same character.
function setLinklistType(uint256 linkListId, bytes32 linkType) external;
Parameters
Name | Type | Description |
---|---|---|
linkListId | uint256 | The linklist ID to set for. |
linkType | bytes32 | The link type to set. |
linkAddress
Links an address with the given parameters.
function linkAddress(DataTypes.linkAddressData calldata vars) external;
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.linkAddressData | The linkAddressData struct containing the linking parameters:fromCharacterId : The character ID to sponsor a link action.ethAddress : The address to be linked.linkType : The link type, like "like", which is a bytes32 format.data : The data passed to the link module to use, if any. |
unlinkAddress
Unlinks an address with the given parameters.
function unlinkAddress(DataTypes.unlinkAddressData calldata vars) external;
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.unlinkAddressData | The unlinkAddressData struct containing the unlinking parameters:fromCharacterId : The character ID to sponsor a unlink action.ethAddress : The address to be unlinked.linkType : The link type, like "like", which is a bytes32 format. |
linkCharacter
Links a character with the given parameters.
function linkCharacter(DataTypes.linkCharacterData calldata vars) external;
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.linkCharacterData | The linkCharacterData struct containing the linking parameters:fromCharacterId : The character ID to sponsor a link action.toCharacterId : The character ID to be linked.linkType : The link type, like "follow", which is a bytes32 format.data : The data passed to the link module to use, if any. |
unlinkCharacter
Unlinks a character with the given parameters.
function unlinkCharacter(DataTypes.unlinkCharacterData calldata vars) external;
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.unlinkCharacterData | The unlinkCharacterData struct containing the unlinking parameters: fromCharacterId : The character ID to sponsor a unlink action.toCharacterId : The character ID to be unlinked.linkType : The link type, like "follow", which is a bytes32 format. |
createThenLinkCharacter
Create a character and then link it.
function createThenLinkCharacter(DataTypes.createThenLinkCharacterData calldata vars)
external
returns (uint256 characterId);
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.createThenLinkCharacterData | The createThenLinkCharacterData struct containing the parameters:fromCharacterId : The character ID to sponsor a link action.to : The address to receive the new character nft.linkType : The link type, like "follow", which is a bytes32 format. |
linkNote
Links a note with the given parameters.
function linkNote(DataTypes.linkNoteData calldata vars) external;
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.linkNoteData | The linkNoteData struct containing the linking parameters:fromCharacterId : The character ID to sponsor a link action.toCharacterId : The character ID of note to be linked.toNoteId : The note ID of note to be linked.linkType : The link type, like "like", which is a bytes32 format.data : The data passed to the link module to use, if any. |
unlinkNote
UnLinks a note with the given parameters.
function unlinkNote(DataTypes.unlinkNoteData calldata vars) external;
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.unlinkNoteData | The unlinkNoteData struct containing the unlinking parameters:fromCharacterId : The character ID to sponsor a unlink action.toCharacterId : The character ID of note to be unlinked.toNoteId : The note ID of note to be unlinked.linkType : The link type, like "like", which is a bytes32 format. |
linkERC721
Links an ERC721 with the given parameters.
function linkERC721(DataTypes.linkERC721Data calldata vars) external;
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.linkERC721Data | The linkERC721Data struct containing the linking parameters:fromCharacterId : The character ID to sponsor a link action.tokenAddress : The token address of ERC721 to be linked.tokenId : The token ID of ERC721 to be linked.linkType : The link type, like "like", which is a bytes32 format.data : The data passed to the link module to use, if any. |
unlinkERC721
Unlinks an ERC721 with the given parameters.
function unlinkERC721(DataTypes.unlinkERC721Data calldata vars) external;
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.unlinkERC721Data | The unlinkERC721Data struct containing the unlinking parameters:fromCharacterId : The character ID to sponsor a unlink action.tokenAddress : The token address of ERC721 to be unlinked.tokenId : The token ID of ERC721 to be unlinked.linkType : The link type, like "like", which is a bytes32 format. |
linkAnyUri
Links any uri with the given parameters.
function linkAnyUri(DataTypes.linkAnyUriData calldata vars) external;
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.linkAnyUriData | The linkAnyUriData struct containing the linking parameters:fromCharacterId : The character ID to sponsor a link action.toUri : The uri to be linked.linkType : The link type, like "like", which is a bytes32 format.data : The data passed to the link module to use, if any. |
unlinkAnyUri
Unlinks any uri with the given parameters.
function unlinkAnyUri(DataTypes.unlinkAnyUriData calldata vars) external;
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.unlinkAnyUriData | The unlinkAnyUriData struct containing the unlinking parameters:fromCharacterId : The character ID to sponsor a unlink action.toUri : The uri to be unlinked.linkType : The link type, like "like", which is a bytes32 format. |
linkLinklist
Links a linklist with the given parameters.
function linkLinklist(DataTypes.linkLinklistData calldata vars) external;
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.linkLinklistData | The linkLinklistData struct containing the linking parameters:fromCharacterId : The character ID to sponsor a link action.toLinkListId : The linklist ID to be linked.linkType : The link type, like "like", which is a bytes32 format.data : The data passed to the link module to use, if any. |
unlinkLinklist
Unlinks a linklist with the given parameters.
function unlinkLinklist(DataTypes.unlinkLinklistData calldata vars) external;
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.unlinkLinklistData | The unlinkLinklistData struct containing the unlinking parameters:fromCharacterId : The character ID to sponsor a unlink action.toLinkListId : The linklist ID to be unlinked.linkType : The link type, like "like", which is a bytes32 format. |
setLinkModule4Character
Sets a link module for a given character.
function setLinkModule4Character(DataTypes.setLinkModule4CharacterData calldata vars) external;
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.setLinkModule4CharacterData | The setLinkModule4CharacterData struct containing the parameters:characterId : The character ID to set for.linkModule : The address of link module contract to set.linkModuleInitData : The data passed to the link module to use, if any. |
setLinkModule4Note
Sets a link module for a given note.
function setLinkModule4Note(DataTypes.setLinkModule4NoteData calldata vars) external;
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.setLinkModule4NoteData | The setLinkModule4NoteData struct containing the parameters:characterId : The character ID to set for.noteId : The note ID to set for.linkModule : The address of link module contract to set.linkModuleInitData : The data passed to the link module to use, if any. |
mintNote
Mints an nft with the given note.
function mintNote(DataTypes.MintNoteData calldata vars) external returns (uint256 tokenId);
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.MintNoteData | The MintNoteData struct containing the minting parameters:characterId : The character ID of the note.noteId : The note ID of the note.to : The address to receive the minted nft.data : The data passed to the mint module to use, if any. |
setMintModule4Note
Sets a mint module for the given note.
function setMintModule4Note(DataTypes.setMintModule4NoteData calldata vars) external;
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.setMintModule4NoteData | The setMintModule4NoteData struct containing the setting parameters:characterId : The character ID of the note.noteId : The note ID of the note.mintModule : The address of mint module to set.mintModuleInitData : The data passed to the mint module to init, if any. |
postNote
Posts a note with the given parameters.
function postNote(DataTypes.PostNoteData calldata vars) external returns (uint256 noteId);
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.PostNoteData | The postNoteData struct containing the posting parameters:characterId : The character ID to post to.contentUri : The uri to set for the new post.linkModule : The address of link module to set for the new post.linkModuleInitData : The data passed to the link module to init, if any.mintModule : The address of mint module to set for the new post.mintModuleInitData : The data passed to the mint module to init, if any. |
setNoteUri
Set URI for a note.
function setNoteUri(uint256 characterId, uint256 noteId, string calldata newUri) external;
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | The character ID of the note owner. |
noteId | uint256 | The ID of the note to set. |
newUri | string | The new URI. |
lockNote
Lock a note and put it into a immutable state where no modifications are allowed. Locked notes are usually assumed as final versions.
function lockNote(uint256 characterId, uint256 noteId) external;
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | The character ID of the note owner. |
noteId | uint256 | The ID of the note to lock. |
deleteNote
Delete a note.
Deleting a note doesn't essentially mean that the txs or contents are being removed due to the
immutability of blockchain itself, but the deleted notes will be tagged as deleted
after calling deleteNote
.
function deleteNote(uint256 characterId, uint256 noteId) external;
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | The character ID of the note owner. |
noteId | uint256 | The ID of the note to delete. |
postNote4Character
Posts a note for a given character.
function postNote4Character(DataTypes.PostNoteData calldata vars, uint256 toCharacterId)
external
returns (uint256 noteId);
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.PostNoteData | The postNoteData struct containing the posting parameters:characterId : The character ID to post to.contentUri : The uri to set for the new post.linkModule : The address of link module to set for the new post.linkModuleInitData : The data passed to the link module to init, if any.mintModule : The address of mint module to set for the new post.mintModuleInitData : The data passed to the mint module to init, if any. |
toCharacterId | uint256 | The target character ID. |
Returns
Name | Type | Description |
---|---|---|
noteId | uint256 | The note ID of the new post. |
postNote4Address
Posts a note for a given address.
function postNote4Address(DataTypes.PostNoteData calldata vars, address ethAddress) external returns (uint256 noteId);
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.PostNoteData | The postNoteData struct containing the posting parameters:characterId : The character ID to post to.contentUri : The uri to set for the new post.linkModule : The address of link module to set for the new post.linkModuleInitData : The data passed to the link module to init, if any.mintModule : The address of mint module to set for the new post.mintModuleInitData : The data passed to the mint module to init, if any. |
ethAddress | address | The target address. |
Returns
Name | Type | Description |
---|---|---|
noteId | uint256 | The note ID of the new post. |
postNote4Linklist
Posts a note for a given linklist.
function postNote4Linklist(DataTypes.PostNoteData calldata vars, uint256 toLinklistId)
external
returns (uint256 noteId);
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.PostNoteData | The postNoteData struct containing the posting parameters:characterId : The character ID to post to.contentUri : The uri to set for the new post.linkModule : The address of link module to set for the new post.linkModuleInitData : The data passed to the link module to init, if any.mintModule : The address of mint module to set for the new post.mintModuleInitData : The data passed to the mint module to init, if any. |
toLinklistId | uint256 | The target linklist. |
Returns
Name | Type | Description |
---|---|---|
noteId | uint256 | The note ID of the new post. |
postNote4Note
Posts a note for a given note.
function postNote4Note(DataTypes.PostNoteData calldata vars, DataTypes.NoteStruct calldata note)
external
returns (uint256 noteId);
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.PostNoteData | The postNoteData struct containing the posting parameters:characterId : The character ID to post to.contentUri : The uri to set for the new post.linkModule : The address of link module to set for the new post.linkModuleInitData : The data passed to the link module to init, if any.mintModule : The address of mint module to set for the new post.mintModuleInitData : The data passed to the mint module to init, if any. |
note | DataTypes.NoteStruct | The target note struct containing the parameters:characterId : The character ID of target note.noteId : The note ID of target note. |
Returns
Name | Type | Description |
---|---|---|
noteId | uint256 | The note ID of the new post. |
postNote4ERC721
Posts a note for a given ERC721.
function postNote4ERC721(DataTypes.PostNoteData calldata vars, DataTypes.ERC721Struct calldata erc721)
external
returns (uint256 noteId);
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.PostNoteData | The postNoteData struct containing the posting parameters:characterId : The character ID to post to.contentUri : The uri to set for the new post.linkModule : The address of link module to set for the new post.linkModuleInitData : The data passed to the link module to init, if any.mintModule : The address of mint module to set for the new post.mintModuleInitData : The data passed to the mint module to init, if any. |
erc721 | DataTypes.ERC721Struct | The target ERC721 struct containing the parameters:tokenAddress : The token address of target ERC721.erc721TokenId : The token ID of target ERC721. |
Returns
Name | Type | Description |
---|---|---|
noteId | uint256 | The note ID of the new post. |
postNote4AnyUri
Posts a note for a given uri.
function postNote4AnyUri(DataTypes.PostNoteData calldata vars, string calldata uri) external returns (uint256 noteId);
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.PostNoteData | The postNoteData struct containing the posting parameters:characterId : The character ID to post to.contentUri : The uri to set for the new post.linkModule : The address of link module to set for the new post.linkModuleInitData : The data passed to the link module to init, if any.mintModule : The address of mint module to set for the new post.mintModuleInitData : The data passed to the mint module to init, if any. |
uri | string | The target uri(could be an url link). |
Returns
Name | Type | Description |
---|---|---|
noteId | uint256 | The note ID of the new post. |
burnLinklist
Burns a linklist NFT.
It will burn the linklist NFT and remove the links from a character.
function burnLinklist(uint256 linklistId) external;
Parameters
Name | Type | Description |
---|---|---|
linklistId | uint256 | The linklist ID to burn. |
getOperators
Get operator list of a character. This operator list has only a sole purpose, which is
keeping records of keys of operatorsPermissionBitMap
. Thus, addresses queried by this function
not always have operator permissions. Keep in mind don't use this function to check
authorizations!!!
function getOperators(uint256 characterId) external view returns (address[] memory);
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | ID of your character that you want to check. |
Returns
Name | Type | Description |
---|---|---|
<none> | address[] | All keys of operatorsPermission4NoteBitMap. |
getOperatorPermissions
Get permission bitmap of an operator.
function getOperatorPermissions(uint256 characterId, address operator) external view returns (uint256);
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | ID of character that you want to check. |
operator | address | Address to grant operator permissions to. |
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | Permission bitmap of this operator. |
getOperators4Note
Get operators blocklist and allowlist for a note.
function getOperators4Note(uint256 characterId, uint256 noteId)
external
view
returns (address[] memory blocklist, address[] memory allowlist);
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | ID of character to query. |
noteId | uint256 | ID of note to query. |
isOperatorAllowedForNote
Query if a operator has permission for a note.
function isOperatorAllowedForNote(uint256 characterId, uint256 noteId, address operator) external view returns (bool);
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | ID of character that you want to query. |
noteId | uint256 | ID of note that you want to query. |
operator | address | Address to query. |
Returns
Name | Type | Description |
---|---|---|
<none> | bool | true if Operator has permission for a note, otherwise false. |
getPrimaryCharacterId
Returns primary character for a given account.
function getPrimaryCharacterId(address account) external view returns (uint256);
Parameters
Name | Type | Description |
---|---|---|
account | address | The address to query. |
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | uint256 The primary character ID, which will be 0 if not mapped. |
isPrimaryCharacter
Returns whether or not a character is primary character.
function isPrimaryCharacter(uint256 characterId) external view returns (bool);
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | The character ID to query. |
Returns
Name | Type | Description |
---|---|---|
<none> | bool | bool True if the character is primary, false otherwise. |
getCharacter
Returns the full character struct associated with a given character token ID.
function getCharacter(uint256 characterId) external view returns (DataTypes.Character memory);
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | The token ID of the character to query. |
Returns
Name | Type | Description |
---|---|---|
<none> | DataTypes.Character | The full character struct of given character. |
getCharacterByHandle
Returns the full character struct associated with a given character handle.
function getCharacterByHandle(string calldata handle) external view returns (DataTypes.Character memory);
Parameters
Name | Type | Description |
---|---|---|
handle | string | The handle of the character to query. |
Returns
Name | Type | Description |
---|---|---|
<none> | DataTypes.Character | The full character struct of given character. |
getHandle
Returns the handle of character with a given character.
function getHandle(uint256 characterId) external view returns (string memory);
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | The token ID of the character to query. |
Returns
Name | Type | Description |
---|---|---|
<none> | string | The handle of given character. |
getCharacterUri
Returns the uri of character with a given character.
function getCharacterUri(uint256 characterId) external view returns (string memory);
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | The token ID of the character to query. |
Returns
Name | Type | Description |
---|---|---|
<none> | string | The uri of given character. |
getNote
Returns the full note struct associated with a given note.
function getNote(uint256 characterId, uint256 noteId) external view returns (DataTypes.Note memory);
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | The token ID of the character to query. |
noteId | uint256 | The token ID of the note to query. |
Returns
Name | Type | Description |
---|---|---|
<none> | DataTypes.Note | The full note struct of given note. |
getLinklistUri
Returns the uri of linklist with a given linklist.
function getLinklistUri(uint256 tokenId) external view returns (string memory);
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of the linklist to query. |
Returns
Name | Type | Description |
---|---|---|
<none> | string | string The uri of given linklist. |
getLinklistId
Returns the token ID of linklist with a given character and linkType.
function getLinklistId(uint256 characterId, bytes32 linkType) external view returns (uint256);
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | The token ID of the character to query. |
linkType | bytes32 | The linkType. |
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | The token ID of linklist. |
getLinklistType
Returns the linkType of linklist with a given linklist.
function getLinklistType(uint256 linkListId) external view returns (bytes32);
Parameters
Name | Type | Description |
---|---|---|
linkListId | uint256 | The token ID of the linklist to query. |
Returns
Name | Type | Description |
---|---|---|
<none> | bytes32 | bytes32 The linkType of given linklist. |
getLinklistContract
Returns the address of linklist contract.
function getLinklistContract() external view returns (address);
Returns
Name | Type | Description |
---|---|---|
<none> | address | The address of linklist contract. |
getDomainSeparator
Returns the domain separator for this NFT contract.
function getDomainSeparator() external view returns (bytes32);
Returns
Name | Type | Description |
---|---|---|
<none> | bytes32 | bytes32 The domain separator. |
nonces
Returns the current nonce for owner
. This value must be included
whenever a signature is generated by grantOperatorPermissionsWithSig
.
Every successful call to grantOperatorPermissionsWithSig
increases owner
's nonce by one. This
prevents a signature from being used multiple times.
function nonces(address owner) external view returns (uint256);
Parameters
Name | Type | Description |
---|---|---|
owner | address | The owner address to query. |
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | uint256 The current nonce for owner . |
getRevision
Returns the revision number of web3Entry contract.
function getRevision() external pure returns (uint256);
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | The the revision number of web3Entry contract. |
Contents
- CharacterLib
- Constants
- DataTypes
- ErrCharacterNotExists
- ErrNotAddressOwner
- ErrNotCharacterOwner
- ErrNoteLocked
- ErrHandleExists
- ErrSocialTokenExists
- ErrHandleLengthInvalid
- ErrHandleContainsInvalidCharacters
- ErrNotEnoughPermission
- ErrNotEnoughPermissionForThisNote
- ErrTargetAlreadyHasPrimaryCharacter
- ErrNoteIsDeleted
- ErrNoteNotExists
- ErrArrayLengthMismatch
- ErrCallerNotWeb3Entry
- ErrCallerNotWeb3EntryOrNotOwner
- ErrTokenIdAlreadyExists
- ErrNotExistingCharacter
- ErrNotExistingLinklistToken
- ErrInvalidWeb3Entry
- ErrNotApprovedOrExceedApproval
- ErrExceedMaxSupply
- ErrExceedApproval
- ErrSignatureExpired
- ErrSignatureInvalid
- ErrNotOwner
- ErrTokenNotExists
- ErrLinkTypeExists
- Events
- LinkLib
- LinklistLib
- MetaTxLib
- OP
- OperatorLib
- PostLib
- StorageLib
- ValidationLib
CharacterLib
Functions
createCharacter
Creates a character.
function createCharacter(
address to,
string memory handle,
string memory uri,
address linkModule,
bytes memory linkModuleInitData,
uint256 characterId,
bool validateHandle
) external;
Parameters
Name | Type | Description |
---|---|---|
to | address | The address to mint the character to. |
handle | string | The handle to set for the new character. |
uri | string | The URI to set for the new character’s metadata. |
linkModule | address | The link module to set for the new character or the zero address. |
linkModuleInitData | bytes | Arbitrary data to be decoded in the link module for initialization. |
characterId | uint256 | The ID of the new character. |
validateHandle | bool | Whether to validate the handle or not. |
setSocialToken
Sets a social token for a given character.
function setSocialToken(uint256 characterId, address tokenAddress) external;
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | The character ID to set social token for. |
tokenAddress | address | Token address to be set. |
setCharacterLinkModule
Sets link module for a given character.
function setCharacterLinkModule(uint256 characterId, address linkModule, bytes calldata linkModuleInitData) external;
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | The character ID to set link module for. |
linkModule | address | The link module to set. |
linkModuleInitData | bytes | The data to pass to the link module for initialization, if any. |
setHandle
Sets new handle for a given character.
function setHandle(uint256 characterId, string calldata newHandle) external;
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | The character ID to set new handle for. |
newHandle | string | New handle to set. |
_handleHash
function _handleHash(string memory handle) internal pure returns (bytes32);
Constants
State Variables
MAX_HANDLE_LENGTH
uint8 public constant MAX_HANDLE_LENGTH = 31;
MIN_HANDLE_LENGTH
uint8 public constant MIN_HANDLE_LENGTH = 3;
LINK_ITEM_TYPE_CHARACTER
bytes32 public constant LINK_ITEM_TYPE_CHARACTER = "Character";
LINK_ITEM_TYPE_ADDRESS
bytes32 public constant LINK_ITEM_TYPE_ADDRESS = "Address";
LINK_ITEM_TYPE_LINKLIST
bytes32 public constant LINK_ITEM_TYPE_LINKLIST = "Linklist";
LINK_ITEM_TYPE_NOTE
bytes32 public constant LINK_ITEM_TYPE_NOTE = "Note";
LINK_ITEM_TYPE_ERC721
bytes32 public constant LINK_ITEM_TYPE_ERC721 = "ERC721";
LINK_ITEM_TYPE_ANYURI
bytes32 public constant LINK_ITEM_TYPE_ANYURI = "AnyUri";
DataTypes
A standard library of data types.
Structs
MigrateData
struct MigrateData {
address account;
string handle;
string uri;
address[] toAddresses;
bytes32 linkType;
}
CreateCharacterData
struct CreateCharacterData {
address to;
string handle;
string uri;
address linkModule;
bytes linkModuleInitData;
}
createThenLinkCharacterData
struct createThenLinkCharacterData {
uint256 fromCharacterId;
address to;
bytes32 linkType;
}
linkNoteData
struct linkNoteData {
uint256 fromCharacterId;
uint256 toCharacterId;
uint256 toNoteId;
bytes32 linkType;
bytes data;
}
unlinkNoteData
struct unlinkNoteData {
uint256 fromCharacterId;
uint256 toCharacterId;
uint256 toNoteId;
bytes32 linkType;
}
linkCharacterData
struct linkCharacterData {
uint256 fromCharacterId;
uint256 toCharacterId;
bytes32 linkType;
bytes data;
}
unlinkCharacterData
struct unlinkCharacterData {
uint256 fromCharacterId;
uint256 toCharacterId;
bytes32 linkType;
}
linkERC721Data
struct linkERC721Data {
uint256 fromCharacterId;
address tokenAddress;
uint256 tokenId;
bytes32 linkType;
bytes data;
}
unlinkERC721Data
struct unlinkERC721Data {
uint256 fromCharacterId;
address tokenAddress;
uint256 tokenId;
bytes32 linkType;
}
linkAddressData
struct linkAddressData {
uint256 fromCharacterId;
address ethAddress;
bytes32 linkType;
bytes data;
}
unlinkAddressData
struct unlinkAddressData {
uint256 fromCharacterId;
address ethAddress;
bytes32 linkType;
}
linkAnyUriData
struct linkAnyUriData {
uint256 fromCharacterId;
string toUri;
bytes32 linkType;
bytes data;
}
unlinkAnyUriData
struct unlinkAnyUriData {
uint256 fromCharacterId;
string toUri;
bytes32 linkType;
}
linkLinklistData
struct linkLinklistData {
uint256 fromCharacterId;
uint256 toLinkListId;
bytes32 linkType;
bytes data;
}
unlinkLinklistData
struct unlinkLinklistData {
uint256 fromCharacterId;
uint256 toLinkListId;
bytes32 linkType;
}
setLinkModule4CharacterData
struct setLinkModule4CharacterData {
uint256 characterId;
address linkModule;
bytes linkModuleInitData;
}
setLinkModule4NoteData
struct setLinkModule4NoteData {
uint256 characterId;
uint256 noteId;
address linkModule;
bytes linkModuleInitData;
}
setLinkModule4LinklistData
struct setLinkModule4LinklistData {
uint256 linklistId;
address linkModule;
bytes linkModuleInitData;
}
setLinkModule4ERC721Data
struct setLinkModule4ERC721Data {
address tokenAddress;
uint256 tokenId;
address linkModule;
bytes linkModuleInitData;
}
setLinkModule4AddressData
struct setLinkModule4AddressData {
address account;
address linkModule;
bytes linkModuleInitData;
}
setMintModule4NoteData
struct setMintModule4NoteData {
uint256 characterId;
uint256 noteId;
address mintModule;
bytes mintModuleInitData;
}
linkCharactersInBatchData
struct linkCharactersInBatchData {
uint256 fromCharacterId;
uint256[] toCharacterIds;
bytes[] data;
address[] toAddresses;
bytes32 linkType;
}
LinkData
struct LinkData {
uint256 linklistId;
uint256 linkItemType;
uint256 linkingCharacterId;
address linkingAddress;
uint256 linkingLinklistId;
bytes32 linkKey;
}
PostNoteData
struct PostNoteData {
uint256 characterId;
string contentUri;
address linkModule;
bytes linkModuleInitData;
address mintModule;
bytes mintModuleInitData;
bool locked;
}
MintNoteData
struct MintNoteData {
uint256 characterId;
uint256 noteId;
address to;
bytes mintModuleData;
}
Character
struct Character {
uint256 characterId;
string handle;
string uri;
uint256 noteCount;
address socialToken;
address linkModule;
}
Note
A struct containing data associated with each new note.
struct Note {
bytes32 linkItemType;
bytes32 linkKey;
string contentUri;
address linkModule;
address mintModule;
address mintNFT;
bool deleted;
bool locked;
}
CharacterLinkStruct
struct CharacterLinkStruct {
uint256 fromCharacterId;
uint256 toCharacterId;
bytes32 linkType;
}
NoteStruct
struct NoteStruct {
uint256 characterId;
uint256 noteId;
}
ERC721Struct
struct ERC721Struct {
address tokenAddress;
uint256 erc721TokenId;
}
Operators4Note
struct Operators4Note {
EnumerableSet.AddressSet blocklist;
EnumerableSet.AddressSet allowlist;
}
EIP712Signature
A struct containing the necessary information to reconstruct an EIP-712 typed data signature.
struct EIP712Signature {
address signer;
uint8 v;
bytes32 r;
bytes32 s;
uint256 deadline;
}
ErrCharacterNotExists
Character ID not exists
error ErrCharacterNotExists(uint256 characterId);
ErrNotAddressOwner
Not owner of address
error ErrNotAddressOwner();
ErrNotCharacterOwner
Caller is not the owner of character
error ErrNotCharacterOwner();
ErrNoteLocked
Note has been locked
error ErrNoteLocked();
ErrHandleExists
Handle does not exist
error ErrHandleExists();
ErrSocialTokenExists
Social token address does not exist
error ErrSocialTokenExists();
ErrHandleLengthInvalid
Handle length too long or too short
error ErrHandleLengthInvalid();
ErrHandleContainsInvalidCharacters
Handle contains invalid characters
error ErrHandleContainsInvalidCharacters();
ErrNotEnoughPermission
Operator has not enough permission for this character
error ErrNotEnoughPermission();
ErrNotEnoughPermissionForThisNote
Operator has not enough permissions for this note
error ErrNotEnoughPermissionForThisNote();
ErrTargetAlreadyHasPrimaryCharacter
Target address already has primary character
error ErrTargetAlreadyHasPrimaryCharacter();
ErrNoteIsDeleted
Note has been deleted
error ErrNoteIsDeleted();
ErrNoteNotExists
Note does not exist
error ErrNoteNotExists();
ErrArrayLengthMismatch
Array length mismatch
error ErrArrayLengthMismatch();
ErrCallerNotWeb3Entry
Caller is not web3Entry contract
error ErrCallerNotWeb3Entry();
ErrCallerNotWeb3EntryOrNotOwner
Caller is not web3Entry contract, and not the owner of character
error ErrCallerNotWeb3EntryOrNotOwner();
ErrTokenIdAlreadyExists
Token id already exists
error ErrTokenIdAlreadyExists();
ErrNotExistingCharacter
Character does not exist
error ErrNotExistingCharacter();
ErrNotExistingLinklistToken
Token id of linklist does not exist
error ErrNotExistingLinklistToken();
ErrInvalidWeb3Entry
Invalid web3Entry address
error ErrInvalidWeb3Entry();
ErrNotApprovedOrExceedApproval
Not approved by module or exceed the approval amount
error ErrNotApprovedOrExceedApproval();
ErrExceedMaxSupply
Exceed max supply
error ErrExceedMaxSupply();
ErrExceedApproval
Exceed the approval amount
error ErrExceedApproval();
ErrSignatureExpired
Signature is expired
error ErrSignatureExpired();
ErrSignatureInvalid
Signature is invalid
error ErrSignatureInvalid();
ErrNotOwner
Caller not owner
error ErrNotOwner();
ErrTokenNotExists
Token not exists
error ErrTokenNotExists();
ErrLinkTypeExists
LinkType already exists
error ErrLinkTypeExists(uint256 characterId, bytes32 linkType);
Events
Events
BaseInitialized
event BaseInitialized(string name, string symbol, uint256 timestamp);
Web3EntryInitialized
event Web3EntryInitialized(uint256 timestamp);
LinklistNFTInitialized
event LinklistNFTInitialized(uint256 timestamp);
MintNFTInitialized
event MintNFTInitialized(uint256 characterId, uint256 noteId, uint256 timestamp);
CharacterCreated
event CharacterCreated(
uint256 indexed characterId, address indexed creator, address indexed to, string handle, uint256 timestamp
);
SetPrimaryCharacterId
event SetPrimaryCharacterId(address indexed account, uint256 indexed characterId, uint256 indexed oldCharacterId);
SetHandle
event SetHandle(address indexed account, uint256 indexed characterId, string newHandle);
SetSocialToken
event SetSocialToken(address indexed account, uint256 indexed characterId, address indexed tokenAddress);
GrantOperatorPermissions
event GrantOperatorPermissions(uint256 indexed characterId, address indexed operator, uint256 permissionBitMap);
GrantOperators4Note
event GrantOperators4Note(
uint256 indexed characterId, uint256 indexed noteId, address[] blocklist, address[] allowlist
);
SetCharacterUri
event SetCharacterUri(uint256 indexed characterId, string newUri);
PostNote
event PostNote(
uint256 indexed characterId, uint256 indexed noteId, bytes32 indexed linkKey, bytes32 linkItemType, bytes data
);
SetNoteUri
event SetNoteUri(uint256 indexed characterId, uint256 noteId, string newUri);
DeleteNote
event DeleteNote(uint256 indexed characterId, uint256 noteId);
LockNote
event LockNote(uint256 indexed characterId, uint256 noteId);
LinkCharacter
event LinkCharacter(
address indexed account,
uint256 indexed fromCharacterId,
uint256 indexed toCharacterId,
bytes32 linkType,
uint256 linklistId
);
UnlinkCharacter
event UnlinkCharacter(
address indexed account, uint256 indexed fromCharacterId, uint256 indexed toCharacterId, bytes32 linkType
);
LinkNote
event LinkNote(
uint256 indexed fromCharacterId,
uint256 indexed toCharacterId,
uint256 indexed toNoteId,
bytes32 linkType,
uint256 linklistId
);
UnlinkNote
event UnlinkNote(
uint256 indexed fromCharacterId,
uint256 indexed toCharacterId,
uint256 indexed toNoteId,
bytes32 linkType,
uint256 linklistId
);
LinkERC721
event LinkERC721(
uint256 indexed fromCharacterId,
address indexed tokenAddress,
uint256 indexed toNoteId,
bytes32 linkType,
uint256 linklistId
);
LinkAddress
event LinkAddress(uint256 indexed fromCharacterId, address indexed ethAddress, bytes32 linkType, uint256 linklistId);
UnlinkAddress
event UnlinkAddress(uint256 indexed fromCharacterId, address indexed ethAddress, bytes32 linkType);
LinkAnyUri
event LinkAnyUri(uint256 indexed fromCharacterId, string toUri, bytes32 linkType, uint256 linklistId);
UnlinkAnyUri
event UnlinkAnyUri(uint256 indexed fromCharacterId, string toUri, bytes32 linkType);
LinkCharacterLink
event LinkCharacterLink(
uint256 indexed fromCharacterId,
bytes32 indexed linkType,
uint256 clFromCharacterId,
uint256 clToCharacterId,
bytes32 clLinkType
);
UnlinkCharacterLink
event UnlinkCharacterLink(
uint256 indexed fromCharacterId,
bytes32 indexed linkType,
uint256 clFromCharactereId,
uint256 clToCharacterId,
bytes32 clLinkType
);
UnlinkERC721
event UnlinkERC721(
uint256 indexed fromCharacterId,
address indexed tokenAddress,
uint256 indexed toNoteId,
bytes32 linkType,
uint256 linklistId
);
LinkLinklist
event LinkLinklist(
uint256 indexed fromCharacterId, uint256 indexed toLinklistId, bytes32 linkType, uint256 indexed linklistId
);
UnlinkLinklist
event UnlinkLinklist(
uint256 indexed fromCharacterId, uint256 indexed toLinklistId, bytes32 linkType, uint256 indexed linklistId
);
MintNote
event MintNote(
address indexed to, uint256 indexed characterId, uint256 indexed noteId, address tokenAddress, uint256 tokenId
);
SetLinkModule4Character
event SetLinkModule4Character(
uint256 indexed characterId, address indexed linkModule, bytes linkModuleInitData, bytes returnData
);
SetLinkModule4Note
event SetLinkModule4Note(
uint256 indexed characterId,
uint256 indexed noteId,
address indexed linkModule,
bytes linkModuleInitData,
bytes returnData
);
SetLinkModule4Address
event SetLinkModule4Address(
address indexed account, address indexed linkModule, bytes linkModuleInitData, bytes returnData
);
SetLinkModule4ERC721
event SetLinkModule4ERC721(
address indexed tokenAddress,
uint256 indexed tokenId,
address indexed linkModule,
bytes linkModuleInitData,
bytes returnData
);
SetLinkModule4Linklist
event SetLinkModule4Linklist(
uint256 indexed linklistId, address indexed linkModule, bytes linkModuleInitData, bytes returnData
);
SetMintModule4Note
event SetMintModule4Note(
uint256 indexed characterId,
uint256 indexed noteId,
address indexed mintModule,
bytes mintModuleInitData,
bytes returnData
);
AttachLinklist
event AttachLinklist(uint256 indexed linklistId, uint256 indexed characterId, bytes32 indexed linkType);
DetachLinklist
event DetachLinklist(uint256 indexed linklistId, uint256 indexed characterId, bytes32 indexed linkType);
SetApprovedMintAmount4Addresses
event SetApprovedMintAmount4Addresses(
uint256 indexed characterId, uint256 indexed noteId, uint256 indexed amount, address[] approvedAddresses
);
LinkLib
Functions
linkCharacter
Links any characterId.
function linkCharacter(
uint256 fromCharacterId,
uint256 toCharacterId,
bytes32 linkType,
bytes memory data,
address linklist
) external;
Parameters
Name | Type | Description |
---|---|---|
fromCharacterId | uint256 | The character ID to sponsor a link action. |
toCharacterId | uint256 | The character ID to be linked. |
linkType | bytes32 | linkType, like “follow”. |
data | bytes | The data to pass to the link module, if any. |
linklist | address | The linklist contract address. |
unlinkCharacter
Unlinks a given character.
function unlinkCharacter(uint256 fromCharacterId, uint256 toCharacterId, bytes32 linkType, address linklist) external;
Parameters
Name | Type | Description |
---|---|---|
fromCharacterId | uint256 | The character ID to sponsor a unlink action. |
toCharacterId | uint256 | The character ID to be unlinked. |
linkType | bytes32 | linkType, like “follow”. |
linklist | address | The linklist contract address. |
linkNote
Links a given note.
function linkNote(
uint256 fromCharacterId,
uint256 toCharacterId,
uint256 toNoteId,
bytes32 linkType,
bytes calldata data,
address linklist
) external;
Parameters
Name | Type | Description |
---|---|---|
fromCharacterId | uint256 | The character ID to sponsor a link action. |
toCharacterId | uint256 | The owner characterId of the note to link. |
toNoteId | uint256 | The id of the note to link. |
linkType | bytes32 | The linkType, like “follow”. |
data | bytes | The data to pass to the link module, if any. |
linklist | address | The linklist contract address. |
unlinkNote
Unlinks a given note.
function unlinkNote(
uint256 fromCharacterId,
uint256 toCharacterId,
uint256 toNoteId,
bytes32 linkType,
address linklist
) external;
Parameters
Name | Type | Description |
---|---|---|
fromCharacterId | uint256 | The character ID to sponsor an unlink action. |
toCharacterId | uint256 | The character ID of note to unlink. |
toNoteId | uint256 | The id of note to unlink. |
linkType | bytes32 | LinkType, like “follow”. |
linklist | address | The linklist contract address. |
linkLinklist
Links a linklist.
function linkLinklist(uint256 fromCharacterId, uint256 toLinkListId, bytes32 linkType, address linklist) external;
Parameters
Name | Type | Description |
---|---|---|
fromCharacterId | uint256 | The character ID to sponsor an link action. |
toLinkListId | uint256 | The linklist if to link. |
linkType | bytes32 | LinkType, like “follow”. |
linklist | address | The linklist contract address. |
unlinkLinklist
Unlinks a linklist.
function unlinkLinklist(uint256 fromCharacterId, uint256 toLinkListId, bytes32 linkType, address linklist) external;
Parameters
Name | Type | Description |
---|---|---|
fromCharacterId | uint256 | The character ID to sponsor an unlink action. |
toLinkListId | uint256 | The linklist if to unlink. |
linkType | bytes32 | LinkType, like “follow”. |
linklist | address | The linklist contract address. |
linkERC721
Links an ERC721 token.
function linkERC721(uint256 fromCharacterId, address tokenAddress, uint256 tokenId, bytes32 linkType, address linklist)
external;
Parameters
Name | Type | Description |
---|---|---|
fromCharacterId | uint256 | The character ID to sponsor an link action. |
tokenAddress | address | The token address of ERC721 to link. |
tokenId | uint256 | The token ID of ERC721 to link. |
linkType | bytes32 | linkType, like “follow”. |
linklist | address | The linklist contract address. |
unlinkERC721
Unlinks an ERC721 token.
function unlinkERC721(
uint256 fromCharacterId,
address tokenAddress,
uint256 tokenId,
bytes32 linkType,
address linklist
) external;
Parameters
Name | Type | Description |
---|---|---|
fromCharacterId | uint256 | The character ID to sponsor an unlink action. |
tokenAddress | address | The token address of ERC721 to unlink. |
tokenId | uint256 | The token ID of ERC721 to unlink. |
linkType | bytes32 | LinkType, like “follow”. |
linklist | address | The linklist contract address. |
linkAddress
Creates a link to a given address.
function linkAddress(uint256 fromCharacterId, address ethAddress, bytes32 linkType, address linklist) external;
Parameters
Name | Type | Description |
---|---|---|
fromCharacterId | uint256 | The character ID to init the link. |
ethAddress | address | The address to link. |
linkType | bytes32 | LinkType, like “follow”. |
linklist | address | The linklist contract address. |
unlinkAddress
Unlinks a given address.
function unlinkAddress(uint256 fromCharacterId, address ethAddress, bytes32 linkType, address linklist) external;
Parameters
Name | Type | Description |
---|---|---|
fromCharacterId | uint256 | The character ID to init the unlink. |
ethAddress | address | The address to unlink. |
linkType | bytes32 | LinkType, like “follow”. |
linklist | address | The linklist contract address. |
linkAnyUri
Links any uri.
function linkAnyUri(uint256 fromCharacterId, string calldata toUri, bytes32 linkType, address linklist) external;
Parameters
Name | Type | Description |
---|---|---|
fromCharacterId | uint256 | The character ID to sponsor an link action. |
toUri | string | The uri to link. |
linkType | bytes32 | LinkType, like “follow”. |
linklist | address | The linklist contract address. |
unlinkAnyUri
Unlinks any uri.
function unlinkAnyUri(uint256 fromCharacterId, string calldata toUri, bytes32 linkType, address linklist) external;
Parameters
Name | Type | Description |
---|---|---|
fromCharacterId | uint256 | The character ID to sponsor an unlink action. |
toUri | string | The uri to unlink. |
linkType | bytes32 | LinkType, like “follow”. |
linklist | address | The linklist contract address. |
_mintLinklist
Returns the linklistId if the linklist already exists, Otherwise, creates a new linklist and return its ID.
function _mintLinklist(uint256 fromCharacterId, bytes32 linkType, address linklist)
internal
returns (uint256 linklistId);
_ownerOf
function _ownerOf(uint256 characterId) internal view returns (address);
LinklistLib
Functions
setLinklistUri
function setLinklistUri(uint256 linklistId, string calldata uri, address linklist) external;
setLinklistType
function setLinklistType(uint256 characterId, uint256 linklistId, bytes32 linkType, address linklist) external;
burnLinklist
function burnLinklist(uint256 characterId, uint256 linklistId, address linklist) external;
MetaTxLib
State Variables
EIP712_DOMAIN_TYPEHASH
bytes32 internal constant EIP712_DOMAIN_TYPEHASH =
keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)");
GRANT_OPERATOR_PERMISSIONS_WITH_SIG_TYPEHASH
bytes32 internal constant GRANT_OPERATOR_PERMISSIONS_WITH_SIG_TYPEHASH = keccak256(
"grantOperatorPermissions(uint256 characterId,address operator,uint256 permissionBitMap,uint256 nonce,uint256 deadline)"
);
EIP1271_MAGIC_VALUE
bytes4 public constant EIP1271_MAGIC_VALUE = 0x1626ba7e;
Functions
validateGrantOperatorPermissionsSignature
function validateGrantOperatorPermissionsSignature(
DataTypes.EIP712Signature calldata signature,
uint256 characterId,
address operator,
uint256 permissionBitMap
) external;
_getAndIncrementNonce
This fetches a user's signing nonce and increments it, akin to sigNonces++
.
function _getAndIncrementNonce(address user) internal returns (uint256);
_calculateDomainSeparator
Calculates EIP712 DOMAIN_SEPARATOR based on the current contract and chain ID.
function _calculateDomainSeparator() internal view returns (bytes32);
_validateRecoveredAddress
Wrapper for ecrecover to reduce code size, used in meta-tx specific functions.
function _validateRecoveredAddress(bytes32 digest, DataTypes.EIP712Signature calldata signature) internal view;
OP
In Crossbell's operator system, every uint8 stands for a single method in Web3Entry.sol.
For most cases, we recommend simply granting operators the OPERATOR_SIGN_PERMISSION_BITMAP
,
which gives operator full permissions aside from owner permissions and future permissions, but for
those who're more aware of access control, the custom permission bitmap is all yours,
and you can find every customizable methods below.
OPERATOR_SIGN_PERMISSION_BITMAP
have access to all methods in OPERATOR_SYNC_PERMISSION_BITMAP
plus more permissions for signing.
Permissions are laid out in a increasing order of power.
so the bitmap looks like this:
operator sync | operator sign | future reserved | owner |
[255 - 236] | [235 - 176] | [175 - 21] | [20 - 0] |
State Variables
UINT256_MAX
uint256 internal constant UINT256_MAX = ~uint256(0);
SET_HANDLE
uint8 internal constant SET_HANDLE = 0;
SET_SOCIAL_TOKEN
uint8 internal constant SET_SOCIAL_TOKEN = 1;
GRANT_OPERATOR_PERMISSIONS
uint8 internal constant GRANT_OPERATOR_PERMISSIONS = 2;
GRANT_OPERATORS_FOR_NOTE
uint8 internal constant GRANT_OPERATORS_FOR_NOTE = 3;
OWNER_PERMISSION_BITMAP
uint256 internal constant OWNER_PERMISSION_BITMAP = ~(UINT256_MAX << 4);
SET_CHARACTER_URI
uint8 internal constant SET_CHARACTER_URI = 176;
SET_LINKLIST_URI
uint8 internal constant SET_LINKLIST_URI = 177;
LINK_CHARACTER
uint8 internal constant LINK_CHARACTER = 178;
UNLINK_CHARACTER
uint8 internal constant UNLINK_CHARACTER = 179;
CREATE_THEN_LINK_CHARACTER
uint8 internal constant CREATE_THEN_LINK_CHARACTER = 180;
LINK_NOTE
uint8 internal constant LINK_NOTE = 181;
UNLINK_NOTE
uint8 internal constant UNLINK_NOTE = 182;
LINK_ERC721
uint8 internal constant LINK_ERC721 = 183;
UNLINK_ERC721
uint8 internal constant UNLINK_ERC721 = 184;
LINK_ADDRESS
uint8 internal constant LINK_ADDRESS = 185;
UNLINK_ADDRESS
uint8 internal constant UNLINK_ADDRESS = 186;
LINK_ANYURI
uint8 internal constant LINK_ANYURI = 187;
UNLINK_ANYURI
uint8 internal constant UNLINK_ANYURI = 188;
LINK_LINKLIST
uint8 internal constant LINK_LINKLIST = 189;
UNLINK_LINKLIST
uint8 internal constant UNLINK_LINKLIST = 190;
SET_LINK_MODULE_FOR_CHARACTER
uint8 internal constant SET_LINK_MODULE_FOR_CHARACTER = 191;
SET_LINK_MODULE_FOR_NOTE
uint8 internal constant SET_LINK_MODULE_FOR_NOTE = 192;
SET_LINK_MODULE_FOR_LINKLIST
uint8 internal constant SET_LINK_MODULE_FOR_LINKLIST = 193;
SET_MINT_MODULE_FOR_NOTE
uint8 internal constant SET_MINT_MODULE_FOR_NOTE = 194;
SET_NOTE_URI
uint8 internal constant SET_NOTE_URI = 195;
LOCK_NOTE
uint8 internal constant LOCK_NOTE = 196;
DELETE_NOTE
uint8 internal constant DELETE_NOTE = 197;
POST_NOTE_FOR_CHARACTER
uint8 internal constant POST_NOTE_FOR_CHARACTER = 198;
POST_NOTE_FOR_ADDRESS
uint8 internal constant POST_NOTE_FOR_ADDRESS = 199;
POST_NOTE_FOR_LINKLIST
uint8 internal constant POST_NOTE_FOR_LINKLIST = 200;
POST_NOTE_FOR_NOTE
uint8 internal constant POST_NOTE_FOR_NOTE = 201;
POST_NOTE_FOR_ERC721
uint8 internal constant POST_NOTE_FOR_ERC721 = 202;
POST_NOTE_FOR_ANYURI
uint8 internal constant POST_NOTE_FOR_ANYURI = 203;
SET_LINKLIST_TYPE
uint8 internal constant SET_LINKLIST_TYPE = 204;
POST_NOTE
uint8 internal constant POST_NOTE = 236;
POST_NOTE_PERMISSION_BITMAP
uint256 internal constant POST_NOTE_PERMISSION_BITMAP = 1 << POST_NOTE;
POST_NOTE_DEFAULT_PERMISSION_BITMAP
uint256 internal constant POST_NOTE_DEFAULT_PERMISSION_BITMAP =
((UINT256_MAX << 198) & ~(UINT256_MAX << 204)) | POST_NOTE_PERMISSION_BITMAP;
DEFAULT_PERMISSION_BITMAP
uint256 internal constant DEFAULT_PERMISSION_BITMAP =
((UINT256_MAX << 176) & ~(UINT256_MAX << 205)) | POST_NOTE_PERMISSION_BITMAP;
ALLOWED_PERMISSION_BITMAP_MASK
uint256 internal constant ALLOWED_PERMISSION_BITMAP_MASK = OWNER_PERMISSION_BITMAP | DEFAULT_PERMISSION_BITMAP;
OperatorLib
Functions
grantOperatorPermissions
Grants permission to a given operator for a character.
function grantOperatorPermissions(uint256 characterId, address operator, uint256 permissionBitMap) external;
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | The ID of the character to set operator for. |
operator | address | The operator address to set. |
permissionBitMap | uint256 | The permission bitmap for the operator. |
grantOperators4Note
Sets blocklist and allowlist for a specific note. Blocklist and allowlist are overwritten every time.
function grantOperators4Note(
uint256 characterId,
uint256 noteId,
address[] calldata blocklist,
address[] calldata allowlist
) external;
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | The character ID of the note owner. |
noteId | uint256 | The note ID to grant. |
blocklist | address[] | The addresses list of blocked operators. |
allowlist | address[] | The addresses list of allowed operators. |
clearOperators
function clearOperators(uint256 characterId) external;
_clearOperators4Note
function _clearOperators4Note(DataTypes.Operators4Note storage operators4Note) internal;
_updateOperators4Note
function _updateOperators4Note(
DataTypes.Operators4Note storage operators4Note,
address[] calldata blocklist,
address[] calldata allowlist
) internal;
_bitmapFilter
_bitmapFilter unsets bits of non-existent permission IDs to zero.
These unset permission IDs are meaningless now, but they are reserved for future use,
so it's best to leave them blank and avoid messing up with future methods.
function _bitmapFilter(uint256 bitmap) internal pure returns (uint256);
PostLib
Functions
postNoteWithLink
function postNoteWithLink(
DataTypes.PostNoteData calldata vars,
uint256 noteId,
bytes32 linkItemType,
bytes32 linkKey,
bytes calldata data
) external;
mintNote
function mintNote(uint256 characterId, uint256 noteId, address to, bytes calldata mintModuleData, address mintNFTImpl)
external
returns (uint256 tokenId);
setNoteUri
function setNoteUri(uint256 characterId, uint256 noteId, string calldata newUri) external;
lockNote
function lockNote(uint256 characterId, uint256 noteId) external;
deleteNote
function deleteNote(uint256 characterId, uint256 noteId) external;
setLinkModule4Note
Sets link module for a given note.
function setLinkModule4Note(uint256 characterId, uint256 noteId, address linkModule, bytes calldata linkModuleInitData)
external;
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | The character ID to set link module for. |
noteId | uint256 | The note ID to set link module for. |
linkModule | address | The link module to set. |
linkModuleInitData | bytes | The data to pass to the link module for initialization, if any. |
setMintModule4Note
Sets the mint module for a given note.
function setMintModule4Note(uint256 characterId, uint256 noteId, address mintModule, bytes calldata mintModuleInitData)
external;
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | The character ID of note to set the mint module for. |
noteId | uint256 | The note ID of note. |
mintModule | address | The mint module to set for note. |
mintModuleInitData | bytes | The data to pass to the mint module. |
_deployMintNFT
function _deployMintNFT(uint256 characterId, uint256 noteId, address mintNFTImpl) internal returns (address mintNFT);
_setLinkModule4Note
function _setLinkModule4Note(
uint256 characterId,
uint256 noteId,
address linkModule,
bytes calldata linkModuleInitData,
DataTypes.Note storage _note
) internal;
_setMintModule4Note
function _setMintModule4Note(
uint256 characterId,
uint256 noteId,
address mintModule,
bytes calldata mintModuleInitData,
DataTypes.Note storage _note
) internal;
StorageLib
State Variables
CHARACTERS_MAPPING_SLOT
uint256 public constant CHARACTERS_MAPPING_SLOT = 10;
CHARACTER_ID_BY_HANDLE_HASH_MAPPING_SLOT
uint256 public constant CHARACTER_ID_BY_HANDLE_HASH_MAPPING_SLOT = 11;
PRIMARY_CHARACTER_BY_ADDRESS_MAPPING_SLOT
uint256 public constant PRIMARY_CHARACTER_BY_ADDRESS_MAPPING_SLOT = 12;
ATTACHED_LINK_LISTS_MAPPING_SLOT
uint256 public constant ATTACHED_LINK_LISTS_MAPPING_SLOT = 13;
NOTES_MAPPING_SLOT
uint256 public constant NOTES_MAPPING_SLOT = 14;
LINK_MODULE_4_LINKLIST_MAPPING_SLOT
uint256 public constant LINK_MODULE_4_LINKLIST_MAPPING_SLOT = 15;
LINK_MODULE_4_ERC721_MAPPING_SLOT
uint256 public constant LINK_MODULE_4_ERC721_MAPPING_SLOT = 16;
LINK_MODULE_4_ADDRESS_MAPPING_SLOT
uint256 public constant LINK_MODULE_4_ADDRESS_MAPPING_SLOT = 17;
CHARACTER_COUNTER_SLOG
uint256 public constant CHARACTER_COUNTER_SLOG = 18;
LINKLIST_SLOT
uint256 public constant LINKLIST_SLOT = 19;
MINT_NFT_IMPL_SLOT
uint256 public constant MINT_NFT_IMPL_SLOT = 20;
PERIPHERY_SLOT
uint256 public constant PERIPHERY_SLOT = 21;
OPERATORS_BY_CHARACTER_MAPPING_SLOT
uint256 public constant OPERATORS_BY_CHARACTER_MAPPING_SLOT = 24;
OPERATORS_PERMISSION_BIT_MAP_MAPPING_SLOT
uint256 public constant OPERATORS_PERMISSION_BIT_MAP_MAPPING_SLOT = 25;
OPERATOR_FOR_NOTE_MAPPING_SLOT
uint256 public constant OPERATOR_FOR_NOTE_MAPPING_SLOT = 26;
NEWBIE_VILLA_SLOT
uint256 public constant NEWBIE_VILLA_SLOT = 27;
SIG_NONCES_MAPPING_SLOT
uint256 public constant SIG_NONCES_MAPPING_SLOT = 28;
Functions
setOperatorsPermissionBitMap
function setOperatorsPermissionBitMap(uint256 characterId, address operator, uint256 permissionBitMap) internal;
setAttachedLinklistId
function setAttachedLinklistId(uint256 characterId, bytes32 linkType, uint256 linklistId) internal;
deleteAttachedLinklistId
function deleteAttachedLinklistId(uint256 characterId, bytes32 linkType) internal;
getAttachedLinklistId
function getAttachedLinklistId(uint256 characterId, bytes32 linkType) internal view returns (uint256 _linklistId);
nonces
function nonces() internal pure returns (mapping(address => uint256) storage _nonces);
getCharacter
function getCharacter(uint256 characterId) internal pure returns (DataTypes.Character storage _character);
getNote
function getNote(uint256 characterId, uint256 noteId) internal pure returns (DataTypes.Note storage _note);
characterIdByHandleHash
function characterIdByHandleHash()
internal
pure
returns (mapping(bytes32 => uint256) storage _characterIdByHandleHash);
operatorsByCharacter
function operatorsByCharacter()
internal
pure
returns (mapping(uint256 => EnumerableSet.AddressSet) storage _operatorsByCharacter);
getOperators4Note
function getOperators4Note(uint256 characterId, uint256 noteId)
internal
pure
returns (DataTypes.Operators4Note storage _operators4Note);
ValidationLib
Functions
validateNoteExists
function validateNoteExists(uint256 characterId, uint256 noteId) internal view;
validateNoteNotLocked
function validateNoteNotLocked(uint256 characterId, uint256 noteId) internal view;
validateHandleNotExists
function validateHandleNotExists(bytes32 handleHash) internal view;
validateHandle
function validateHandle(string memory handle) internal pure;
validateChar
function validateChar(bytes1 c) internal pure;
Contents
CharacterBoundToken
Inherits: Context, ERC165, IERC1155, IERC1155MetadataURI, AccessControlEnumerable
State Variables
MINTER_ROLE
bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");
_balances
mapping(uint256 => mapping(uint256 => uint256)) private _balances;
_operatorApprovals
mapping(address => mapping(address => bool)) private _operatorApprovals;
_tokenURIs
mapping(uint256 => string) private _tokenURIs;
web3Entry
address public web3Entry;
_currentTokenNumbers
mapping(uint256 => uint256) private _currentTokenNumbers;
Functions
constructor
constructor(address web3Entry_);
mint
function mint(uint256 characterId, uint256 tokenId) external onlyRole(MINTER_ROLE);
burn
function burn(uint256 characterId, uint256 tokenId, uint256 amount) external;
setTokenURI
function setTokenURI(uint256 tokenId, string memory tokenURI) external onlyRole(MINTER_ROLE);
safeTransferFrom
See {IERC1155-safeTransferFrom}.
function safeTransferFrom(address, address, uint256, uint256, bytes memory) external virtual override;
safeBatchTransferFrom
See {IERC1155-safeBatchTransferFrom}.
function safeBatchTransferFrom(address, address, uint256[] memory, uint256[] memory, bytes memory)
external
virtual
override;
setApprovalForAll
See {IERC1155-setApprovalForAll}.
function setApprovalForAll(address operator, bool approved) external virtual override;
balanceOfBatch
function balanceOfBatch(address[] memory accounts, uint256[] memory tokenIds)
external
view
virtual
override
returns (uint256[] memory);
supportsInterface
See {IERC165-supportsInterface}.
function supportsInterface(bytes4 interfaceId)
public
view
virtual
override(AccessControlEnumerable, ERC165, IERC165)
returns (bool);
balanceOf
function balanceOf(address account, uint256 tokenId) public view virtual override returns (uint256 balance);
balanceOf
function balanceOf(uint256 characterId, uint256 tokenId) public view virtual returns (uint256);
uri
function uri(uint256 tokenId) public view virtual override returns (string memory);
isApprovedForAll
See {IERC1155-isApprovedForAll}.
function isApprovedForAll(address account, address operator) public view virtual override returns (bool);
_setApprovalForAll
Approve operator
to operate on all of owner
tokens
Emits an {ApprovalForAll} event.
function _setApprovalForAll(address owner, address operator, bool approved) internal virtual;
_setURI
function _setURI(uint256 tokenId, string memory tokenURI) internal virtual;
Events
Mint
event Mint(uint256 indexed to, uint256 indexed tokenId, uint256 indexed tokenNumber);
Burn
event Burn(uint256 indexed from, uint256 indexed tokenId, uint256 indexed amount);
NewbieVilla
Inherits: Initializable, AccessControlEnumerable, IERC721Receiver, IERC777Recipient
Implementation of a contract to keep characters for others. The keepers and addresses with the ADMIN_ROLE are expected to issue the proof to users. Then users could use the proof to withdraw the corresponding character.
State Variables
ADMIN_ROLE
bytes32 public constant ADMIN_ROLE = keccak256("ADMIN_ROLE");
ERC1820_REGISTRY
IERC1820Registry public constant ERC1820_REGISTRY = IERC1820Registry(0x1820a4B7618BdE71Dce8cdc73aAB6C95905faD24);
TOKENS_RECIPIENT_INTERFACE_HASH
bytes32 public constant TOKENS_RECIPIENT_INTERFACE_HASH = keccak256("ERC777TokensRecipient");
web3Entry
address public web3Entry;
xsyncOperator
address public xsyncOperator;
_token
address internal _token;
_balances
mapping(uint256 => uint256) internal _balances;
_tips
address internal _tips;
_keepers
mapping(uint256 characterId => address keeper) private _keepers;
Functions
notExpired
modifier notExpired(uint256 expires);
initialize
Initialize the Newbie Villa contract.
msg.sender will be granted DEFAULT_ADMIN_ROLE
.
function initialize(address web3Entry_, address xsyncOperator_, address token_, address admin_, address tips_)
external
reinitializer(3);
Parameters
Name | Type | Description |
---|---|---|
web3Entry_ | address | Address of web3Entry contract. |
xsyncOperator_ | address | Address of xsyncOperator. |
token_ | address | Address of ERC777 token. |
admin_ | address | Address of admin. |
tips_ | address | Address of Tips contract. |
tipCharacter
Tips a character by transferring amount
tokens
from account with required permission to Tips
contract.
Admin will call send
erc777 token to the Tips contract, with fromCharacterId
and toCharacterId
encoded in the data
.
send
interface is
IERC777-send,
and parameters encode refers
AbiCoder-encode.
Requirements:
- The
msg.sender
must be character's keeper or haveADMIN_ROLE
but not character's keeper.
function tipCharacter(uint256 fromCharacterId, uint256 toCharacterId, uint256 amount) external;
Parameters
Name | Type | Description |
---|---|---|
fromCharacterId | uint256 | The token ID of character that calls this contract. |
toCharacterId | uint256 | The token ID of character that will receive the token. |
amount | uint256 | Amount of token. |
tipCharacterForNote
Tips a character's note by transferring amount
tokens
from account with required permission to Tips
contract.
Admin will call send
erc777 token to the Tips contract, with fromCharacterId
,
toCharacterId
and toNoteId
encoded in the data
.
send
interface is
IERC777-send,
and parameters encode refers
AbiCoder-encode.
Requirements:
- The
msg.sender
must be character's keeper or haveADMIN_ROLE
but not character's keeper.
function tipCharacterForNote(uint256 fromCharacterId, uint256 toCharacterId, uint256 toNoteId, uint256 amount)
external;
Parameters
Name | Type | Description |
---|---|---|
fromCharacterId | uint256 | The token ID of character that calls this contract. |
toCharacterId | uint256 | The token ID of character that will receive the token. |
toNoteId | uint256 | The note ID. |
amount | uint256 | Amount of token. |
withdraw
Withdraw character#characterId
to to
using the nonce, expires and the proof.
Emits the Withdraw
event.
*Proof is the signature from character keepers or someone with the ADMIN_ROLE. The message to sign is
the packed data of this contract's address, characterId
, nonce
and expires
.
Here's an example to generate a proof:
digest = ethers.utils.arrayify(
ethers.utils.solidityKeccak256(
["address", "uint256", "uint256", "uint256"],
[newbieVilla.address, characterId, nonce, expires]
)
);
proof = await owner.signMessage(digest);
Requirements: :
expires
is greater than the current timestampproof
is signed by the keeper or address with the ADMIN_ROLE*
function withdraw(address to, uint256 characterId, uint256 nonce, uint256 expires, bytes calldata proof)
external
notExpired(expires);
Parameters
Name | Type | Description |
---|---|---|
to | address | Receiver of the withdrawn character. |
characterId | uint256 | The token id of the character to withdraw. |
nonce | uint256 | Random nonce used to generate the proof. |
expires | uint256 | Expire time of the proof, Unix timestamp in seconds. |
proof | bytes | The proof using to withdraw the character. |
onERC721Received
*Whenever a character tokenId
is transferred to this contract via {IERC721-safeTransferFrom}
by operator
from from
, this function is called. data
will be decoded as an address and set as
the operator of the character. If the data
is empty, the operator
will be default operator of the
character.
Requirements: :
msg.sender
must be address of Web3Entry.*
function onERC721Received(address operator, address, uint256 tokenId, bytes calldata data)
external
override
returns (bytes4);
Parameters
Name | Type | Description |
---|---|---|
operator | address | |
<none> | address | |
tokenId | uint256 | |
data | bytes | bytes encoded from the operator address to set for the incoming character. |
tokensReceived
Receives tokens. Only specific tokens are accepted, so be careful not to send tokens to this address randomly.
The userData/operatorData should be an abi-encoded bytes of fromCharacterId
and toCharacter
,
which are both uint256 type, so the length of data is 64.
function tokensReceived(
address,
address,
address to,
uint256 amount,
bytes calldata userData,
bytes calldata operatorData
) external override(IERC777Recipient);
Parameters
Name | Type | Description |
---|---|---|
<none> | address | |
<none> | address | |
to | address | The Newbie Villa contract address. |
amount | uint256 | The amount of token sent. |
userData | bytes | The abi-encoded bytes of fromCharacterId and toCharacter . |
operatorData | bytes | The abi-encoded bytes of fromCharacterId and toCharacter . |
balanceOf
Returns the amount of tokens owned by characterId
.
function balanceOf(uint256 characterId) external view returns (uint256);
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | The character ID to query. |
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | uint256 The amount of tokens owned by the character. |
getKeeper
Returns the address of keeper by characterId
.
function getKeeper(uint256 characterId) external view returns (address);
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | The character ID to query. |
Returns
Name | Type | Description |
---|---|---|
<none> | address | address The address of the keeper. |
getToken
Returns the address of mira token contract.
function getToken() external view returns (address);
Returns
Name | Type | Description |
---|---|---|
<none> | address | The address of mira token contract. |
_hasPermission
It will return true if account
is character's keeper or has ADMIN_ROLE
but not character's keeper.
function _hasPermission(address account, uint256 characterId) internal view returns (bool);
Events
Withdraw
Emitted when the web3Entry character nft is withdrawn.
event Withdraw(address to, uint256 characterId, address token, uint256 amount);
Periphery
Inherits: Initializable
State Variables
web3Entry
address public web3Entry;
linklist
address public linklist;
Functions
initialize
function initialize(address web3Entry_, address linklist_) external initializer;
linkCharactersInBatch
function linkCharactersInBatch(DataTypes.linkCharactersInBatchData calldata vars) external;
sync
function sync(
address account,
string calldata handle,
string calldata uri,
address[] calldata toAddresses,
bytes32 linkType
) external;
migrate
function migrate(DataTypes.MigrateData calldata vars) external;
getNotesByCharacterId
function getNotesByCharacterId(uint256 characterId, uint256 offset, uint256 limit)
external
view
returns (DataTypes.Note[] memory results);
getLinkingCharacterIds
function getLinkingCharacterIds(uint256 fromCharacterId, bytes32 linkType)
external
view
returns (uint256[] memory results);
getLinkingNotes
function getLinkingNotes(uint256 fromCharacterId, bytes32 linkType)
external
view
returns (DataTypes.Note[] memory results);
getLinkingNote
function getLinkingNote(bytes32 linkKey) external view returns (DataTypes.NoteStruct memory);
getLinkingERC721s
function getLinkingERC721s(uint256 fromCharacterId, bytes32 linkType)
external
view
returns (DataTypes.ERC721Struct[] memory results);
getLinkingERC721
function getLinkingERC721(bytes32 linkKey) external view returns (DataTypes.ERC721Struct memory);
getLinkingAnyUris
function getLinkingAnyUris(uint256 fromCharacterId, bytes32 linkType) external view returns (string[] memory results);
getLinkingAnyUri
function getLinkingAnyUri(bytes32 linkKey) external view returns (string memory);
getLinkingAddresses
function getLinkingAddresses(uint256 fromCharacterId, bytes32 linkType) external view returns (address[] memory);
getLinkingLinklistIds
function getLinkingLinklistIds(uint256 fromCharacterId, bytes32 linkType)
external
view
returns (uint256[] memory linklistIds);
getLinkingLinklistId
function getLinkingLinklistId(bytes32 linkKey) external pure returns (uint256 linklistId);
getLinkingAddress
function getLinkingAddress(bytes32 linkKey) external pure returns (address);
getLinkingCharacterId
function getLinkingCharacterId(bytes32 linkKey) external pure returns (uint256 characterId);
_migrate
_migrate will not update handle if the target character already exists
function _migrate(
address account,
string memory handle,
string memory uri,
address[] memory toAddresses,
bytes32 linkType
) internal;
_exists
function _exists(uint256 characterId) internal view returns (bool);
Tips
Inherits: Initializable, IERC777Recipient
Logic to handle rewards that user can send to character and note.
State Variables
ERC1820_REGISTRY
IERC1820Registry public constant ERC1820_REGISTRY = IERC1820Registry(0x1820a4B7618BdE71Dce8cdc73aAB6C95905faD24);
TOKENS_RECIPIENT_INTERFACE_HASH
bytes32 public constant TOKENS_RECIPIENT_INTERFACE_HASH = keccak256("ERC777TokensRecipient");
_web3Entry
address internal _web3Entry;
_token
address internal _token;
Functions
initialize
Initialize the contract, setting web3Entry address and token address.
function initialize(address web3Entry_, address token_) external initializer;
Parameters
Name | Type | Description |
---|---|---|
web3Entry_ | address | Address of web3Entry. |
token_ | address | Address of token. |
tokensReceived
Called by an {IERC777} token contract whenever tokens are being
moved or created into a registered account to
(this contract).
The userData/operatorData should be an abi encoded bytes of fromCharacterId
, toCharacter
and toNoteId
(optional), which are all uint256 type, so the length of data is 64 or 96.
function tokensReceived(
address,
address from,
address to,
uint256 amount,
bytes calldata userData,
bytes calldata operatorData
) external override(IERC777Recipient);
getWeb3Entry
Returns the address of web3Entry contract.
function getWeb3Entry() external view returns (address);
Returns
Name | Type | Description |
---|---|---|
<none> | address | The address of web3Entry contract. |
getToken
Returns the address of mira token contract.
function getToken() external view returns (address);
Returns
Name | Type | Description |
---|---|---|
<none> | address | The address of mira token contract. |
_tipCharacter
Tips a character by transferring amount
tokens
from the fromCharacterId
account to toCharacterId
account.
Emits the TipCharacter
event.
User should call send
erc777 token to the Tips contract, with fromCharacterId
and toCharacterId
encoded in the data
.
send
interface is
IERC777-send,
and parameters encode refers
AbiCoder-encode.
Requirements:
- The
from
account must be the character owner of `fromCharacterId.
function _tipCharacter(address from, uint256 fromCharacterId, uint256 toCharacterId, address token, uint256 amount)
internal;
Parameters
Name | Type | Description |
---|---|---|
from | address | The caller's account who sends token. |
fromCharacterId | uint256 | The token ID of character that calls this contract. |
toCharacterId | uint256 | The token ID of character that will receive the token. |
token | address | Address of token. |
amount | uint256 | Amount of token. |
_tipCharacterForNote
Tips a character's note by transferring amount
tokens
from the fromCharacterId
account to toCharacterId
account.
Emits the TipCharacterForNote
event.
User should call send
erc777 token to the Tips contract, with fromCharacterId
,
toCharacterId
and toNoteId
encoded in the data
.
Requirements:
- The
from
account must be the character owner of `fromCharacterId.
function _tipCharacterForNote(
address from,
uint256 fromCharacterId,
uint256 toCharacterId,
uint256 toNoteId,
address token,
uint256 amount
) internal;
Parameters
Name | Type | Description |
---|---|---|
from | address | The caller's account who sends token. |
fromCharacterId | uint256 | The token ID of character that calls this contract. |
toCharacterId | uint256 | The token ID of character that will receive the token. |
toNoteId | uint256 | The note ID. |
token | address | Address of token. |
amount | uint256 | Amount of token. |
_sendToken
function _sendToken(address from, uint256 fromCharacterId, uint256 toCharacterId, address token, uint256 amount)
internal;
Events
TipCharacter
Emitted when the assets are rewarded to a character.
event TipCharacter(uint256 indexed fromCharacterId, uint256 indexed toCharacterId, address token, uint256 amount);
TipCharacterForNote
Emitted when the assets are rewarded to a note.
event TipCharacterForNote(
uint256 indexed fromCharacterId,
uint256 indexed toCharacterId,
uint256 indexed toNoteId,
address token,
uint256 amount
);
Errors
ErrCallerNotCharacterOwner
error ErrCallerNotCharacterOwner();
TipsWithConfig
Inherits: ITipsWithConfig, Initializable, ReentrancyGuard
Logic to handle the periodical tips that user can send to character periodically.
User can set config for a specific character, and anyone can collect the tip by config id.
For setTipsConfig4Character
User can set the tips config for a specific character.
For collectTips4Character
Anyone can collect the tip by config id, and it will transfer all available tokens
from the fromCharacterId
account to the toCharacterId
account.
State Variables
_web3Entry
address internal _web3Entry;
_tipsConfigIndex
uint256 internal _tipsConfigIndex;
_tipsConfigs
mapping(uint256 tipsConfigId => TipsConfig) internal _tipsConfigs;
_tipsConfigIds
mapping(uint256 fromCharacterId => mapping(uint256 toCharacterId => uint256 tipsConfigId)) internal _tipsConfigIds;
_feeFractions
mapping(address feeReceiver => uint256 fraction) internal _feeFractions;
_feeFractions4Character
mapping(address feeReceiver => mapping(uint256 characterId => uint256 fraction)) internal _feeFractions4Character;
Functions
onlyFeeReceiver
modifier onlyFeeReceiver(address feeReceiver);
validateFraction
modifier validateFraction(uint256 fraction);
initialize
Initialize the contract, setting web3Entry address.
function initialize(address web3Entry_) external override initializer;
Parameters
Name | Type | Description |
---|---|---|
web3Entry_ | address | Address of web3Entry. |
setDefaultFeeFraction
Sets the default fee percentage of specific receiver.
The feeReceiver can be a platform account.
function setDefaultFeeFraction(address feeReceiver, uint256 fraction)
external
override
onlyFeeReceiver(feeReceiver)
validateFraction(fraction);
Parameters
Name | Type | Description |
---|---|---|
feeReceiver | address | The fee receiver address. |
fraction | uint256 | The percentage measured in basis points. Each basis point represents 0.01%. |
setFeeFraction4Character
Sets the fee percentage of specific <receiver, character>.
If this is set, it will override the default fee fraction.
function setFeeFraction4Character(address feeReceiver, uint256 characterId, uint256 fraction)
external
override
onlyFeeReceiver(feeReceiver)
validateFraction(fraction);
Parameters
Name | Type | Description |
---|---|---|
feeReceiver | address | The fee receiver address. |
characterId | uint256 | The character ID. |
fraction | uint256 | The percentage measured in basis points. Each basis point represents 0.01%. |
setTipsConfig4Character
Sets the tips config of specific <fromCharacter, toCharacter>.
Emits a {SetTipsConfig4Character} event.
If the tips config of specific <fromCharacter, toCharacter> is already, it will try to collect the tips first, and then override the tips config.
function setTipsConfig4Character(
uint256 fromCharacterId,
uint256 toCharacterId,
address token,
uint256 amount,
uint256 startTime,
uint256 endTime,
uint256 interval,
address feeReceiver
) external override;
Parameters
Name | Type | Description |
---|---|---|
fromCharacterId | uint256 | The token ID of character that would send the reward. |
toCharacterId | uint256 | The token ID of character that would receive the reward. |
token | address | The token address. |
amount | uint256 | The amount of token. |
startTime | uint256 | The start time of tips. |
endTime | uint256 | The end time of tips. |
interval | uint256 | The interval of tips. |
feeReceiver | address | The fee receiver address. |
cancelTips4Character
Cancels the tips config.
Emits a {CancelTips4Character} event.
It will try to collect the tips first, and then delete the tips config.
function cancelTips4Character(uint256 tipConfigId) external override;
Parameters
Name | Type | Description |
---|---|---|
tipConfigId | uint256 | The tip config ID to cancel. |
collectTips4Character
Collects all unredeemed token from the fromCharacter
to the toCharacter
.
Emits a {CollectTips4Character} event if collects successfully.
It will transfer all unredeemed token from the fromCharacter
to the toCharacter
.
function collectTips4Character(uint256 tipConfigId) external override nonReentrant returns (uint256 collectedAmount);
Parameters
Name | Type | Description |
---|---|---|
tipConfigId | uint256 | The tip config ID. |
Returns
Name | Type | Description |
---|---|---|
collectedAmount | uint256 | The amount of token collected. |
getFeeFraction
Returns the fee percentage of specific <receiver, note>.
It will return the first non-zero value by priority feeFraction4Character and defaultFeeFraction.
function getFeeFraction(address feeReceiver, uint256 characterId) external view override returns (uint256);
Parameters
Name | Type | Description |
---|---|---|
feeReceiver | address | The fee receiver address. |
characterId | uint256 | The character ID . |
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | fraction The percentage measured in basis points. Each basis point represents 0.01%. |
getFeeAmount
Returns how much the fee is owed by <feeFraction, tipAmount>.
function getFeeAmount(address feeReceiver, uint256 characterId, uint256 tipAmount)
external
view
override
returns (uint256);
Parameters
Name | Type | Description |
---|---|---|
feeReceiver | address | The fee receiver address. |
characterId | uint256 | The character ID . |
tipAmount | uint256 |
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | The fee amount. |
getTipsConfigId
Return the tips config Id.
function getTipsConfigId(uint256 fromCharacterId, uint256 toCharacterId) external view returns (uint256);
Parameters
Name | Type | Description |
---|---|---|
fromCharacterId | uint256 | The token ID of character that initiated a reward. |
toCharacterId | uint256 | The token ID of character that would receive the reward. |
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | uint256 Returns tips config ID. |
getTipsConfig
Return the tips config.
function getTipsConfig(uint256 tipConfigId) external view override returns (TipsConfig memory config);
Parameters
Name | Type | Description |
---|---|---|
tipConfigId | uint256 | The tip config ID. |
getWeb3Entry
Returns the address of web3Entry contract.
function getWeb3Entry() external view override returns (address);
Returns
Name | Type | Description |
---|---|---|
<none> | address | The address of web3Entry contract. |
_collectTips4Character
function _collectTips4Character(uint256 tipConfigId) internal returns (uint256);
_getTipsConfigId
function _getTipsConfigId(uint256 fromCharacterId, uint256 toCharacterId) internal view returns (uint256);
_getAvailableRoundAndAmount
function _getAvailableRoundAndAmount(TipsConfig memory config) internal view returns (uint256, uint256);
_getFeeFraction
function _getFeeFraction(address feeReceiver, uint256 characterId) internal view returns (uint256);
_getFeeAmount
function _getFeeAmount(address feeReceiver, uint256 characterId, uint256 tipAmount) internal view returns (uint256);
_getTipRound
function _getTipRound(uint256 startTime, uint256 endTime, uint256 interval) internal pure returns (uint256);
_feeDenominator
Defaults to 10000 so fees are expressed in basis points.
function _feeDenominator() internal pure virtual returns (uint96);
Events
SetTipsConfig4Character
Emitted when a user set a tip with periodical config.
event SetTipsConfig4Character(
uint256 indexed tipConfigId,
uint256 indexed fromCharacterId,
uint256 indexed toCharacterId,
address token,
uint256 amount,
uint256 startTime,
uint256 endTime,
uint256 interval,
address feeReceiver,
uint256 totalRound
);
CancelTips4Character
Emitted when a periodical config is canceled.
event CancelTips4Character(uint256 indexed tipConfigId);
CollectTips4Character
Emitted when a user collect a tip with periodical config.
event CollectTips4Character(
uint256 indexed tipConfigId,
uint256 indexed fromCharacterId,
uint256 indexed toCharacterId,
address token,
uint256 amount,
uint256 fee,
address feeReceiver,
uint256 currentRound
);
TipsWithFee
Inherits: ITipsWithFee, Initializable, IERC777Recipient
Logic to handle rewards that user can send to character and note.
The platform can set the commission ratio through the TipsWithFee contract,
and draw a commission from the user's tips.
For TipCharacter
User/Client should call send
erc777 token to the TipsWithFee contract, with fromCharacterId
,
toCharacterId
and receiver
(a platform account) encoded in the data
.
send
interface is
IERC777-send,
and parameters encode refers
AbiCoder-encode.
For TipCharacter4Note
User should call send
erc777 token to the TipsWithFee contract, with fromCharacterId
,
toCharacterId
, toNoteId
and receiver
encoded in the data
.
The platform account can set the commission ratio through setDefaultFeeFraction
, setFeeFraction4Character
and setFeeFraction4Note
.
State Variables
ERC1820_REGISTRY
IERC1820Registry public constant ERC1820_REGISTRY = IERC1820Registry(0x1820a4B7618BdE71Dce8cdc73aAB6C95905faD24);
TOKENS_RECIPIENT_INTERFACE_HASH
bytes32 public constant TOKENS_RECIPIENT_INTERFACE_HASH = keccak256("ERC777TokensRecipient");
_web3Entry
address internal _web3Entry;
_token
address internal _token;
_feeFractions
mapping(address => uint256) internal _feeFractions;
_feeFractions4Character
mapping(address => mapping(uint256 => uint256)) internal _feeFractions4Character;
_feeFractions4Note
mapping(address => mapping(uint256 => mapping(uint256 => uint256))) internal _feeFractions4Note;
Functions
onlyFeeReceiver
modifier onlyFeeReceiver(address feeReceiver);
validateFraction
modifier validateFraction(uint256 fraction);
initialize
Initialize the contract, setting web3Entry address and token address.
function initialize(address web3Entry_, address token_) external override initializer;
Parameters
Name | Type | Description |
---|---|---|
web3Entry_ | address | Address of web3Entry. |
token_ | address | Address of token. |
setDefaultFeeFraction
Changes the default fee percentage of specific receiver.
The feeReceiver can be a platform account.
function setDefaultFeeFraction(address feeReceiver, uint256 fraction)
external
override
onlyFeeReceiver(feeReceiver)
validateFraction(fraction);
Parameters
Name | Type | Description |
---|---|---|
feeReceiver | address | The fee receiver address. |
fraction | uint256 | The percentage measured in basis points. Each basis point represents 0.01%. |
setFeeFraction4Character
Changes the fee percentage of specific <receiver, character>.
If feeFraction4Character is set, it will override the default fee fraction.
function setFeeFraction4Character(address feeReceiver, uint256 characterId, uint256 fraction)
external
override
onlyFeeReceiver(feeReceiver)
validateFraction(fraction);
Parameters
Name | Type | Description |
---|---|---|
feeReceiver | address | The fee receiver address. |
characterId | uint256 | The character ID. |
fraction | uint256 | The percentage measured in basis points. Each basis point represents 0.01%. |
setFeeFraction4Note
Changes the fee percentage of specific <receiver, note>.
If feeFraction4Note is set, it will override feeFraction4Character and the default fee fraction.
function setFeeFraction4Note(address feeReceiver, uint256 characterId, uint256 noteId, uint256 fraction)
external
override
onlyFeeReceiver(feeReceiver)
validateFraction(fraction);
Parameters
Name | Type | Description |
---|---|---|
feeReceiver | address | The fee receiver address. |
characterId | uint256 | The character ID . |
noteId | uint256 | The note ID . |
fraction | uint256 | The percentage measured in basis points. Each basis point represents 0.01%. |
tokensReceived
Called by an {IERC777} token contract whenever tokens are being
moved or created into a registered account to
(this contract).
The userData/operatorData should be an abi encoded bytes of fromCharacterId
, toCharacter
and toNoteId
(optional) and receiver
(platform account), so the length of data is 96 or 128.
function tokensReceived(
address,
address from,
address to,
uint256 amount,
bytes calldata userData,
bytes calldata operatorData
) external override(IERC777Recipient);
getWeb3Entry
Returns the address of web3Entry contract.
function getWeb3Entry() external view override returns (address);
Returns
Name | Type | Description |
---|---|---|
<none> | address | The address of web3Entry contract. |
getToken
Returns the address of mira token contract.
function getToken() external view override returns (address);
Returns
Name | Type | Description |
---|---|---|
<none> | address | The address of mira token contract. |
getFeeFraction
Returns the fee percentage of specific <receiver, note>.
It will return the first non-zero value by priority feeFraction4Note, feeFraction4Character and defaultFeeFraction.
function getFeeFraction(address feeReceiver, uint256 characterId, uint256 noteId)
external
view
override
returns (uint256);
Parameters
Name | Type | Description |
---|---|---|
feeReceiver | address | The fee receiver address. |
characterId | uint256 | The character ID . |
noteId | uint256 | The note ID . |
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | fraction The percentage measured in basis points. Each basis point represents 0.01%. |
getFeeAmount
Returns how much the fee is owed by <feeFraction, tipAmount>.
function getFeeAmount(address feeReceiver, uint256 characterId, uint256 noteId, uint256 tipAmount)
external
view
override
returns (uint256);
Parameters
Name | Type | Description |
---|---|---|
feeReceiver | address | The fee receiver address. |
characterId | uint256 | The character ID . |
noteId | uint256 | The note ID . |
tipAmount | uint256 |
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | The fee amount. |
_tipCharacter
Tips a character by transferring amount
tokens
from the fromCharacterId
account to toCharacterId
account.
Emits the TipCharacter
event.
User should call send
erc777 token to the Tips contract, with fromCharacterId
and toCharacterId
encoded in the data
.
send
interface is
IERC777-send,
and parameters encode refers
AbiCoder-encode.
Requirements:
- The
from
account must be the character owner of `fromCharacterId.
function _tipCharacter(
address from,
uint256 fromCharacterId,
uint256 toCharacterId,
address token,
uint256 amount,
address feeReceiver
) internal;
Parameters
Name | Type | Description |
---|---|---|
from | address | The caller's account who sends token. |
fromCharacterId | uint256 | The token ID of character that calls this contract. |
toCharacterId | uint256 | The token ID of character that will receive the token. |
token | address | Address of token. |
amount | uint256 | Amount of token. |
feeReceiver | address | Fee receiver address. |
_tipCharacterForNote
Tips a character's note by transferring amount
tokens
from the fromCharacterId
account to toCharacterId
account.
Emits the TipCharacterForNote
event.
User should call send
erc777 token to the Tips contract, with fromCharacterId
,
toCharacterId
and toNoteId
encoded in the data
.
Requirements:
- The
from
account must be the character owner of `fromCharacterId.
function _tipCharacterForNote(
address from,
uint256 fromCharacterId,
uint256 toCharacterId,
uint256 toNoteId,
address token,
uint256 amount,
address feeReceiver
) internal;
Parameters
Name | Type | Description |
---|---|---|
from | address | The caller's account who sends token. |
fromCharacterId | uint256 | The token ID of character that calls this contract. |
toCharacterId | uint256 | The token ID of character that will receive the token. |
toNoteId | uint256 | The note ID. |
token | address | Address of token. |
amount | uint256 | Amount of token. |
feeReceiver | address | Fee receiver address. |
_tip
function _tip(
address from,
uint256 fromCharacterId,
uint256 toCharacterId,
uint256 toNoteId,
address token,
uint256 amount,
address feeReceiver
) internal;
_getFeeFraction
function _getFeeFraction(address feeReceiver, uint256 characterId, uint256 noteId) internal view returns (uint256);
_getFeeAmount
function _getFeeAmount(address feeReceiver, uint256 characterId, uint256 noteId, uint256 tipAmount)
internal
view
returns (uint256);
_feeDenominator
Defaults to 10000 so fees are expressed in basis points.
function _feeDenominator() internal pure virtual returns (uint96);
Events
TipCharacter
Emitted when the assets are rewarded to a character.
event TipCharacter(
uint256 indexed fromCharacterId,
uint256 indexed toCharacterId,
address token,
uint256 amount,
uint256 fee,
address feeReceiver
);
TipCharacterForNote
Emitted when the assets are rewarded to a note.
event TipCharacterForNote(
uint256 indexed fromCharacterId,
uint256 indexed toCharacterId,
uint256 indexed toNoteId,
address token,
uint256 amount,
uint256 fee,
address feeReceiver
);
Contents
Contents
ApprovalLinkModule4Character
Inherits: ILinkModule4Character, ModuleBase
This is a simple LinkModule implementation, inheriting from the ILinkModule4Character interface.
State Variables
_approvedByCharacterByOwner
mapping(address => mapping(uint256 => mapping(address => bool))) internal _approvedByCharacterByOwner;
Functions
constructor
constructor(address web3Entry_) ModuleBase(web3Entry_);
initializeLinkModule
function initializeLinkModule(uint256 characterId, bytes calldata data) external override returns (bytes memory);
approve
A custom function that allows character owners to customize approved addresses.
function approve(uint256 characterId, address[] calldata addresses, bool[] calldata toApprove) external;
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | The character ID to approve/disapprove. |
addresses | address[] | The addresses to approve/disapprove for linking the character. |
toApprove | bool[] | Whether to approve or disapprove the addresses for linking the character. |
processLink
function processLink(address caller, uint256 characterId, bytes calldata) external view override onlyWeb3Entry;
isApproved
function isApproved(address characterOwner, uint256 characterId, address toCheck) external view returns (bool);
ApprovalLinkModule4Note
Inherits: ILinkModule4Note, ModuleBase
This is a simple LinkModule implementation, inheriting from the ILinkModule4Note interface.
State Variables
_approvedByCharacterByNoteByOwner
mapping(address => mapping(uint256 => mapping(uint256 => mapping(address => bool)))) internal
_approvedByCharacterByNoteByOwner;
Functions
constructor
constructor(address web3Entry_) ModuleBase(web3Entry_);
initializeLinkModule
function initializeLinkModule(uint256 characterId, uint256 noteId, bytes calldata data)
external
override
returns (bytes memory);
approve
function approve(uint256 characterId, uint256 noteId, address[] calldata addresses, bool[] calldata toApprove)
external;
processLink
function processLink(address caller, uint256 characterId, uint256 noteId, bytes calldata)
external
view
override
onlyWeb3Entry;
isApproved
function isApproved(address characterOwner, uint256 characterId, uint256 noteId, address toCheck)
external
view
returns (bool);
Currency
Inherits: ERC20
Functions
mint
function mint(address to, uint256 amount) external;
ERC1271WalletMock
Inherits: Ownable, IERC1271, IERC721Receiver
Functions
constructor
constructor(address originalOwner);
isValidSignature
function isValidSignature(bytes32 hash, bytes memory signature) external view override returns (bytes4 magicValue);
onERC721Received
function onERC721Received(address, address, uint256, bytes calldata) external pure override returns (bytes4);
ERC1271MaliciousMock
Inherits: IERC1271, IERC721Receiver
Functions
isValidSignature
function isValidSignature(bytes32, bytes memory) external pure override returns (bytes4);
onERC721Received
function onERC721Received(address, address, uint256, bytes calldata) external pure override returns (bytes4);
MiraToken
Inherits: AccessControlEnumerable, IERC20Mintable, ERC777
State Variables
BLOCK_ROLE
bytes32 public constant BLOCK_ROLE = keccak256("BLOCK_ROLE");
Functions
constructor
constructor(string memory name_, string memory symbol_, address admin) ERC777(name_, symbol_, new address[](0));
mint
*Creates amount
new tokens for to
.
Requirements:
- the caller must have the
DEFAULT_ADMIN_ROLE
.*
function mint(address to, uint256 amount) external override onlyRole(DEFAULT_ADMIN_ROLE);
renounceRole
*Revokes role
from the calling account.
Requirements:
- the caller must have the
DEFAULT_ADMIN_ROLE
.*
function renounceRole(bytes32 role, address account)
public
override(AccessControl, IAccessControl)
onlyRole(DEFAULT_ADMIN_ROLE);
_send
Blocks send tokens from account from
who has the BLOCK_ROLE
.
function _send(
address from,
address to,
uint256 amount,
bytes memory userData,
bytes memory operatorData,
bool requireReceptionAck
) internal override;
_burn
Disables burn
function _burn(address, uint256, bytes memory, bytes memory) internal pure override;
NFT
Inherits: NFTBase, Initializable
Functions
initialize
function initialize(string calldata name_, string calldata symbol_) external initializer;
mint
function mint(address to) public;
NFT1155
Inherits: ERC1155
Functions
constructor
constructor() ERC1155("https://ipfsxxxx");
mint
function mint(address to) public;
Contents
Contents
ApprovalMintModule
Inherits: IMintModule4Note, ModuleBase
This is a simple MintModule implementation, inheriting from the IMintModule4Note interface. This module works by allowing limited minting for a post, and only for those who are approved.
State Variables
_approvedInfo
mapping(uint256 => mapping(uint256 => mapping(address => ApprovedInfo))) internal _approvedInfo;
Functions
constructor
constructor(address web3Entry_) ModuleBase(web3Entry_);
initializeMintModule
Initialize the MintModule for a specific note.
The data should an abi encoded bytes, containing (in order): an address array and an uint256
function initializeMintModule(uint256 characterId, uint256 noteId, bytes calldata data)
external
override
onlyWeb3Entry
returns (bytes memory);
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | The character ID of the note to initialize. |
noteId | uint256 | The note ID to initialize. |
data | bytes | The data passed from the user to be decoded. |
Returns
Name | Type | Description |
---|---|---|
<none> | bytes | bytes The returned data of calling initializeMintModule. |
setApprovedAmount
Set the approved addresses for minting and the approvedAmount allowed to be minted.
The approvedAmount is 0 by default, and you can also revoke the approval for addresses by
setting the approvedAmount to 0.
function setApprovedAmount(uint256 characterId, uint256 noteId, address[] calldata addresses, uint256 approvedAmount)
external;
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | The character ID of the note owner. |
noteId | uint256 | The ID of the note. |
addresses | address[] | The Addresses to set. |
approvedAmount | uint256 | The amount of NFTs allowed to be minted. |
processMint
Process minting and check if the caller is eligible.
function processMint(address to, uint256 characterId, uint256 noteId, bytes calldata) external override onlyWeb3Entry;
Parameters
Name | Type | Description |
---|---|---|
to | address | The receive address of the NFT. |
characterId | uint256 | The character ID of the note owner. |
noteId | uint256 | The note ID. |
<none> | bytes |
getApprovedInfo
Returns the approved info indicates the approved amount and minted amount of an address.
function getApprovedInfo(uint256 characterId, uint256 noteId, address account)
external
view
returns (uint256 approvedAmount, uint256 mintedAmount);
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | ID of the character to query. |
noteId | uint256 | ID of the note to query. |
account | address | The address to query. |
Returns
Name | Type | Description |
---|---|---|
approvedAmount | uint256 | The approved amount that the address can mint. |
mintedAmount | uint256 | The amount that the address has already minted. |
_setApprovedAmount
function _setApprovedAmount(uint256 characterId, uint256 noteId, address[] memory addresses, uint256 approvedAmount)
internal;
Structs
ApprovedInfo
struct ApprovedInfo {
uint256 approvedAmount;
uint256 mintedAmount;
}
CharacterNoteData
A struct containing associated data with each note.
struct CharacterNoteData {
uint256 amount;
address token;
address recipient;
}
FeeMintModule
Inherits: IMintModule4Note, ModuleBase
This is a simple MintModule implementation, inheriting from the IMintModule4Note interface.
State Variables
_dataByNoteByCharacter
mapping(uint256 => mapping(uint256 => CharacterNoteData)) internal _dataByNoteByCharacter;
Functions
constructor
constructor(address web3Entry_) ModuleBase(web3Entry_);
initializeMintModule
function initializeMintModule(uint256 characterId, uint256 noteId, bytes calldata data)
external
override
onlyWeb3Entry
returns (bytes memory);
processMint
Processes the mint logic by charging a fee.
Triggered when the mintNote
of web3Entry is called, if mint module of note if set.
function processMint(address to, uint256 characterId, uint256 noteId, bytes calldata data)
external
override
onlyWeb3Entry;
Parameters
Name | Type | Description |
---|---|---|
to | address | |
characterId | uint256 | ID of character. |
noteId | uint256 | ID of note. |
data | bytes | The mintModuleData passed by user who called the mintNote of web3Entry . |
getNoteData
Returns the associated data for a given note.
onlyWeb3Entry can call processMint
function getNoteData(uint256 characterId, uint256 noteId) external view returns (CharacterNoteData memory);
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | ID of character to query. |
noteId | uint256 | ID of note to query. |
Returns
Name | Type | Description |
---|---|---|
<none> | CharacterNoteData | Returns the associated data for a given note. |
LimitedMintModule
Inherits: IMintModule4Note, ModuleBase
This is a simple MintModule implementation, inheriting from the IMintModule4Note interface. This module works by allowing limited minting for a post.
State Variables
_limitedMintInfo
mapping(uint256 => mapping(uint256 => LimitedMintInfo)) internal _limitedMintInfo;
_mintedAmount
mapping(uint256 => mapping(uint256 => mapping(address => uint256))) internal _mintedAmount;
Functions
constructor
constructor(address web3Entry_) ModuleBase(web3Entry_);
initializeMintModule
Initialize the MintModule for a specific note.
The data should an abi encoded bytes of (uint256,uint256)
function initializeMintModule(uint256 characterId, uint256 noteId, bytes calldata data)
external
override
onlyWeb3Entry
returns (bytes memory);
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | The character ID of the note to initialize. |
noteId | uint256 | The note ID to initialize. |
data | bytes | The data passed from the user to be decoded. |
Returns
Name | Type | Description |
---|---|---|
<none> | bytes | bytes The returned data of calling initializeMintModule. |
processMint
Process minting and check if the caller is eligible.
function processMint(address to, uint256 characterId, uint256 noteId, bytes calldata) external override onlyWeb3Entry;
Parameters
Name | Type | Description |
---|---|---|
to | address | The receive address of the NFT. |
characterId | uint256 | The character ID of the note owner. |
noteId | uint256 | The note ID. |
<none> | bytes |
getLimitedMintInfo
Returns the info indicates the limited mint info of an address.
function getLimitedMintInfo(uint256 characterId, uint256 noteId, address account)
external
view
returns (uint256 maxSupply, uint256 currentSupply, uint256 maxMintPerAddress, uint256 mintedAmount);
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | ID of the character to query. |
noteId | uint256 | ID of the note to query. |
account | address | The address to query. |
Returns
Name | Type | Description |
---|---|---|
maxSupply | uint256 | The max supply of nft that can be minted. |
currentSupply | uint256 | The current supply of nft that has been minted. |
maxMintPerAddress | uint256 | The amount that each address can mint. |
mintedAmount | uint256 | The amount that the address has already minted. |
Structs
LimitedMintInfo
struct LimitedMintInfo {
uint256 maxSupply;
uint256 currentSupply;
uint256 maxMintPerAddress;
}
ModuleBase
State Variables
web3Entry
address public immutable web3Entry;
Functions
onlyWeb3Entry
modifier onlyWeb3Entry();
constructor
constructor(address web3Entry_);
Contents
LinklistExtendStorage
State Variables
_tokenCount
uint256 internal _tokenCount;
_linklistOwners
mapping(uint256 tokenId => uint256 characterId) internal _linklistOwners;
_linklistBalances
mapping(uint256 characterId => uint256 balances) internal _linklistBalances;
_totalSupply
uint256 internal _totalSupply;
LinklistStorage
State Variables
Web3Entry
address public Web3Entry;
_linkTypes
mapping(uint256 => bytes32) internal _linkTypes;
_linkingCharacters
mapping(uint256 => EnumerableSet.UintSet) internal _linkingCharacters;
_linkingAddresses
mapping(uint256 => EnumerableSet.AddressSet) internal _linkingAddresses;
_linkingLinklists
mapping(uint256 => EnumerableSet.UintSet) internal _linkingLinklists;
_linkKeys
mapping(uint256 => EnumerableSet.Bytes32Set) internal _linkKeys;
_linkingERC721s
mapping(bytes32 => DataTypes.ERC721Struct) internal _linkingERC721s;
_linkNotes
mapping(bytes32 => DataTypes.NoteStruct) internal _linkNotes;
_linkingCharacterLinks
mapping(bytes32 => DataTypes.CharacterLinkStruct) internal _linkingCharacterLinks;
_linkingAnys
mapping(bytes32 => string) internal _linkingAnys;
_currentTakeOver
mapping(uint256 => uint256) internal _currentTakeOver;
_uris
mapping(uint256 => string) internal _uris;
_linkingERC721Keys
mapping(uint256 => EnumerableSet.Bytes32Set) internal _linkingERC721Keys;
_linkNoteKeys
mapping(uint256 => EnumerableSet.Bytes32Set) internal _linkNoteKeys;
_linkingCharacterLinkKeys
mapping(uint256 => EnumerableSet.Bytes32Set) internal _linkingCharacterLinkKeys;
_linkingAnyKeys
mapping(uint256 => EnumerableSet.Bytes32Set) internal _linkingAnyKeys;
Web3EntryExtendStorage
State Variables
_periphery
address internal _periphery;
_operatorByCharacter
mapping(uint256 => address) internal _operatorByCharacter;
resolver
address public resolver;
_operatorsByCharacter
mapping(uint256 => EnumerableSet.AddressSet) internal _operatorsByCharacter;
_operatorsPermissionBitMap
mapping(uint256 => mapping(address => uint256)) internal _operatorsPermissionBitMap;
_operators4Note
mapping(uint256 => mapping(uint256 => DataTypes.Operators4Note)) internal _operators4Note;
_newbieVilla
address internal _newbieVilla;
_sigNonces
mapping(address => uint256) internal _sigNonces;
Web3EntryStorage
State Variables
_characterById
mapping(uint256 => DataTypes.Character) internal _characterById;
_characterIdByHandleHash
mapping(bytes32 => uint256) internal _characterIdByHandleHash;
_primaryCharacterByAddress
mapping(address => uint256) internal _primaryCharacterByAddress;
_attachedLinklists
mapping(uint256 => mapping(bytes32 => uint256)) internal _attachedLinklists;
_noteByIdByCharacter
mapping(uint256 => mapping(uint256 => DataTypes.Note)) internal _noteByIdByCharacter;
_linkModules4Linklist
mapping(uint256 => address) internal _linkModules4Linklist;
_linkModules4ERC721
disable uninitialized-state
check, as linkmodule for erc721 is not enabled currently
mapping(address => mapping(uint256 => address)) internal _linkModules4ERC721;
_linkModules4Address
mapping(address => address) internal _linkModules4Address;
_characterCounter
uint256 internal _characterCounter;
_linklist
address internal _linklist;
MINT_NFT_IMPL
address internal MINT_NFT_IMPL;
Contents
TransparentUpgradeableProxy
Inherits: ERC1967Proxy
*This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand:
- If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself.
- If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the
implementation. If the admin tries to call a function on the implementation it will fail with an error that says
"admin cannot fallback to proxy target".
These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing
the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due
to sudden errors when trying to call a function from the proxy implementation.
Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,
you should think of the
ProxyAdmin
instance as the real administrative interface of your proxy.*
Functions
constructor
Initializes an upgradeable proxy managed by _admin
, backed by the implementation at _logic
, and
optionally initialized with _data
as explained in {ERC1967Proxy-constructor}.
constructor(address _logic, address admin_, bytes memory _data) payable ERC1967Proxy(_logic, _data);
ifAdmin
Modifier used internally that will delegate the call to the implementation unless the sender is the admin.
modifier ifAdmin();
admin
Returns the current admin.
NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.
TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the
https://eth.wiki/json-rpc/API#eth_getstorageat[eth_getStorageAt
] RPC call.
0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103
function admin() external ifAdmin returns (address admin_);
implementation
Returns the current implementation.
NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.
TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the
https://eth.wiki/json-rpc/API#eth_getstorageat[eth_getStorageAt
] RPC call.
0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc
function implementation() external ifAdmin returns (address implementation_);
changeAdmin
Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.
function changeAdmin(address newAdmin) external virtual ifAdmin;
upgradeTo
Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.
function upgradeTo(address newImplementation) external ifAdmin;
upgradeToAndCall
Upgrade the implementation of the proxy, and then call a function from the new implementation as specified
by data
, which should be an encoded function call. This is useful to initialize new storage variables in the
proxied contract.
NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.
function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin;
_admin
Returns the current admin.
function _admin() internal view virtual returns (address);
_beforeFallback
Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.
function _beforeFallback() internal virtual override;
Linklist
Inherits: ILinklist, LinklistBase, LinklistStorage, Initializable, LinklistExtendStorage
Functions
onlyWeb3Entry
modifier onlyWeb3Entry();
onlyExistingToken
modifier onlyExistingToken(uint256 tokenId);
initialize
Initializes the contract.
function initialize(string calldata name_, string calldata symbol_, address web3Entry_)
external
override
reinitializer(2);
Parameters
Name | Type | Description |
---|---|---|
name_ | string | The name of the token. |
symbol_ | string | The symbol of the token. |
web3Entry_ | address | The address of the Web3Entry contract. |
mint
Mints a Linklist NFT to the specified character with linkType. This can only be called by web3Entry.
function mint(uint256 characterId, bytes32 linkType) external override onlyWeb3Entry returns (uint256 tokenId);
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | The character ID to mint to. |
linkType | bytes32 | The type of link. |
Returns
Name | Type | Description |
---|---|---|
tokenId | uint256 | The minted token ID. |
burn
Burns a Linklist NFT.
Only web3Entry can burn the Linklist NFT.
function burn(uint256 tokenId) external override onlyWeb3Entry;
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID to burn. |
setUri
Sets URI for a linklist.
You can set any URI for your linklist, and the functionality of this URI is undetermined and expandable. One scenario that comes to mind is setting a cover for your liked notes or following list in your bookmarks.
function setUri(uint256 tokenId, string memory uri) external override onlyExistingToken(tokenId);
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID to set URI. |
uri | string | The new URI to set. |
setLinkType
Sets the link type of the linklist NFT.
function setLinkType(uint256 tokenId, bytes32 linkType) external override onlyWeb3Entry onlyExistingToken(tokenId);
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist to set. |
linkType | bytes32 | The link type to set. |
addLinkingCharacterId
Adds a linked character to a linklist.
function addLinkingCharacterId(uint256 tokenId, uint256 toCharacterId) external override onlyWeb3Entry;
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist. |
toCharacterId | uint256 | The character ID to link. |
removeLinkingCharacterId
Removes a linked character from a linklist.
function removeLinkingCharacterId(uint256 tokenId, uint256 toCharacterId) external override onlyWeb3Entry;
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist. |
toCharacterId | uint256 | The character ID to remove. |
addLinkingNote
Adds a linked note to a linklist.
function addLinkingNote(uint256 tokenId, uint256 toCharacterId, uint256 toNoteId)
external
override
onlyWeb3Entry
returns (bytes32);
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist. |
toCharacterId | uint256 | The character ID to link. |
toNoteId | uint256 | The note ID to link. |
Returns
Name | Type | Description |
---|---|---|
<none> | bytes32 | linkKey The link key. |
removeLinkingNote
Removes a linked note from a linklist.
function removeLinkingNote(uint256 tokenId, uint256 toCharacterId, uint256 toNoteId) external override onlyWeb3Entry;
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist. |
toCharacterId | uint256 | The character ID to remove. |
toNoteId | uint256 | The note ID to remove. |
addLinkingERC721
Adds a linked ERC721 to a linklist.
function addLinkingERC721(uint256 tokenId, address tokenAddress, uint256 erc721TokenId)
external
override
onlyWeb3Entry
returns (bytes32);
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist. |
tokenAddress | address | The address of ERC721 contract. |
erc721TokenId | uint256 | The token ID of ERC721. |
Returns
Name | Type | Description |
---|---|---|
<none> | bytes32 | linkKey The link key of ERC721. |
removeLinkingERC721
Removes a linked ERC721 from a linklist.
function removeLinkingERC721(uint256 tokenId, address tokenAddress, uint256 erc721TokenId)
external
override
onlyWeb3Entry;
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist. |
tokenAddress | address | The address of ERC721 contract. |
erc721TokenId | uint256 | The token ID of ERC721. |
addLinkingAddress
Adds a linked address to a linklist.
function addLinkingAddress(uint256 tokenId, address ethAddress) external override onlyWeb3Entry;
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist. |
ethAddress | address | The address to link. |
removeLinkingAddress
Removes a linked address from a linklist.
function removeLinkingAddress(uint256 tokenId, address ethAddress) external override onlyWeb3Entry;
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist. |
ethAddress | address | The address to remove. |
addLinkingAnyUri
Adds a linked anyURI to a linklist.
function addLinkingAnyUri(uint256 tokenId, string memory toUri) external override onlyWeb3Entry returns (bytes32);
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist. |
toUri | string | The anyURI to link. |
Returns
Name | Type | Description |
---|---|---|
<none> | bytes32 | linkKey The link key of anyURI. |
removeLinkingAnyUri
Removes a linked anyURI from a linklist.
function removeLinkingAnyUri(uint256 tokenId, string memory toUri) external override onlyWeb3Entry;
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist. |
toUri | string | The anyURI to remove. |
addLinkingLinklistId
Adds a linked linklist to a linklist.
function addLinkingLinklistId(uint256 tokenId, uint256 linklistId) external override onlyWeb3Entry;
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist. |
linklistId | uint256 | The linklist ID to link. |
removeLinkingLinklistId
Removes a linked linklist from a linklist.
function removeLinkingLinklistId(uint256 tokenId, uint256 linklistId) external override onlyWeb3Entry;
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist. |
linklistId | uint256 | The linklist ID to remove. |
getLinkingCharacterIds
Returns the linked character IDs of the linklist NFT.
function getLinkingCharacterIds(uint256 tokenId)
external
view
override
onlyExistingToken(tokenId)
returns (uint256[] memory);
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist to check. |
Returns
Name | Type | Description |
---|---|---|
<none> | uint256[] | The linked character IDs. |
getLinkingCharacterListLength
Returns the length of linked character IDs of the linklist NFT.
function getLinkingCharacterListLength(uint256 tokenId)
external
view
override
onlyExistingToken(tokenId)
returns (uint256);
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist to check. |
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | The length of linked character IDs . |
getOwnerCharacterId
Returns the character ID who owns the linklist NFT.
function getOwnerCharacterId(uint256 tokenId) external view override onlyExistingToken(tokenId) returns (uint256);
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist to check. |
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | The character ID who owns the linklist NFT. |
getLinkingNotes
Returns the linked notes of the linklist NFT.
function getLinkingNotes(uint256 tokenId)
external
view
override
onlyExistingToken(tokenId)
returns (DataTypes.NoteStruct[] memory results);
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist to check. |
Returns
Name | Type | Description |
---|---|---|
results | DataTypes.NoteStruct[] | The linked notes. |
getLinkingNote
Return the linked note of the linklist NFT by linkKey.
function getLinkingNote(bytes32 linkKey) external view override returns (DataTypes.NoteStruct memory);
Parameters
Name | Type | Description |
---|---|---|
linkKey | bytes32 | The link key of the note. |
Returns
Name | Type | Description |
---|---|---|
<none> | DataTypes.NoteStruct | The linked note. |
getLinkingNoteListLength
Returns the length of linked notes of the linklist NFT.
function getLinkingNoteListLength(uint256 tokenId)
external
view
override
onlyExistingToken(tokenId)
returns (uint256);
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist to check. |
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | The length of linked notes. |
getLinkingERC721s
Returns the linked ERC721s of the linklist NFT.
function getLinkingERC721s(uint256 tokenId)
external
view
override
onlyExistingToken(tokenId)
returns (DataTypes.ERC721Struct[] memory results);
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist to check. |
Returns
Name | Type | Description |
---|---|---|
results | DataTypes.ERC721Struct[] | The linked ERC721s. |
getLinkingERC721
Return the linked ERC721 of the linklist NFT by linkKey.
function getLinkingERC721(bytes32 linkKey) external view override returns (DataTypes.ERC721Struct memory);
Parameters
Name | Type | Description |
---|---|---|
linkKey | bytes32 | The link key of the ERC721. |
Returns
Name | Type | Description |
---|---|---|
<none> | DataTypes.ERC721Struct | The linked ERC721. |
getLinkingERC721ListLength
Returns the length of linked ERC721s of the linklist NFT.
function getLinkingERC721ListLength(uint256 tokenId)
external
view
override
onlyExistingToken(tokenId)
returns (uint256);
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist to check. |
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | The length of linked ERC721s. |
getLinkingAddresses
Returns the linked addresses of the linklist NFT.
function getLinkingAddresses(uint256 tokenId)
external
view
override
onlyExistingToken(tokenId)
returns (address[] memory);
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist to check. |
Returns
Name | Type | Description |
---|---|---|
<none> | address[] | The linked addresses. |
getLinkingAddressListLength
Returns the linked address of the linklist NFT by linkKey.
function getLinkingAddressListLength(uint256 tokenId)
external
view
override
onlyExistingToken(tokenId)
returns (uint256);
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist to check. |
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | The length of linked address. |
getLinkingAnyUris
Returns the linked anyURIs of the linklist NFT.
function getLinkingAnyUris(uint256 tokenId)
external
view
override
onlyExistingToken(tokenId)
returns (string[] memory results);
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist to check. |
Returns
Name | Type | Description |
---|---|---|
results | string[] | The linked anyURIs. |
getLinkingAnyUri
Return the linked anyURI of the linklist NFT by linkKey.
function getLinkingAnyUri(bytes32 linkKey) external view override returns (string memory);
Parameters
Name | Type | Description |
---|---|---|
linkKey | bytes32 | The link key of the anyURI. |
Returns
Name | Type | Description |
---|---|---|
<none> | string | The linked anyURI. |
getLinkingAnyUriKeys
Returns the length of linked anyURIs of the linklist NFT.
function getLinkingAnyUriKeys(uint256 tokenId)
external
view
override
onlyExistingToken(tokenId)
returns (bytes32[] memory);
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist to check. |
Returns
Name | Type | Description |
---|---|---|
<none> | bytes32[] | The length of linked anyURIs. |
getLinkingAnyListLength
Returns the length of linked Uris of the linklist NFT.
function getLinkingAnyListLength(uint256 tokenId) external view override onlyExistingToken(tokenId) returns (uint256);
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist to check. |
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | The length of linked Uris. |
getLinkingLinklistIds
Returns the linked linklists of the linklist NFT.
function getLinkingLinklistIds(uint256 tokenId)
external
view
override
onlyExistingToken(tokenId)
returns (uint256[] memory);
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist to check. |
Returns
Name | Type | Description |
---|---|---|
<none> | uint256[] | The linked linklists. |
getLinkingLinklistLength
Return the length of linked linklist of the linklist NFT.
function getLinkingLinklistLength(uint256 tokenId)
external
view
override
onlyExistingToken(tokenId)
returns (uint256);
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist to check. |
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | The length of linked linklist. |
getCurrentTakeOver
function getCurrentTakeOver(uint256 tokenId) external view override returns (uint256);
getLinkType
Returns the link type of the linklist NFT.
function getLinkType(uint256 tokenId) external view override onlyExistingToken(tokenId) returns (bytes32);
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist to check. |
Returns
Name | Type | Description |
---|---|---|
<none> | bytes32 | The link type. |
Uri
Returns the URI of the linklist NFT.
function Uri(uint256 tokenId) external view override onlyExistingToken(tokenId) returns (string memory);
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of linklist to check. |
Returns
Name | Type | Description |
---|---|---|
<none> | string | The URI of the linklist NFT. |
characterOwnerOf
Returns the character ID who owns the Linklist NFT.
function characterOwnerOf(uint256 tokenId) external view override onlyExistingToken(tokenId) returns (uint256);
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID to check. |
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | The character ID. |
totalSupply
Returns the total supply of the Linklist NFTs.
function totalSupply() external view override returns (uint256);
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | The total supply of the Linklist NFTs. |
balanceOf
Returns the balance of the character.
function balanceOf(uint256 characterId) external view override returns (uint256);
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | The character ID to check. |
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | uint256 The balance of the character. |
balanceOf
Returns the balance of the character.
function balanceOf(address account) external view override returns (uint256 balance);
Parameters
Name | Type | Description |
---|---|---|
account | address |
Returns
Name | Type | Description |
---|---|---|
balance | uint256 | uint256 The balance of the character. |
ownerOf
Returns the owner of the tokenId
token.
function ownerOf(uint256 tokenId) external view override onlyExistingToken(tokenId) returns (address);
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID to check. |
Returns
Name | Type | Description |
---|---|---|
<none> | address | The owner of the tokenId token. |
_ownerOf
function _ownerOf(uint256 tokenId) internal view returns (address);
Events
Transfer
event Transfer(address indexed from, uint256 indexed characterId, uint256 indexed tokenId);
Burn
event Burn(uint256 indexed from, uint256 indexed tokenId);
UriSet
event UriSet(uint256 indexed tokenId, string uri);
LinkTypeSet
event LinkTypeSet(uint256 indexed tokenId, bytes32 indexed newlinkType);
MintNFT
Inherits: NFTBase, IMintNFT, ERC2981, Initializable
State Variables
_characterId
uint256 internal _characterId;
_noteId
uint256 internal _noteId;
_web3Entry
address internal _web3Entry;
_tokenCounter
uint256 internal _tokenCounter;
_originalReceiver
mapping(uint256 => address) internal _originalReceiver;
Functions
onlyWeb3Entry
modifier onlyWeb3Entry();
onlyOwner
modifier onlyOwner();
initialize
Initialize the mint nft.
function initialize(
uint256 characterId_,
uint256 noteId_,
address web3Entry_,
string calldata name_,
string calldata symbol_
) external override initializer;
Parameters
Name | Type | Description |
---|---|---|
characterId_ | uint256 | The character ID of the note to initialize. |
noteId_ | uint256 | The note ID to initialize. |
web3Entry_ | address | The address of web3Entry contract. |
name_ | string | The name to set for this NFT. |
symbol_ | string | The symbol to set for this NFT. |
mint
Mints a note NFT to the specified address. This can only be called by web3Entry, and is called upon note.
function mint(address to) external override onlyWeb3Entry returns (uint256 tokenId);
Parameters
Name | Type | Description |
---|---|---|
to | address | The address to mint the NFT to. |
Returns
Name | Type | Description |
---|---|---|
tokenId | uint256 | uint256 The minted token ID. |
setTokenRoyalty
Changes the royalty percentage of specific token ID for secondary sales. Can only be called by character owner of note.
function setTokenRoyalty(uint256 tokenId, address recipient, uint96 fraction) external override onlyOwner;
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID to set. |
recipient | address | The receive address. |
fraction | uint96 | The royalty percentage measured in basis points. Each basis point represents 0.01%. |
setDefaultRoyalty
Changes the default royalty percentage for secondary sales. Can only be called by character owner of note.
function setDefaultRoyalty(address recipient, uint96 fraction) external override onlyOwner;
Parameters
Name | Type | Description |
---|---|---|
recipient | address | The receive address. |
fraction | uint96 | The royalty percentage measured in basis points. Each basis point represents 0.01%. |
deleteDefaultRoyalty
Deletes the default royalty percentage. Can only be called by character owner of note.
function deleteDefaultRoyalty() external override onlyOwner;
originalReceiver
Returns the original receiver of specified NFT.
function originalReceiver(uint256 tokenId) external view override returns (address);
Returns
Name | Type | Description |
---|---|---|
<none> | address | The address of original receiver. |
getSourceNotePointer
Returns the source note pointer mapped to this note NFT.
function getSourceNotePointer() external view override returns (uint256 characterId, uint256 noteId);
Returns
Name | Type | Description |
---|---|---|
characterId | uint256 | The character ID. |
noteId | uint256 | The note ID. |
supportsInterface
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC2981, ERC721Enumerable) returns (bool);
totalSupply
function totalSupply() public view override returns (uint256);
tokenURI
function tokenURI(uint256 tokenId) public view override returns (string memory uri);
Web3Entry
Inherits: IWeb3Entry, Multicall, NFTBase, Web3EntryStorage, Initializable, Web3EntryExtendStorage
State Variables
REVISION
uint256 internal constant REVISION = 4;
Functions
validateCallerPermission
modifier validateCallerPermission(uint256 characterId, uint256 permissionId);
onlyExistingToken
modifier onlyExistingToken(uint256 tokenId);
initialize
Initializes the Web3Entry.
function initialize(
string calldata name_,
string calldata symbol_,
address linklist_,
address mintNFTImpl_,
address periphery_,
address newbieVilla_
) external override reinitializer(3);
Parameters
Name | Type | Description |
---|---|---|
name_ | string | The name to set for the web3Entry character NFT. |
symbol_ | string | The symbol to set for the web3Entry character NFT. |
linklist_ | address | The address of linklist contract to set. |
mintNFTImpl_ | address | The address of mintNFTImpl contract to set. |
periphery_ | address | The address of periphery contract to set. |
newbieVilla_ | address | The address of newbieVilla contract to set. |
grantOperatorPermissions
Grant an address as an operator and authorize it with custom permissions.
Every bit in permissionBitMap stands for a corresponding method in Web3Entry. more details in OP.sol.
function grantOperatorPermissions(uint256 characterId, address operator, uint256 permissionBitMap)
external
override
validateCallerPermission(characterId, OP.GRANT_OPERATOR_PERMISSIONS);
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | ID of your character that you want to authorize. |
operator | address | Address to grant operator permissions to. |
permissionBitMap | uint256 | Bitmap used for finer grained operator permissions controls. |
grantOperatorPermissionsWithSig
Grant an address as an operator and authorize it with custom permissions via signature.
Only character owner can call.
function grantOperatorPermissionsWithSig(
uint256 characterId,
address operator,
uint256 permissionBitMap,
DataTypes.EIP712Signature calldata signature
) external override;
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | ID of your character that you want to authorize. |
operator | address | Address to grant operator permissions to. |
permissionBitMap | uint256 | Bitmap used for finer grained operator permissions controls. |
signature | DataTypes.EIP712Signature | The EIP712Signature struct containing the character owner's signature. |
grantOperators4Note
Grant operators allowlist and blocklist roles of a note.
function grantOperators4Note(
uint256 characterId,
uint256 noteId,
address[] calldata blocklist,
address[] calldata allowlist
) external override validateCallerPermission(characterId, OP.GRANT_OPERATORS_FOR_NOTE);
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | ID of character that you want to set. |
noteId | uint256 | ID of note that you want to set. |
blocklist | address[] | blocklist addresses that you want to grant. |
allowlist | address[] | allowlist addresses that you want to grant. |
createCharacter
This method creates a character with the given parameters to the given address.
function createCharacter(DataTypes.CreateCharacterData calldata vars) external override returns (uint256 characterId);
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.CreateCharacterData | The CreateCharacterData struct containing the following parameters: to : The address receiving the character.handle : The handle to set for the character.uri : The URI to set for the character metadata.linkModule : The link module to use, can be the zero address.linkModuleInitData : The link module initialization data, if any. |
setHandle
Sets new handle for a given character.
Owner permission only.
function setHandle(uint256 characterId, string calldata newHandle)
external
override
validateCallerPermission(characterId, OP.SET_HANDLE);
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | The character id to set new handle for. |
newHandle | string | New handle to set. |
setSocialToken
Sets a social token for a given character.
Owner permission only.
function setSocialToken(uint256 characterId, address tokenAddress)
external
override
validateCallerPermission(characterId, OP.SET_SOCIAL_TOKEN);
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | The characterId to set social token for. |
tokenAddress | address | Token address to be set. |
setPrimaryCharacterId
Sets a given character as primary.
Only character owner can call this function.
function setPrimaryCharacterId(uint256 characterId) external override;
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | The character id to to be set. |
setCharacterUri
Sets a new URI for a given character.
function setCharacterUri(uint256 characterId, string calldata newUri)
external
override
validateCallerPermission(characterId, OP.SET_CHARACTER_URI);
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | The characterId to to be set. |
newUri | string | New URI to be set. |
setLinklistUri
Sets a new metadataURI for a given link list.
function setLinklistUri(uint256 linklistId, string calldata uri) external override;
Parameters
Name | Type | Description |
---|---|---|
linklistId | uint256 | |
uri | string | The metadata uri to set. |
setLinklistType
Sets a link type for a given linklist.
Emits a {DetachLinklist} event and a {AttachLinklist} event from web3Entry contract..
Emits a {LinkTypeSet} event from linklist contract.
Linklist is the group of all linking objects with the same link type, like "like".
Each character can only have one linklist for each link type.
It will fail if you try to set a link type which is already set for some linklist owned by the same character.
function setLinklistType(uint256 linklistId, bytes32 linkType) external override;
Parameters
Name | Type | Description |
---|---|---|
linklistId | uint256 | |
linkType | bytes32 | The link type to set. |
linkCharacter
Links a character with the given parameters.
function linkCharacter(DataTypes.linkCharacterData calldata vars)
external
override
onlyExistingToken(vars.toCharacterId)
validateCallerPermission(vars.fromCharacterId, OP.LINK_CHARACTER);
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.linkCharacterData | The linkCharacterData struct containing the linking parameters:fromCharacterId : The character ID to sponsor a link action.toCharacterId : The character ID to be linked.linkType : The link type, like "follow", which is a bytes32 format.data : The data passed to the link module to use, if any. |
unlinkCharacter
Unlinks a character with the given parameters.
function unlinkCharacter(DataTypes.unlinkCharacterData calldata vars)
external
override
validateCallerPermission(vars.fromCharacterId, OP.UNLINK_CHARACTER);
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.unlinkCharacterData | The unlinkCharacterData struct containing the unlinking parameters: fromCharacterId : The character ID to sponsor a unlink action.toCharacterId : The character ID to be unlinked.linkType : The link type, like "follow", which is a bytes32 format. |
createThenLinkCharacter
Create a character and then link it.
function createThenLinkCharacter(DataTypes.createThenLinkCharacterData calldata vars)
external
override
validateCallerPermission(vars.fromCharacterId, OP.CREATE_THEN_LINK_CHARACTER)
returns (uint256 characterId);
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.createThenLinkCharacterData | The createThenLinkCharacterData struct containing the parameters:fromCharacterId : The character ID to sponsor a link action.to : The address to receive the new character nft.linkType : The link type, like "follow", which is a bytes32 format. |
linkNote
Links a note with the given parameters.
function linkNote(DataTypes.linkNoteData calldata vars)
external
override
validateCallerPermission(vars.fromCharacterId, OP.LINK_NOTE);
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.linkNoteData | The linkNoteData struct containing the linking parameters:fromCharacterId : The character ID to sponsor a link action.toCharacterId : The character ID of note to be linked.toNoteId : The note ID of note to be linked.linkType : The link type, like "like", which is a bytes32 format.data : The data passed to the link module to use, if any. |
unlinkNote
UnLinks a note with the given parameters.
function unlinkNote(DataTypes.unlinkNoteData calldata vars)
external
override
validateCallerPermission(vars.fromCharacterId, OP.UNLINK_NOTE);
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.unlinkNoteData | The unlinkNoteData struct containing the unlinking parameters:fromCharacterId : The character ID to sponsor a unlink action.toCharacterId : The character ID of note to be unlinked.toNoteId : The note ID of note to be unlinked.linkType : The link type, like "like", which is a bytes32 format. |
linkERC721
Links an ERC721 with the given parameters.
function linkERC721(DataTypes.linkERC721Data calldata vars)
external
override
validateCallerPermission(vars.fromCharacterId, OP.LINK_ERC721);
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.linkERC721Data | The linkERC721Data struct containing the linking parameters:fromCharacterId : The character ID to sponsor a link action.tokenAddress : The token address of ERC721 to be linked.tokenId : The token ID of ERC721 to be linked.linkType : The link type, like "like", which is a bytes32 format.data : The data passed to the link module to use, if any. |
unlinkERC721
Unlinks an ERC721 with the given parameters.
function unlinkERC721(DataTypes.unlinkERC721Data calldata vars)
external
override
validateCallerPermission(vars.fromCharacterId, OP.UNLINK_ERC721);
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.unlinkERC721Data | The unlinkERC721Data struct containing the unlinking parameters:fromCharacterId : The character ID to sponsor a unlink action.tokenAddress : The token address of ERC721 to be unlinked.tokenId : The token ID of ERC721 to be unlinked.linkType : The link type, like "like", which is a bytes32 format. |
linkAddress
Links an address with the given parameters.
function linkAddress(DataTypes.linkAddressData calldata vars)
external
override
validateCallerPermission(vars.fromCharacterId, OP.LINK_ADDRESS);
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.linkAddressData | The linkAddressData struct containing the linking parameters:fromCharacterId : The character ID to sponsor a link action.ethAddress : The address to be linked.linkType : The link type, like "like", which is a bytes32 format.data : The data passed to the link module to use, if any. |
unlinkAddress
Unlinks an address with the given parameters.
function unlinkAddress(DataTypes.unlinkAddressData calldata vars)
external
override
validateCallerPermission(vars.fromCharacterId, OP.UNLINK_ADDRESS);
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.unlinkAddressData | The unlinkAddressData struct containing the unlinking parameters:fromCharacterId : The character ID to sponsor a unlink action.ethAddress : The address to be unlinked.linkType : The link type, like "like", which is a bytes32 format. |
linkAnyUri
Links any uri with the given parameters.
function linkAnyUri(DataTypes.linkAnyUriData calldata vars)
external
override
validateCallerPermission(vars.fromCharacterId, OP.LINK_ANYURI);
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.linkAnyUriData | The linkAnyUriData struct containing the linking parameters:fromCharacterId : The character ID to sponsor a link action.toUri : The uri to be linked.linkType : The link type, like "like", which is a bytes32 format.data : The data passed to the link module to use, if any. |
unlinkAnyUri
Unlinks any uri with the given parameters.
function unlinkAnyUri(DataTypes.unlinkAnyUriData calldata vars)
external
override
validateCallerPermission(vars.fromCharacterId, OP.UNLINK_ANYURI);
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.unlinkAnyUriData | The unlinkAnyUriData struct containing the unlinking parameters:fromCharacterId : The character ID to sponsor a unlink action.toUri : The uri to be unlinked.linkType : The link type, like "like", which is a bytes32 format. |
linkLinklist
Links a linklist with the given parameters.
function linkLinklist(DataTypes.linkLinklistData calldata vars)
external
override
validateCallerPermission(vars.fromCharacterId, OP.LINK_LINKLIST);
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.linkLinklistData | The linkLinklistData struct containing the linking parameters:fromCharacterId : The character ID to sponsor a link action.toLinkListId : The linklist ID to be linked.linkType : The link type, like "like", which is a bytes32 format.data : The data passed to the link module to use, if any. |
unlinkLinklist
Unlinks a linklist with the given parameters.
function unlinkLinklist(DataTypes.unlinkLinklistData calldata vars)
external
override
validateCallerPermission(vars.fromCharacterId, OP.UNLINK_LINKLIST);
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.unlinkLinklistData | The unlinkLinklistData struct containing the unlinking parameters:fromCharacterId : The character ID to sponsor a unlink action.toLinkListId : The linklist ID to be unlinked.linkType : The link type, like "like", which is a bytes32 format. |
setLinkModule4Character
Sets a link module for a given character.
function setLinkModule4Character(DataTypes.setLinkModule4CharacterData calldata vars)
external
override
validateCallerPermission(vars.characterId, OP.SET_LINK_MODULE_FOR_CHARACTER);
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.setLinkModule4CharacterData | The setLinkModule4CharacterData struct containing the parameters:characterId : The character ID to set for.linkModule : The address of link module contract to set.linkModuleInitData : The data passed to the link module to use, if any. |
setLinkModule4Note
Sets a link module for a given note.
function setLinkModule4Note(DataTypes.setLinkModule4NoteData calldata vars)
external
override
validateCallerPermission(vars.characterId, OP.SET_LINK_MODULE_FOR_NOTE);
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.setLinkModule4NoteData | The setLinkModule4NoteData struct containing the parameters:characterId : The character ID to set for.noteId : The note ID to set for.linkModule : The address of link module contract to set.linkModuleInitData : The data passed to the link module to use, if any. |
mintNote
Mints an nft with the given note.
function mintNote(DataTypes.MintNoteData calldata vars) external override returns (uint256 tokenId);
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.MintNoteData | The MintNoteData struct containing the minting parameters:characterId : The character ID of the note.noteId : The note ID of the note.to : The address to receive the minted nft.data : The data passed to the mint module to use, if any. |
setMintModule4Note
Sets a mint module for the given note.
function setMintModule4Note(DataTypes.setMintModule4NoteData calldata vars)
external
override
validateCallerPermission(vars.characterId, OP.SET_MINT_MODULE_FOR_NOTE);
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.setMintModule4NoteData | The setMintModule4NoteData struct containing the setting parameters:characterId : The character ID of the note.noteId : The note ID of the note.mintModule : The address of mint module to set.mintModuleInitData : The data passed to the mint module to init, if any. |
postNote
Posts a note with the given parameters.
function postNote(DataTypes.PostNoteData calldata vars)
external
override
validateCallerPermission(vars.characterId, OP.POST_NOTE)
returns (uint256 noteId);
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.PostNoteData | The postNoteData struct containing the posting parameters:characterId : The character ID to post to.contentUri : The uri to set for the new post.linkModule : The address of link module to set for the new post.linkModuleInitData : The data passed to the link module to init, if any.mintModule : The address of mint module to set for the new post.mintModuleInitData : The data passed to the mint module to init, if any. |
setNoteUri
Set URI for a note.
function setNoteUri(uint256 characterId, uint256 noteId, string calldata newUri) external override;
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | The character ID of the note owner. |
noteId | uint256 | The ID of the note to set. |
newUri | string | The new URI. |
lockNote
Lock a note and put it into a immutable state where no modifications are allowed. Locked notes are usually assumed as final versions.
function lockNote(uint256 characterId, uint256 noteId)
external
override
validateCallerPermission(characterId, OP.LOCK_NOTE);
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | The character ID of the note owner. |
noteId | uint256 | The ID of the note to lock. |
deleteNote
Delete a note.
Deleting a note doesn't essentially mean that the txs or contents are being removed due to the
immutability of blockchain itself, but the deleted notes will be tagged as deleted
after calling deleteNote
.
function deleteNote(uint256 characterId, uint256 noteId)
external
override
validateCallerPermission(characterId, OP.DELETE_NOTE);
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | The character ID of the note owner. |
noteId | uint256 | The ID of the note to delete. |
postNote4Character
Posts a note for a given character.
function postNote4Character(DataTypes.PostNoteData calldata vars, uint256 toCharacterId)
external
override
validateCallerPermission(vars.characterId, OP.POST_NOTE_FOR_CHARACTER)
returns (uint256 noteId);
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.PostNoteData | The postNoteData struct containing the posting parameters:characterId : The character ID to post to.contentUri : The uri to set for the new post.linkModule : The address of link module to set for the new post.linkModuleInitData : The data passed to the link module to init, if any.mintModule : The address of mint module to set for the new post.mintModuleInitData : The data passed to the mint module to init, if any. |
toCharacterId | uint256 | The target character ID. |
Returns
Name | Type | Description |
---|---|---|
noteId | uint256 | The note ID of the new post. |
postNote4Address
Posts a note for a given address.
function postNote4Address(DataTypes.PostNoteData calldata vars, address ethAddress)
external
override
validateCallerPermission(vars.characterId, OP.POST_NOTE_FOR_ADDRESS)
returns (uint256 noteId);
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.PostNoteData | The postNoteData struct containing the posting parameters:characterId : The character ID to post to.contentUri : The uri to set for the new post.linkModule : The address of link module to set for the new post.linkModuleInitData : The data passed to the link module to init, if any.mintModule : The address of mint module to set for the new post.mintModuleInitData : The data passed to the mint module to init, if any. |
ethAddress | address | The target address. |
Returns
Name | Type | Description |
---|---|---|
noteId | uint256 | The note ID of the new post. |
postNote4Linklist
Posts a note for a given linklist.
function postNote4Linklist(DataTypes.PostNoteData calldata vars, uint256 toLinklistId)
external
override
validateCallerPermission(vars.characterId, OP.POST_NOTE_FOR_LINKLIST)
returns (uint256 noteId);
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.PostNoteData | The postNoteData struct containing the posting parameters:characterId : The character ID to post to.contentUri : The uri to set for the new post.linkModule : The address of link module to set for the new post.linkModuleInitData : The data passed to the link module to init, if any.mintModule : The address of mint module to set for the new post.mintModuleInitData : The data passed to the mint module to init, if any. |
toLinklistId | uint256 | The target linklist. |
Returns
Name | Type | Description |
---|---|---|
noteId | uint256 | The note ID of the new post. |
postNote4Note
Posts a note for a given note.
function postNote4Note(DataTypes.PostNoteData calldata vars, DataTypes.NoteStruct calldata note)
external
override
validateCallerPermission(vars.characterId, OP.POST_NOTE_FOR_NOTE)
returns (uint256 noteId);
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.PostNoteData | The postNoteData struct containing the posting parameters:characterId : The character ID to post to.contentUri : The uri to set for the new post.linkModule : The address of link module to set for the new post.linkModuleInitData : The data passed to the link module to init, if any.mintModule : The address of mint module to set for the new post.mintModuleInitData : The data passed to the mint module to init, if any. |
note | DataTypes.NoteStruct | The target note struct containing the parameters:characterId : The character ID of target note.noteId : The note ID of target note. |
Returns
Name | Type | Description |
---|---|---|
noteId | uint256 | The note ID of the new post. |
postNote4ERC721
Posts a note for a given ERC721.
function postNote4ERC721(DataTypes.PostNoteData calldata vars, DataTypes.ERC721Struct calldata erc721)
external
override
validateCallerPermission(vars.characterId, OP.POST_NOTE_FOR_ERC721)
returns (uint256 noteId);
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.PostNoteData | The postNoteData struct containing the posting parameters:characterId : The character ID to post to.contentUri : The uri to set for the new post.linkModule : The address of link module to set for the new post.linkModuleInitData : The data passed to the link module to init, if any.mintModule : The address of mint module to set for the new post.mintModuleInitData : The data passed to the mint module to init, if any. |
erc721 | DataTypes.ERC721Struct | The target ERC721 struct containing the parameters:tokenAddress : The token address of target ERC721.erc721TokenId : The token ID of target ERC721. |
Returns
Name | Type | Description |
---|---|---|
noteId | uint256 | The note ID of the new post. |
postNote4AnyUri
Posts a note for a given uri.
function postNote4AnyUri(DataTypes.PostNoteData calldata vars, string calldata uri)
external
override
validateCallerPermission(vars.characterId, OP.POST_NOTE_FOR_ANYURI)
returns (uint256 noteId);
Parameters
Name | Type | Description |
---|---|---|
vars | DataTypes.PostNoteData | The postNoteData struct containing the posting parameters:characterId : The character ID to post to.contentUri : The uri to set for the new post.linkModule : The address of link module to set for the new post.linkModuleInitData : The data passed to the link module to init, if any.mintModule : The address of mint module to set for the new post.mintModuleInitData : The data passed to the mint module to init, if any. |
uri | string | The target uri(could be an url link). |
Returns
Name | Type | Description |
---|---|---|
noteId | uint256 | The note ID of the new post. |
burnLinklist
Burns a linklist NFT.
It will burn the linklist NFT and remove the links from a character.
function burnLinklist(uint256 linklistId) external override;
Parameters
Name | Type | Description |
---|---|---|
linklistId | uint256 | The linklist ID to burn. |
getOperators
Get operator list of a character. This operator list has only a sole purpose, which is
keeping records of keys of operatorsPermissionBitMap
. Thus, addresses queried by this function
not always have operator permissions. Keep in mind don't use this function to check
authorizations!!!
function getOperators(uint256 characterId) external view override returns (address[] memory);
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | ID of your character that you want to check. |
Returns
Name | Type | Description |
---|---|---|
<none> | address[] | All keys of operatorsPermission4NoteBitMap. |
getOperatorPermissions
Get permission bitmap of an operator.
function getOperatorPermissions(uint256 characterId, address operator) external view override returns (uint256);
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | ID of character that you want to check. |
operator | address | Address to grant operator permissions to. |
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | Permission bitmap of this operator. |
getOperators4Note
Get operators blocklist and allowlist for a note.
function getOperators4Note(uint256 characterId, uint256 noteId)
external
view
override
returns (address[] memory blocklist, address[] memory allowlist);
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | ID of character to query. |
noteId | uint256 | ID of note to query. |
isOperatorAllowedForNote
Query if a operator has permission for a note.
function isOperatorAllowedForNote(uint256 characterId, uint256 noteId, address operator)
external
view
override
returns (bool);
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | ID of character that you want to query. |
noteId | uint256 | ID of note that you want to query. |
operator | address | Address to query. |
Returns
Name | Type | Description |
---|---|---|
<none> | bool | true if Operator has permission for a note, otherwise false. |
getPrimaryCharacterId
Returns primary character for a given account.
function getPrimaryCharacterId(address account) external view override returns (uint256);
Parameters
Name | Type | Description |
---|---|---|
account | address | The address to query. |
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | uint256 The primary character ID, which will be 0 if not mapped. |
isPrimaryCharacter
Returns whether or not a character is primary character.
function isPrimaryCharacter(uint256 characterId) external view override returns (bool);
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | The character ID to query. |
Returns
Name | Type | Description |
---|---|---|
<none> | bool | bool True if the character is primary, false otherwise. |
getCharacter
Returns the full character struct associated with a given character token ID.
function getCharacter(uint256 characterId)
external
view
override
onlyExistingToken(characterId)
returns (DataTypes.Character memory);
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | The token ID of the character to query. |
Returns
Name | Type | Description |
---|---|---|
<none> | DataTypes.Character | The full character struct of given character. |
getCharacterByHandle
Returns the full character struct associated with a given character handle.
function getCharacterByHandle(string calldata handle) external view override returns (DataTypes.Character memory);
Parameters
Name | Type | Description |
---|---|---|
handle | string | The handle of the character to query. |
Returns
Name | Type | Description |
---|---|---|
<none> | DataTypes.Character | The full character struct of given character. |
getHandle
Returns the handle of character with a given character.
function getHandle(uint256 characterId) external view override onlyExistingToken(characterId) returns (string memory);
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | The token ID of the character to query. |
Returns
Name | Type | Description |
---|---|---|
<none> | string | The handle of given character. |
getCharacterUri
Returns the uri of character with a given character.
function getCharacterUri(uint256 characterId) external view override returns (string memory);
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | The token ID of the character to query. |
Returns
Name | Type | Description |
---|---|---|
<none> | string | The uri of given character. |
getNote
Returns the full note struct associated with a given note.
function getNote(uint256 characterId, uint256 noteId) external view override returns (DataTypes.Note memory);
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | The token ID of the character to query. |
noteId | uint256 | The token ID of the note to query. |
Returns
Name | Type | Description |
---|---|---|
<none> | DataTypes.Note | The full note struct of given note. |
getLinklistUri
Returns the uri of linklist with a given linklist.
function getLinklistUri(uint256 tokenId) external view override returns (string memory);
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID of the linklist to query. |
Returns
Name | Type | Description |
---|---|---|
<none> | string | string The uri of given linklist. |
getLinklistId
Returns the token ID of linklist with a given character and linkType.
function getLinklistId(uint256 characterId, bytes32 linkType) external view override returns (uint256);
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | The token ID of the character to query. |
linkType | bytes32 | The linkType. |
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | The token ID of linklist. |
getLinklistType
Returns the linkType of linklist with a given linklist.
function getLinklistType(uint256 linkListId) external view override returns (bytes32);
Parameters
Name | Type | Description |
---|---|---|
linkListId | uint256 | The token ID of the linklist to query. |
Returns
Name | Type | Description |
---|---|---|
<none> | bytes32 | bytes32 The linkType of given linklist. |
getLinklistContract
Returns the address of linklist contract.
function getLinklistContract() external view override returns (address);
Returns
Name | Type | Description |
---|---|---|
<none> | address | The address of linklist contract. |
getDomainSeparator
Returns the domain separator for this NFT contract.
function getDomainSeparator() external view override returns (bytes32);
Returns
Name | Type | Description |
---|---|---|
<none> | bytes32 | bytes32 The domain separator. |
nonces
Returns the current nonce for owner
. This value must be included
whenever a signature is generated by grantOperatorPermissionsWithSig
.
Every successful call to grantOperatorPermissionsWithSig
increases owner
's nonce by one. This
prevents a signature from being used multiple times.
function nonces(address owner) external view override returns (uint256);
Parameters
Name | Type | Description |
---|---|---|
owner | address | The owner address to query. |
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | uint256 The current nonce for owner . |
getRevision
Returns the revision number of web3Entry contract.
function getRevision() external pure override returns (uint256);
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | The the revision number of web3Entry contract. |
burn
Burns a web3Entry character nft.
function burn(uint256 tokenId) public virtual override;
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | The token ID to burn. |
tokenURI
Returns the associated URI with a given character.
function tokenURI(uint256 characterId) public view override onlyExistingToken(characterId) returns (string memory);
Parameters
Name | Type | Description |
---|---|---|
characterId | uint256 | The character ID to query. |
Returns
Name | Type | Description |
---|---|---|
<none> | string | The token URI. |
_createCharacter
function _createCharacter(DataTypes.CreateCharacterData memory vars, bool validateHandle)
internal
returns (uint256 characterId);
_beforeTokenTransfer
Operators will be reset to blank before the characters are transferred in order to grant the whole control power to receivers of character transfers. If character is transferred from newbieVilla contract, don't clear operators. Permissions4Note is left unset, because permissions for notes are always stricter than default.
function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual override;
_afterTokenTransfer
function _afterTokenTransfer(address from, address to, uint256 tokenId) internal virtual override;
_nextNoteId
function _nextNoteId(uint256 characterId) internal returns (uint256);
_isOperatorAllowedForNote
It will first check note permission, and then check operators permission.
function _isOperatorAllowedForNote(uint256 characterId, uint256 noteId, address operator)
internal
view
returns (bool);
_validateCallerPermission
function _validateCallerPermission(uint256 characterId, uint256 permissionId) internal view;
_callerIsCharacterOwner
function _callerIsCharacterOwner(address caller, uint256 characterId) internal view returns (bool);
_validateCallerPermission4Note
function _validateCallerPermission4Note(uint256 characterId, uint256 noteId) internal view;
_checkBit
_checkBit checks if the value of the i'th bit of x is 1
function _checkBit(uint256 x, uint256 i) internal pure returns (bool);
_addressToHexString
_addressToHexString converts an address to its ASCII `string hexadecimal representation.
function _addressToHexString(address addr) internal pure returns (string memory);
_handleHash
function _handleHash(string memory handle) internal pure returns (bytes32);