SoulLinker
Masa Finance
Soul linker
Soul linker smart contract that let add links to a Soulbound token.
Methods
DEFAULT_ADMIN_ROLE
function DEFAULT_ADMIN_ROLE() external view returns (bytes32)
Returns
Name | Type | Description |
---|
_0 | bytes32 | undefined |
PROJECT_ADMIN_ROLE
function PROJECT_ADMIN_ROLE() external view returns (bytes32)
Returns
Name | Type | Description |
---|
_0 | bytes32 | undefined |
addLink
function addLink(address paymentMethod, uint256 readerIdentityId, uint256 ownerIdentityId, address token, uint256 tokenId, uint256 signatureDate, uint256 expirationDate, bytes signature) external payable
Stores the link, validating the signature of the given read link request
The token must be linked to this soul linker
Parameters
Name | Type | Description |
---|
paymentMethod | address | undefined |
readerIdentityId | uint256 | Id of the identity of the reader |
ownerIdentityId | uint256 | Id of the identity of the owner of the SBT |
token | address | Address of the SBT contract |
tokenId | uint256 | Id of the token |
signatureDate | uint256 | Signature date of the signature |
expirationDate | uint256 | Expiration date of the signature |
signature | bytes | Signature of the read link request made by the owner |
addSoulName
function addSoulName(contract ISoulName soulName) external nonpayable
Add a SoulName contract address linked to this soul store
The caller must have the admin role to call this function
Parameters
Name | Type | Description |
---|
soulName | contract ISoulName | Address of the SoulName contract |
defaultSoulName
function defaultSoulName(address) external view returns (bool exists, address token, uint256 tokenId)
Parameters
Name | Type | Description |
---|
_0 | address | undefined |
Returns
Name | Type | Description |
---|
exists | bool | undefined |
token | address | undefined |
tokenId | uint256 | undefined |
disablePaymentMethod
function disablePaymentMethod(address _paymentMethod) external nonpayable
Removes a token as a valid payment method
The caller must have the admin role to call this function
Parameters
Name | Type | Description |
---|
_paymentMethod | address | Token to remove |
eip712Domain
function eip712Domain() external view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
See {EIP-5267}. Available since v4.9.
Returns
Name | Type | Description |
---|
fields | bytes1 | undefined |
name | string | undefined |
version | string | undefined |
chainId | uint256 | undefined |
verifyingContract | address | undefined |
salt | bytes32 | undefined |
extensions | uint256[] | undefined |
enablePaymentMethod
function enablePaymentMethod(address _paymentMethod) external nonpayable
Adds a new token as a valid payment method
The caller must have the admin role to call this function
Parameters
Name | Type | Description |
---|
_paymentMethod | address | New token to add |
enabledPaymentMethod
function enabledPaymentMethod(address) external view returns (bool)
Parameters
Name | Type | Description |
---|
_0 | address | undefined |
Returns
Name | Type | Description |
---|
_0 | bool | undefined |
enabledPaymentMethods
function enabledPaymentMethods(uint256) external view returns (address)
Parameters
Name | Type | Description |
---|
_0 | uint256 | undefined |
Returns
Name | Type | Description |
---|
_0 | address | undefined |
getDefaultSoulName
function getDefaultSoulName(address owner) external view returns (string)
Returns the default soul name of an account
This function queries the default soul name of the specified account
Parameters
Name | Type | Description |
---|
owner | address | Address of the owner of the identities |
Returns
Name | Type | Description |
---|
_0 | string | Default soul name associated to the account |
getEnabledPaymentMethods
function getEnabledPaymentMethods() external view returns (address[])
Returns all available payment methods
Returns the address of all available payment methods
Returns
Name | Type | Description |
---|
_0 | address[] | Array of all enabled payment methods |
getIdentityId
function getIdentityId(address token, uint256 tokenId) external view returns (uint256)
Returns the identityId owned by the given token
The token must be linked to this soul linker
Parameters
Name | Type | Description |
---|
token | address | Address of the SBT contract |
tokenId | uint256 | Id of the token |
Returns
Name | Type | Description |
---|
_0 | uint256 | Id of the identity |
getLinkInfo
function getLinkInfo(address token, uint256 tokenId, uint256 readerIdentityId, uint256 signatureDate) external view returns (struct SoulLinker.LinkData)
Returns the information of link dates for a given SBT token and reader
Parameters
Name | Type | Description |
---|
token | address | Address of the SBT contract |
tokenId | uint256 | Id of the token |
readerIdentityId | uint256 | Id of the identity of the reader of the SBT |
signatureDate | uint256 | Signature date of the signature |
Returns
Name | Type | Description |
---|
_0 | SoulLinker.LinkData | linkData List of linked SBTs |
getLinkSignatureDates
function getLinkSignatureDates(address token, uint256 tokenId, uint256 readerIdentityId) external view returns (uint256[])
Returns the list of link signature dates for a given SBT token and reader
Parameters
Name | Type | Description |
---|
token | address | Address of the SBT contract |
tokenId | uint256 | Id of the token |
readerIdentityId | uint256 | Id of the identity of the reader of the SBT |
Returns
Name | Type | Description |
---|
_0 | uint256[] | List of linked SBTs |
getLinks
function getLinks(address token, uint256 tokenId) external view returns (struct SoulLinker.LinkKey[])
Returns the list of link signature dates for a given SBT token and reader
Parameters
Name | Type | Description |
---|
token | address | Address of the SBT contract |
tokenId | uint256 | Id of the token |
Returns
Name | Type | Description |
---|
_0 | SoulLinker.LinkKey[] | List of linked SBTs |
getPriceForAddLink
function getPriceForAddLink(address paymentMethod, address token) external view returns (uint256 price)
Returns the price for storing a link
Returns the current pricing for storing a link
Parameters
Name | Type | Description |
---|
paymentMethod | address | Address of token that user want to pay |
token | address | Token that user want to store link |
Returns
Name | Type | Description |
---|
price | uint256 | Current price for storing a link |
getPriceForAddLinkWithProtocolFee
function getPriceForAddLinkWithProtocolFee(address paymentMethod, address token) external view returns (uint256 price, uint256 protocolFee)
Returns the price for storing a link with protocol fee
Returns the current pricing for storing a link with protocol fee
Parameters
Name | Type | Description |
---|
paymentMethod | address | Address of token that user want to pay |
token | address | Token that user want to store link |
Returns
Name | Type | Description |
---|
price | uint256 | Current price for storing a link |
protocolFee | uint256 | Current protocol fee for storing a link |
getProtocolFee
function getProtocolFee(address paymentMethod, uint256 amount) external view returns (uint256)
Calculates the protocol fee added to the project fee
This method will calculate the protocol fee based on the payment method
Parameters
Name | Type | Description |
---|
paymentMethod | address | Address of token that user want to pay |
amount | uint256 | Price to be paid in the specified payment method |
Returns
Name | Type | Description |
---|
_0 | uint256 | undefined |
getProtocolFeeSub
function getProtocolFeeSub(uint256 amount) external view returns (uint256)
Calculates the protocol fee substracted from the amount
This method will calculate the protocol fee based on the payment method
Parameters
Name | Type | Description |
---|
amount | uint256 | Price to be paid in the specified payment method |
Returns
Name | Type | Description |
---|
_0 | uint256 | undefined |
getReaderLinks
function getReaderLinks(uint256 readerIdentityId) external view returns (struct SoulLinker.ReaderLink[])
Returns the list of links for a given reader identity id
Parameters
Name | Type | Description |
---|
readerIdentityId | uint256 | Id of the identity of the reader of the SBT |
Returns
Name | Type | Description |
---|
_0 | SoulLinker.ReaderLink[] | List of links for the reader |
getRoleAdmin
function getRoleAdmin(bytes32 role) external view returns (bytes32)
Returns the admin role that controls role
. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.
Parameters
Name | Type | Description |
---|
role | bytes32 | undefined |
Returns
Name | Type | Description |
---|
_0 | bytes32 | undefined |
getSBTConnections
function getSBTConnections(uint256 identityId, address token) external view returns (uint256[])
Returns the list of connected SBTs by a given SBT token
Parameters
Name | Type | Description |
---|
identityId | uint256 | Id of the identity |
token | address | Address of the SBT contract |
Returns
Name | Type | Description |
---|
_0 | uint256[] | List of connected SBTs |
getSBTConnections
function getSBTConnections(address owner, address token) external view returns (uint256[])
Returns the list of connected SBTs by a given SBT token
Parameters
Name | Type | Description |
---|
owner | address | Address of the owner of the identity |
token | address | Address of the SBT contract |
Returns
Name | Type | Description |
---|
_0 | uint256[] | List of connectec SBTs |
getSoulNames
function getSoulNames(uint256 tokenId) external view returns (string defaultName, string[] names)
Returns all the active soul names of an account
This function queries all the identity names of the specified identity Id
Parameters
Name | Type | Description |
---|
tokenId | uint256 | TokenId of the identity |
Returns
Name | Type | Description |
---|
defaultName | string | Default soul name of the account |
names | string[] | Array of soul names associated to the account |
getSoulNames
function getSoulNames(address owner) external view returns (string defaultName, string[] names)
Returns all the active soul names of an account
This function queries all the identity names of the specified account
Parameters
Name | Type | Description |
---|
owner | address | Address of the owner of the identities |
Returns
Name | Type | Description |
---|
defaultName | string | Default soul name of the account |
names | string[] | Array of soul names associated to the account |
grantRole
function grantRole(bytes32 role, address account) external nonpayable
Grants role
to account
. If account
had not been already granted role
, emits a {RoleGranted} event. Requirements: - the caller must have role
's admin role. May emit a {RoleGranted} event.
Parameters
Name | Type | Description |
---|
role | bytes32 | undefined |
account | address | undefined |
hasRole
function hasRole(bytes32 role, address account) external view returns (bool)
Returns true
if account
has been granted role
.
Parameters
Name | Type | Description |
---|
role | bytes32 | undefined |
account | address | undefined |
Returns
Name | Type | Description |
---|
_0 | bool | undefined |
isSoulName
function isSoulName(address) external view returns (bool)
Parameters
Name | Type | Description |
---|
_0 | address | undefined |
Returns
Name | Type | Description |
---|
_0 | bool | undefined |
masaToken
function masaToken() external view returns (address)
Returns
Name | Type | Description |
---|
_0 | address | undefined |
pause
function pause() external nonpayable
Pauses the smart contract
The caller must have the admin role to call this function
paused
function paused() external view returns (bool)
Returns true if the contract is paused, and false otherwise.
Returns
Name | Type | Description |
---|
_0 | bool | undefined |
projectFeeReceiver
function projectFeeReceiver() external view returns (address)
Returns
Name | Type | Description |
---|
_0 | address | undefined |
protocolFeeAmount
function protocolFeeAmount() external view returns (uint256)
Returns
Name | Type | Description |
---|
_0 | uint256 | undefined |
protocolFeePercent
function protocolFeePercent() external view returns (uint256)
Returns
Name | Type | Description |
---|
_0 | uint256 | undefined |
protocolFeePercentSub
function protocolFeePercentSub() external view returns (uint256)
Returns
Name | Type | Description |
---|
_0 | uint256 | undefined |
protocolFeeReceiver
function protocolFeeReceiver() external view returns (address)
Returns
Name | Type | Description |
---|
_0 | address | undefined |
removeSoulName
function removeSoulName(contract ISoulName soulName) external nonpayable
Remove a SoulName contract address linked to this soul store
The caller must have the admin role to call this function
Parameters
Name | Type | Description |
---|
soulName | contract ISoulName | Address of the SoulName contract |
renounceRole
function renounceRole(bytes32 role, address account) external nonpayable
Revokes role
from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked role
, emits a {RoleRevoked} event. Requirements: - the caller must be account
. May emit a {RoleRevoked} event.
Parameters
Name | Type | Description |
---|
role | bytes32 | undefined |
account | address | undefined |
revokeLink
function revokeLink(uint256 readerIdentityId, uint256 ownerIdentityId, address token, uint256 tokenId, uint256 signatureDate) external nonpayable
Revokes the link
The links can be revoked, wether the token is linked or not. The caller must be the owner of the token. The owner of the token can revoke a link even if the reader has not added it yet.
Parameters
Name | Type | Description |
---|
readerIdentityId | uint256 | Id of the identity of the reader |
ownerIdentityId | uint256 | Id of the identity of the owner of the SBT |
token | address | Address of the SBT contract |
tokenId | uint256 | Id of the token |
signatureDate | uint256 | Signature date of the signature |
revokeRole
function revokeRole(bytes32 role, address account) external nonpayable
Revokes role
from account
. If account
had been granted role
, emits a {RoleRevoked} event. Requirements: - the caller must have role
's admin role. May emit a {RoleRevoked} event.
Parameters
Name | Type | Description |
---|
role | bytes32 | undefined |
account | address | undefined |
setDefaultSoulName
function setDefaultSoulName(address token, uint256 tokenId) external nonpayable
Sets the default soul name for the owner
The caller must be the owner of the soul name.
Parameters
Name | Type | Description |
---|
token | address | Address of the SoulName contract |
tokenId | uint256 | TokenId of the soul name |
setMasaToken
function setMasaToken(address _masaToken) external nonpayable
Sets the utility token to pay the fee in (MASA)
The caller must have the admin role to call this function It can be set to address(0) to disable paying in MASA
Parameters
Name | Type | Description |
---|
_masaToken | address | New utility token to pay the fee in |
setProjectFeeReceiver
function setProjectFeeReceiver(address _projectFeeReceiver) external nonpayable
Set the project fee receiver wallet
The caller must have the admin or project admin role to call this function
Parameters
Name | Type | Description |
---|
_projectFeeReceiver | address | New project fee receiver wallet |
setProtocolFeeAmount
function setProtocolFeeAmount(uint256 _protocolFeeAmount) external nonpayable
Set the protocol fee amount
The caller must have the admin role to call this function
Parameters
Name | Type | Description |
---|
_protocolFeeAmount | uint256 | New protocol fee amount |
setProtocolFeePercent
function setProtocolFeePercent(uint256 _protocolFeePercent) external nonpayable
Set the protocol fee percent added to the project fee
The caller must have the admin role to call this function
Parameters
Name | Type | Description |
---|
_protocolFeePercent | uint256 | New protocol fee percent added to the project fee |
setProtocolFeePercentSub
function setProtocolFeePercentSub(uint256 _protocolFeePercentSub) external nonpayable
Set the protocol fee percent substracted from the amount
The caller must have the admin role to call this function
Parameters
Name | Type | Description |
---|
_protocolFeePercentSub | uint256 | New protocol fee percent substracted from the amount |
setProtocolFeeReceiver
function setProtocolFeeReceiver(address _protocolFeeReceiver) external nonpayable
Set the protocol fee wallet
The caller must have the admin role to call this function
Parameters
Name | Type | Description |
---|
_protocolFeeReceiver | address | New protocol fee wallet |
setSoulboundIdentity
function setSoulboundIdentity(contract ISoulboundIdentity _soulboundIdentity) external nonpayable
Sets the SoulboundIdentity contract address linked to this soul store
The caller must have the admin role to call this function
Parameters
Name | Type | Description |
---|
_soulboundIdentity | contract ISoulboundIdentity | Address of the SoulboundIdentity contract |
setStableCoin
function setStableCoin(address _stableCoin) external nonpayable
Sets the stable coin to pay the fee in (USDC)
The caller must have the admin role to call this function
Parameters
Name | Type | Description |
---|
_stableCoin | address | New stable coin to pay the fee in |
setSwapRouter
function setSwapRouter(address _swapRouter) external nonpayable
Sets the swap router address
The caller must have the admin role to call this function
Parameters
Name | Type | Description |
---|
_swapRouter | address | New swap router address |
setWrappedNativeToken
function setWrappedNativeToken(address _wrappedNativeToken) external nonpayable
Sets the wrapped native token address
The caller must have the admin role to call this function
Parameters
Name | Type | Description |
---|
_wrappedNativeToken | address | New wrapped native token address |
soulNames
function soulNames(uint256) external view returns (contract ISoulName)
Parameters
Name | Type | Description |
---|
_0 | uint256 | undefined |
Returns
Name | Type | Description |
---|
_0 | contract ISoulName | undefined |
soulboundIdentity
function soulboundIdentity() external view returns (contract ISoulboundIdentity)
Returns
Name | Type | Description |
---|
_0 | contract ISoulboundIdentity | undefined |
stableCoin
function stableCoin() external view returns (address)
Returns
Name | Type | Description |
---|
_0 | address | undefined |
supportsInterface
function supportsInterface(bytes4 interfaceId) external view returns (bool)
See {IERC165-supportsInterface}.
Parameters
Name | Type | Description |
---|
interfaceId | bytes4 | undefined |
Returns
Name | Type | Description |
---|
_0 | bool | undefined |
swapRouter
function swapRouter() external view returns (address)
Returns
Name | Type | Description |
---|
_0 | address | undefined |
unpause
function unpause() external nonpayable
Unpauses the smart contract
The caller must have the admin role to call this function
validateLink
function validateLink(uint256 readerIdentityId, uint256 ownerIdentityId, address token, uint256 tokenId, uint256 signatureDate) external view returns (bool)
Validates the link of the given read link request and returns the data that reader can read if the link is valid
The token must be linked to this soul linker
Parameters
Name | Type | Description |
---|
readerIdentityId | uint256 | Id of the identity of the reader |
ownerIdentityId | uint256 | Id of the identity of the owner of the SBT |
token | address | Address of the SBT contract |
tokenId | uint256 | Id of the token |
signatureDate | uint256 | Signature date of the signature |
Returns
Name | Type | Description |
---|
_0 | bool | True if the link is valid |
wrappedNativeToken
function wrappedNativeToken() external view returns (address)
Returns
Name | Type | Description |
---|
_0 | address | undefined |
Events
EIP712DomainChanged
event EIP712DomainChanged()
MAY be emitted to signal that the domain could have changed.
LinkAdded
event LinkAdded(uint256 readerIdentityId, uint256 ownerIdentityId, address token, uint256 tokenId, uint256 signatureDate, uint256 expirationDate)
Parameters
Name | Type | Description |
---|
readerIdentityId | uint256 | undefined |
ownerIdentityId | uint256 | undefined |
token | address | undefined |
tokenId | uint256 | undefined |
signatureDate | uint256 | undefined |
expirationDate | uint256 | undefined |
LinkRevoked
event LinkRevoked(uint256 readerIdentityId, uint256 ownerIdentityId, address token, uint256 tokenId, uint256 signatureDate)
Parameters
Name | Type | Description |
---|
readerIdentityId | uint256 | undefined |
ownerIdentityId | uint256 | undefined |
token | address | undefined |
tokenId | uint256 | undefined |
signatureDate | uint256 | undefined |
Paused
event Paused(address account)
Emitted when the pause is triggered by account
.
Parameters
Name | Type | Description |
---|
account | address | undefined |
Pay
event Pay(address indexed paymentMethod, uint256 amount, uint256 protocolFee)
Parameters
Name | Type | Description |
---|
paymentMethod indexed | address | undefined |
amount | uint256 | undefined |
protocolFee | uint256 | undefined |
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
Emitted when newAdminRole
is set as role
's admin role, replacing previousAdminRole
DEFAULT_ADMIN_ROLE
is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. Available since v3.1.
Parameters
Name | Type | Description |
---|
role indexed | bytes32 | undefined |
previousAdminRole indexed | bytes32 | undefined |
newAdminRole indexed | bytes32 | undefined |
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
Emitted when account
is granted role
. sender
is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.
Parameters
Name | Type | Description |
---|
role indexed | bytes32 | undefined |
account indexed | address | undefined |
sender indexed | address | undefined |
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
Emitted when account
is revoked role
. sender
is the account that originated the contract call: - if using revokeRole
, it is the admin role bearer - if using renounceRole
, it is the role bearer (i.e. account
)
Parameters
Name | Type | Description |
---|
role indexed | bytes32 | undefined |
account indexed | address | undefined |
sender indexed | address | undefined |
Unpaused
event Unpaused(address account)
Emitted when the pause is lifted by account
.
Parameters
Name | Type | Description |
---|
account | address | undefined |
Errors
AlreadyAdded
CallerNotOwner
error CallerNotOwner(address caller)
Parameters
Name | Type | Description |
---|
caller | address | undefined |
CallerNotReader
error CallerNotReader(address caller)
Parameters
Name | Type | Description |
---|
caller | address | undefined |
IdentityOwnerIsReader
error IdentityOwnerIsReader(uint256 readerIdentityId)
Parameters
Name | Type | Description |
---|
readerIdentityId | uint256 | undefined |
IdentityOwnerNotTokenOwner
error IdentityOwnerNotTokenOwner(uint256 tokenId, uint256 ownerIdentityId)
Parameters
Name | Type | Description |
---|
tokenId | uint256 | undefined |
ownerIdentityId | uint256 | undefined |
InsufficientEthAmount
error InsufficientEthAmount(uint256 amount)
Parameters
Name | Type | Description |
---|
amount | uint256 | undefined |
InvalidPaymentMethod
error InvalidPaymentMethod(address paymentMethod)
Parameters
Name | Type | Description |
---|
paymentMethod | address | undefined |
InvalidShortString
error InvalidShortString()
InvalidSignature
InvalidSignatureDate
error InvalidSignatureDate(uint256 signatureDate)
Parameters
Name | Type | Description |
---|
signatureDate | uint256 | undefined |
InvalidToken
error InvalidToken(address token)
Parameters
Name | Type | Description |
---|
token | address | undefined |
LinkAlreadyExists
error LinkAlreadyExists(address token, uint256 tokenId, uint256 readerIdentityId, uint256 signatureDate)
Parameters
Name | Type | Description |
---|
token | address | undefined |
tokenId | uint256 | undefined |
readerIdentityId | uint256 | undefined |
signatureDate | uint256 | undefined |
LinkAlreadyRevoked
error LinkAlreadyRevoked()
LinkDoesNotExist
NonExistingErc20Token
error NonExistingErc20Token(address erc20token)
Parameters
Name | Type | Description |
---|
erc20token | address | undefined |
PaymentParamsNotSet
error PaymentParamsNotSet()
ProtocolFeeReceiverNotSet
error ProtocolFeeReceiverNotSet()
RefundFailed
SameValue
SoulNameNotExist
SoulNameNotRegistered
error SoulNameNotRegistered(address token)
Parameters
Name | Type | Description |
---|
token | address | undefined |
error StringTooLong(string str)
Parameters
Name | Type | Description |
---|
str | string | undefined |
TransferFailed
UserMustHaveProtocolOrProjectAdminRole
error UserMustHaveProtocolOrProjectAdminRole()
ValidPeriodExpired
error ValidPeriodExpired(uint256 expirationDate)
Parameters
Name | Type | Description |
---|
expirationDate | uint256 | undefined |
ZeroAddress