The Frictionless Tokens describe the tokens which are emitted by the Frictionless protocol to represent Asset, Securities and Deposits. These tokens are based on the ERC-3643 specification of IToken.
The following diagram describes the high-level interaction and composition of a Frictionless token.
Inherits: IToken
Author: DEFYCA Labs S.Ã .r.l
Copyright © 2023 DEFYCA Labs S.à .r.l Permission is hereby granted, free of charge, to any person obtaining a copy of the Frictionless protocol smart contracts (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL DEFYCA LABS S.à .r.l BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
The IBasicFrictionlessToken Represents the base interface for Frictionless protocol tokens, this interface is used to determine a token type.

Sets the token type according to the specified enumeration
Parameters
newTokenType_
FrictionlessTokenTypes
the token type to set
Returns the token type according to the specified enumeration
Returns
<none>
FrictionlessTokenTypes
FrictionlessTokenTypes the token type according to the specified enumeration
error thrown if an attempt to set an invalid token type during function setFrictionlessTokenType
Enumeration to represent each of the tokens in the Frictionless protocol.
function setFrictionlessTokenType(FrictionlessTokenTypes newTokenType_) external;function getFrictionlessTokenType() external view returns (FrictionlessTokenTypes);error BasicFrictionlessTokenUnableToUpdateFrictionlessTokenType();enum FrictionlessTokenTypes {
NONE,
FUND_DEPOSIT_TOKEN,
DIGITAL_SECURITY_TOKEN,
ON_CHAIN_ASSET_TOKEN
}Inherits: IBasicFrictionlessToken
Author: DEFYCA Labs S.Ã .r.l
Copyright © 2023 DEFYCA Labs S.à .r.l Permission is hereby granted, free of charge, to any person obtaining a copy of the Frictionless protocol smart contracts (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL DEFYCA LABS S.à .r.l BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
A Fund Deposit Token represents a permissioned Investors FIAT contribution to a specific fund IBAN in a denominated FIAT currency. The Fund Deposit Token is used as a means of payment and settlement. The Fund Deposit Token can only be transferred between permissioned Investors in the fund. A daily attestation of the fund IBAN serves to prove the 1:1 backing with FIAT. Exclusively under Frictionless Markets S.Ã .r.l issuance terms Investors holding a FrictionlessFundDepositToken have the legal right to the FIAT value held in the fund IBAN account.
Sets the immutable data for the FrictionlessFundDepositToken
Parameters
Get the currency the FIAT denomination of the deposit token.
Returns
Get the description the description of the deposit token.
Returns
Get the IBAN which Frictionless Markets S.Ã .r.l holds a matching FIAT currency ledger with a G-SIB for this currency, attestations are provided on this IBAN. This is restricted to onlyAgent roles.
Returns
error throw if there is an attempt to modify the immutable data.
Struct which represents the immutable data in the Token. Once set it cannot be modified.
initData
FFDImmutableData
the immutable data for the FrictionlessFundDepositToken
<none>
string
the currency the FIAT denomination of the deposit token.
<none>
string
the description the description of the deposit token
<none>
string
the IBAN which Frictionless Markets S.Ã .r.l holds a matching FIAT currency ledger with a G-SIB for this currency, attestations are provided on this IBAN.
function setInitData(FFDImmutableData calldata initData) external;function getCurrency() external view returns (string memory);function getDescription() external view returns (string memory);function getFundIBAN() external returns (string memory);error FrictionlessFundDepositTokenUnableToUpdateInitData();struct FFDImmutableData {
string currency;
string description;
string fundIBAN;
}Inherits: IBasicFrictionlessToken
Author: DEFYCA Labs S.Ã .r.l
Copyright © 2023 DEFYCA Labs S.à .r.l Permission is hereby granted, free of charge, to any person obtaining a copy of the Frictionless protocol smart contracts (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL DEFYCA LABS S.à .r.l BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
This is the permissioned & transferable digital security which represents the future cash flow from the FrictionlessOnChainAssetToken and is purchased by the Investor using FrictionlessFundDepositTokens. These digital securities are permissioned and transferable between permissioned Investors in a permissioned secondary market. This token is linked to the FrictionlessOnChainAssetToken and denominated in a FIAT currency at a future date for settlement.
Sets the immutable data for the FrictionlessDigitalSecurityToken
Parameters
Sets the updatable data for the FrictionlessDigitalSecurityToken
Parameters
Get the baseCurrency is the FIAT denomination of the digital security, this is the currency the FrictionlessOnChainAssetToken is issued in.
Returns
Get the type of the token as defined in the enum FrictionlessDigitalSecurityTokenType.
Returns
Get the onChainAssetAddress the address of the FrictionlessOnChainAssetToken for which this token is a future cash distribution.
Returns
Get the maturity date of the digital security.
Returns
error throw if there is an attempt to modify the immutable data.
Struct which represents the immutable data in the Token. Once set it cannot be modified.
Struct which represents the updatable data in the Token. This data can be modified by the Agent only.
Author: DEFYCA Labs S.Ã .r.l
Copyright © 2023 DEFYCA Labs S.à .r.l Permission is hereby granted, free of charge, to any person obtaining a copy of the Frictionless protocol smart contracts (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL DEFYCA LABS S.à .r.l BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Interface defining the token factory for all tokens in the Frictionless protocol.
initData
FDSImmutableData
the immutable data for the FrictionlessDigitalSecurityToken
mutableData
FDSMutableData
the updatable data for the FrictionlessDigitalSecurityToken
<none>
string
the baseCurrency is the FIAT denomination of the digital security, this is the currency the FrictionlessOnChainAssetToken is issued in.
<none>
FrictionlessDigitalSecurityTokenType
the type of the token as defined in the enum.
<none>
address
onChainAssetAddress the address of the FrictionlessOnChainAssetToken for which this token is a future cash distribution.
<none>
uint256
the maturity date of the digital security.
function setInitData(FDSImmutableData calldata initData) external;function setUpdateData(FDSMutableData calldata mutableData) external;function getCurrency() external view returns (string memory);function getTokenType() external view returns (FrictionlessDigitalSecurityTokenType);function getOnChainAssetAddress() external view returns (address);function getMaturesOn() external view returns (uint256);error FrictionlessDigitalSecurityTokenInitDataHasAlreadyBeenSet();struct FDSImmutableData {
string baseCurrency;
FrictionlessDigitalSecurityTokenType tokenType;
address onChainAssetAddress;
}struct FDSMutableData {
uint256 maturesOn;
}enum FrictionlessDigitalSecurityTokenType {
COUPON,
STRIP
}Sets the Treasury Manager to be the specified address.
Parameters
newTreasuryManager_
address
the addresses of the treasury manager to set throws FrictionlessTokensFactoryZeroAddress if the newTreasuryManager_ is a zero address
Deploys the FrictionlessFundDepositToken contract as a proxy
Parameters
tokenOwner_
address
The owner of the deployed contract
baseTokenInitParams_
BaseTokenInitParams
the base contract data to deploy a Frictionless token contract
initData_
IFrictionlessFundDepositToken.FFDImmutableData
the immutable data for the FrictionlessFundDepositToken
Returns
tokenProxyAddr_
address
the address of the deployed token contract FrictionlessFundDepositToken throws FrictionlessTokensFactoryNotATreasuryManager if the msg.sender is not the treasury manager emits FrictionlessTokenDeployed event upon successful deployment of the token contract.
Deploys the FrictionlessDigitalSecurityToken contract as a proxy
Parameters
tokenOwner_
address
The owner of the deployed contract
baseTokenInitParams_
BaseTokenInitParams
the base contract data to deploy a Frictionless token contract
initData_
IFrictionlessDigitalSecurityToken.FDSImmutableData
the immutable data for the FrictionlessDigitalSecurityToken
Returns
tokenProxyAddr_
address
the address of the deployed token contract FrictionlessDigitalSecurityToken throws FrictionlessTokensFactoryNotATreasuryManager if the msg.sender is not the treasury manager emits FrictionlessTokenDeployed event upon successful deployment of the token contract.
Deploys the FrictionlessOnChainAssetToken contract as a proxy
Parameters
tokenOwner_
address
The owner of the deployed contract
baseTokenInitParams_
BaseTokenInitParams
the base contract data to deploy a Frictionless token contract
specData_
IFrictionlessOnChainAssetToken.FOCASpecData
the immutable specification data for the FrictionlessOnChainAssetToken
Returns
tokenProxyAddr_
address
the address of the deployed token contract FrictionlessOnChainAssetToken throws FrictionlessTokensFactoryNotATreasuryManager if the msg.sender is not the treasury manager emits FrictionlessTokenDeployed event upon successful deployment of the token contract.
returns the address of the treasuryManager
Returns
<none>
address
the address of the treasuryManager
Checks whether a given token address is an existing frictionless token
Parameters
tokenAddr_
address
the address of the token to check
Returns
<none>
bool
A boolean indicating whether the token is an existing frictionless token
Event emitted upon successful deployment of a compliance contract.
error thrown if an attempt to set a zero address contract during function setTreasuryManager
error thrown if the msg.sender is not the treasury manager during the functions deployFundDepositToken, deployDigitalSecurityToken, or deployOnChainAssetToken
Struct to represent the base contract data to deploy a Frictionless token contract.
Inherits: IBasicFrictionlessToken
Author: DEFYCA Labs S.Ã .r.l
Copyright © 2023 DEFYCA Labs S.à .r.l Permission is hereby granted, free of charge, to any person obtaining a copy of the Frictionless protocol smart contracts (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL DEFYCA LABS S.à .r.l BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Implementation of the storage of the underlying OnChain Asset and it's data.
Sets the specData data for the FrictionlessOnChainAssetToken. throws FrictionlessOnChainAssetTokenUnableToUpdateData This data is immutable, an attempt to modify will generate the error FrictionlessOnChainAssetTokenUnableToUpdateData
Parameters
Sets the issuanceData data for the FrictionlessOnChainAssetToken throws FrictionlessOnChainAssetTokenUnableToUpdateData This data is immutable, an attempt to modify will generate the error FrictionlessOnChainAssetTokenUnableToUpdateData
Parameters
Sets the updatable data for the FrictionlessOnChainAssetToken
Parameters
Get the specData data for the FrictionlessOnChainAssetToken.
Returns
Get the issuanceData data for the FrictionlessOnChainAssetToken.
Returns
Get the updateData data for the FrictionlessOnChainAssetToken.
Returns
Get the currency the FrictionlessOnChainAssetToken is issued in.
Returns
error throw if there is an attempt to modify the immutable data.
The specification data for the FrictionlessOnChainAssetToken, this is an immutable data struct.
The issuance data for the FrictionlessOnChainAssetToken, this is an immutable data struct.
The uopdatable data for the FrictionlessOnChainAssetToken.
Enum for the schedule of the payments by the Manager, either pro_rat or coupon/bullet style.
Enum for the periodicity of payments by the Manager
Enum for the yield for this FrictionlessOnChainAssetToken is a fixed/floating rate
Enum for the price quote status obtained at auction
Enum for the current status of the FrictionlessOnChainAssetToken. Updated over time by the Treasury
Enum for the current S&P style riskGrade of the FrictionlessOnChainAssetToken. Updated over time by the Manager/Treasury/Risk Oracle.
function setTreasuryManager(address newTreasuryManager_) external;function deployFundDepositToken(
address tokenOwner_,
BaseTokenInitParams calldata baseTokenInitParams_,
IFrictionlessFundDepositToken.FFDImmutableData calldata initData_
) external returns (address tokenProxyAddr_);function deployDigitalSecurityToken(
address tokenOwner_,
BaseTokenInitParams calldata baseTokenInitParams_,
IFrictionlessDigitalSecurityToken.FDSImmutableData calldata initData_,
IFrictionlessDigitalSecurityToken.FDSMutableData calldata updateData_
) external returns (address tokenProxyAddr_);function deployOnChainAssetToken(
address tokenOwner_,
BaseTokenInitParams calldata baseTokenInitParams_,
IFrictionlessOnChainAssetToken.FOCASpecData calldata specData_,
IFrictionlessOnChainAssetToken.FOCAIssuanceData calldata issuanceData_,
IFrictionlessOnChainAssetToken.FOCAUpdateData calldata updateData_
) external returns (address tokenProxyAddr_);function treasuryManager() external view returns (address);function existingFrictionlessTokens(address tokenAddr_) external view returns (bool);event FrictionlessTokenDeployed(
IBasicFrictionlessToken.FrictionlessTokenTypes indexed tokenType, address newTokenContract
);error FrictionlessTokensFactoryZeroAddress();error FrictionlessTokensFactoryNotATreasuryManager(address);struct BaseTokenInitParams {
address implementationAuthority;
address identityRegistry;
address compliance;
address onChainId;
string tokenName;
string tokenSymbol;
}updateData_
IFrictionlessDigitalSecurityToken.FDSMutableData
the mutable data for the FrictionlessDigitalSecurityToken
issuanceData_
IFrictionlessOnChainAssetToken.FOCAIssuanceData
the immutable issuance data for the FrictionlessOnChainAssetToken
updateData_
IFrictionlessOnChainAssetToken.FOCAUpdateData
the mutable update data for the FrictionlessOnChainAssetToken
specData
FOCASpecData
the specData data for the FrictionlessOnChainAssetToken
issuanceData
FOCAIssuanceData
the updatable data for the FrictionlessOnChainAssetToken
updateData
FOCAUpdateData
the updatable data for the FrictionlessOnChainAssetToken
<none>
FOCASpecData
the specData data for the FrictionlessOnChainAssetToken
<none>
FOCAIssuanceData
the issuanceData data for the FrictionlessOnChainAssetToken
<none>
FOCAUpdateData
the updateData data for the FrictionlessOnChainAssetToken
<none>
string
the currency the FrictionlessOnChainAssetToken is issued in.
function setSpecificationData(FOCASpecData calldata specData) external;function setIssuanceData(FOCAIssuanceData calldata issuanceData) external;function setUpdateData(FOCAUpdateData calldata updateData) external;function getSpecificationData() external view returns (FOCASpecData memory);function getIssuanceData() external view returns (FOCAIssuanceData memory);function getUpdateData() external view returns (FOCAUpdateData memory);function getCurrency() external view returns (string memory);error FrictionlessOnChainAssetTokenUnableToUpdateData();struct FOCASpecData {
uint256 issuedOn;
uint256 maturityDays;
FrictionlessOnChainAssetSchedule schedule;
FrictionlessOnChainAssetPaymentFrequency paymentFrequency;
FrictionlessOnChainAssetYieldType yieldType;
string baseCurrency;
uint256 stripTotal;
string name;
string symbol;
}struct FOCAIssuanceData {
uint256 auctionedOn;
FrictionlessOnChainAssetPriceStatus priceQuoteStatus;
string onChainAssetUUID;
string issuerUUID;
string isin;
string issuanceDocs;
string assetClass;
}struct FOCAUpdateData {
uint256 maturesOn;
uint256 total;
FrictionlessOnChainAssetStatus status;
uint256 yield;
FrictionlessOnChainAssetRiskGrade riskGrade;
uint256 pullToParValue;
address custodianAddress;
}enum FrictionlessOnChainAssetSchedule {
SCHEDULE_COUPON_ONLY,
SCHEDULE_PRO_RATA
}enum FrictionlessOnChainAssetPaymentFrequency {
PAYMENT_FREQUENCY_DAILY,
PAYMENT_FREQUENCY_WEEKLY,
PAYMENT_FREQUENCY_MONTHLY,
PAYMENT_FREQUENCY_QUARTERLY,
PAYMENT_FREQUENCY_SEMI_ANNUALLY,
PAYMENT_FREQUENCY_ANNUALLY,
PAYMENT_FREQUENCY_SINGLE
}enum FrictionlessOnChainAssetYieldType {
YIELD_FIXED,
YIELD_FLOATING
}enum FrictionlessOnChainAssetPriceStatus {
PRICE_QUOTE_STATUS_UNDER_SUBSCRIBED,
PRICE_QUOTE_STATUS_PRICED_AT_PAR,
PRICE_QUOTE_STATUS_PRICED_AT_DISCOUNT,
PRICE_QUOTE_STATUS_PRICED_AT_PREMIUM
}enum FrictionlessOnChainAssetStatus {
STATUS_MINTED,
STATUS_PURCHASED,
STATUS_MATURED,
STATUS_IMPAIRED,
STATUS_REDEEMED
}enum FrictionlessOnChainAssetRiskGrade {
BER_AAA,
BER_AA,
BER_A,
BER_BBB,
BER_BB,
BER_B,
BER_CCC,
BER_CC,
BER_C,
BER_D,
BER_UNRATED
}