Skip to content

Latest commit

 

History

History
1678 lines (937 loc) · 29.7 KB

SoulLinker.md

File metadata and controls

1678 lines (937 loc) · 29.7 KB

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

error 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

error 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

error LinkDoesNotExist()

NonExistingErc20Token

error NonExistingErc20Token(address erc20token)

Parameters

Name Type Description
erc20token address undefined

PaymentParamsNotSet

error PaymentParamsNotSet()

ProtocolFeeReceiverNotSet

error ProtocolFeeReceiverNotSet()

RefundFailed

error RefundFailed()

SameValue

error SameValue()

SoulNameNotExist

error SoulNameNotExist()

SoulNameNotRegistered

error SoulNameNotRegistered(address token)

Parameters

Name Type Description
token address undefined

StringTooLong

error StringTooLong(string str)

Parameters

Name Type Description
str string undefined

TransferFailed

error TransferFailed()

UserMustHaveProtocolOrProjectAdminRole

error UserMustHaveProtocolOrProjectAdminRole()

ValidPeriodExpired

error ValidPeriodExpired(uint256 expirationDate)

Parameters

Name Type Description
expirationDate uint256 undefined

ZeroAddress

error ZeroAddress()