Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion docs/fassets/1-overview.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@ Anyone on the Flare blockchain can mint FAssets, which are wrapped versions of o
### Minting

- A user (minter) selects an agent and pays a fee to reserve collateral.
- If the agent requires a handshake, the user's address is verified before proceeding with collateral reservation.
- The user sends the underlying asset (e.g., BTC) to the agent.
- The FDC verifies the transaction.
- The equivalent FAssets (e.g., FBTC) are minted as ERC-20 tokens on Flare.
Expand Down
28 changes: 0 additions & 28 deletions docs/fassets/3-minting.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -105,24 +105,6 @@ The executor is the actor who submits the payment proof to the Asset Manager, fi

This design ensures timely and reliable minting finalization without relying on a centralized party.

### Trailing Fees

To ensure that agents and collateral pool providers receive steady income, the FAsset system offers an option to enable FAsset token transfer fees, also known as trailing fees.

Whenever FAssets are transferred, a small proportional fee is deducted and contributed to a common pool. In a regular transfer, this fee is subtracted from the payment, meaning the sender pays the exact amount specified in the transfer request, while the receiver ends up receiving a slightly lower amount.

There is also a method where the receiver gets the exact amount specified in the call, while the sender pays more. The fee percentage is a system setting and is typically quite small.

The fees are collected over a certain period, known as an epoch, after which they are distributed among all agents in proportion to each agent's average backed amount during that epoch.

An agent can claim their portion of the fees for an epoch at any time after the epoch ends and before it expires. When making a claim, the fee is distributed between the agent and the pool in the same manner as the minting fee, based on the agent's settings.

## Handshake

Certain jurisdictions may require agents to confirm that those minting or redeeming assets are not engaged in illegal activities. Although the FAsset system does not impose this requirement, it does provide agents with the option to utilize an external service to verify the identities of minters and redeemers before proceeding with minting or redemption.

To enable the handshake, the agent must configure this setting in the agent settings. Once this is enabled, minting and redemption will involve an additional step.

### Minting

The FAssets agent verifies the minter after the user completes the collateral reservation and pays the collateral reservation fee. The agent is responsible for confirming or rejecting the minter's status. If the agent does not respond within a certain timeframe, the minter has the option to cancel the reservation and receive a full refund of the collateral reservation fee.
Expand All @@ -133,16 +115,6 @@ Users must wait up to 60 seconds before they can cancel their request. If the ag

When the agent rejects the minter's request or the minter decides to cancel, the minter will receive a refund of the collateral reservation fee, minus a small percentage (e.g., 5%) that is burned. This burned amount is designed to prevent abuse of the agent by stopping someone from repeatedly reserving collateral from a sanctioned address. If the burned percentage were zero, an attacker could exploit the system without any cost.

### Redemption

The agent has a few minutes to verify the redeemer's addresses and either approve or reject the redemption. If rejected, another agent can take over. If no one takes over, the minter receives the full amount plus a small premium from the rejecting agent, with the premium for a handshake rejection being smaller than for a redemption default.

:::info

An agent may only fulfill part of a request due to insufficient minting or too many small tickets. In these situations, the system allows for a “partial takeover”, where the remaining portion can either be taken over by another agent or covered by collateral from the agent who declined the redemption.

:::

## Payment Failure

To finalize the minting, the minter must pay the agent on the underlying chain and prove the payment was received.
Expand Down
4 changes: 0 additions & 4 deletions docs/fassets/7-operational-parameters.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,6 @@ To get the default agent settings, you need to call the `getSettings` function o

<OperationalParameters sectionTitle="Transfer Fees" />

### Handshake

<OperationalParameters sectionTitle="Handshake" />

## Default Agent Settings

To get the default agent settings, you need to call the `getAgentInfo` function on the `IAssetManager` interface. Read more about the `IAssetManager` interface [here](/fassets/reference/IAssetManager).
Expand Down
3 changes: 0 additions & 3 deletions docs/fassets/developer-guides/7-fassets-redeem.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -309,9 +309,6 @@ The FAssets agent should perform the redemption, and the user must retrieve the
If the agent is unable to redeem the assets on the underlying chain in the specified time.
In that case, the user can execute the [`redemptionPaymentDefault`](/fassets/reference/IAssetManager#redemptionpaymentdefault) function to receive compensation from the agent's collateral.

If the agent rejects the redemption request and no other agent takes over the redemption, the redeemer or appointed executor calls [`rejectedRedemptionPaymentDefault`](/fassets/reference/IAssetManager#rejectedredemptionpaymentdefault) method and receives payment in collateral.
The agent can also call default if the redeemer is unresponsive to payout the redeemer and free the remaining collateral.

## Next Steps

:::tip
Expand Down
33 changes: 0 additions & 33 deletions docs/fassets/guides/4-custom-handshake.mdx

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
sidebar_position: 5
sidebar_position: 4
slug: faq
title: FAssets Agent FAQs
description: Frequently Asked Questions by FAssets Agents.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
sidebar_position: 6
sidebar_position: 5
slug: export-private-keys
title: Export Private Keys
description: Export private keys for minting and redeeming
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
sidebar_position: 7
sidebar_position: 6
slug: agent-bot-notifications
title: Agent Bot Notifications
description: Learn how to set up agent bot notifications for FAssets.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
sidebar_position: 8
sidebar_position: 7
slug: infrastructure
title: FAssets Agent Infrastructure
description: Configuring the FAsset Bot to Use Custom Infrastructure
Expand Down
61 changes: 0 additions & 61 deletions docs/fassets/reference/IAssetManager.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -147,62 +147,16 @@ Parameters:
- `_lots`: Number of lots for which to reserve collateral
- `_maxMintingFeeBIPS`: Maximum minting fee (BIPS) that can be charged by the agent - best practice is to copy the current agent's published fee; used to prevent agent from front-running reservation request and increasing fee
- `_executor`: Account that is allowed to execute minting (besides minter and agent)
- `_minterUnderlyingAddresses`: Array of minter's underlying addresses - needed only if handshake is required

```solidity
function reserveCollateral(
address _agentVault,
uint256 _lots,
uint256 _maxMintingFeeBIPS,
address payable _executor,
string[] calldata _minterUnderlyingAddresses
) external payable;
```

### `approveCollateralReservation`

Agent approves the collateral reservation request after checking the minter's identity.

Parameters:

- `_collateralReservationId`: Collateral reservation ID

```solidity
function approveCollateralReservation(
uint256 _collateralReservationId
) external notEmergencyPaused;
```

### `rejectCollateralReservation`

Agent rejects the collateral reservation request after checking the minter's identity.
The collateral reservation fee is returned to the minter.

Parameters:

- `_collateralReservationId`: Collateral reservation ID

```solidity
function rejectCollateralReservation(
uint256 _collateralReservationId
) external nonReentrant;
```

### `cancelCollateralReservation`

Minter cancels the collateral reservation request if the agent didn't respond in time.
The collateral reservation fee is returned to the minter.

Parameters:

- `_collateralReservationId`: Collateral reservation ID

```solidity
function cancelCollateralReservation(
uint256 _collateralReservationId
) external nonReentrant;
```

## Execute Minting

### `executeMinting`
Expand Down Expand Up @@ -267,21 +221,6 @@ function redemptionPaymentDefault(
) external;
```

### `rejectedRedemptionPaymentDefault`

If the agent rejected the redemption request and no other agent took over the redemption, the redeemer or appointed executor calls this method and receives payment in collateral.
The agent can also call default if the redeemer is unresponsive, to payout the redeemer and free the remaining collateral.

Parameters:

- `_redemptionRequestId`: ID of an existing redemption request

```solidity
function rejectedRedemptionPaymentDefault(
uint256 _redemptionRequestId
) external;
```

## Core Vault Settings

Reference for managing and interacting with FAssets `ICoreVaultSettings` contract which is inherited by the `IAssetManager` contract.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,9 @@ contract AssetManagerRegistry {
.getSettings();

// Calculate the hash of the pool token suffix
bytes32 poolTokenSuffixHash = keccak256(abi.encodePacked(poolTokenSuffix));
bytes32 poolTokenSuffixHash = keccak256(
abi.encodePacked(poolTokenSuffix)
);

//8. return the address of the asset manager that has the pool token suffix "TXRP"
if (poolTokenSuffixHash == TXRP_HASH) {
Expand Down
131 changes: 0 additions & 131 deletions src/components/FAssets/operational-parameters.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1065,137 +1065,6 @@ export const operationalParameters = [
},
],
},
{
title: "Handshake",
parameters: [
{
name: "Collateral Reservation Timeout",
settingName: "cancelCollateralReservationAfterSeconds",
description:
"Time after which collateral reservation can be canceled if the handshake isn't completed.",
values: {
coston2: {
xrp: "30 seconds",
},
songbird: {
xrp: "60 seconds",
btc: "60 seconds",
doge: "60 seconds",
},
coston: {
xrp: "30 seconds",
btc: "30 seconds",
doge: "30 seconds",
},
},
},
{
name: "Return factor for rejected (or canceled) minting handshake",
settingName: "rejectOrCancelCollateralReservationReturnFactorBIPS",
description:
"The percentage of the collateral reservation fee returned on rejected (or canceled) minting handshake.",
values: {
coston2: {
xrp: "",
},
songbird: {
xrp: "5%",
btc: "2%",
doge: "2%",
},
coston: {
xrp: "",
btc: "",
doge: "",
},
},
},
{
name: "Redemption Request Rejection Window",
settingName: "rejectRedemptionRequestWindowSeconds",
description:
"Time window within which the agent can reject a redemption request.",
values: {
coston2: {
xrp: "120 seconds",
},
songbird: {
xrp: "120 seconds",
btc: "120 seconds",
doge: "120 seconds",
},
coston: {
xrp: "120 seconds",
btc: "120 seconds",
doge: "120 seconds",
},
},
},
{
name: "Redemption Request Takeover Window",
settingName: "takeOverRedemptionRequestWindowSeconds",
description:
"Time window during which another agent can take over a rejected redemption request.",
values: {
coston2: {
xrp: "120 seconds",
},
songbird: {
xrp: "120 seconds",
btc: "120 seconds",
doge: "120 seconds",
},
coston: {
xrp: "120 seconds",
btc: "120 seconds",
doge: "120 seconds",
},
},
},
{
name: "Vault Collateral Compensation Factor",
settingName: "rejectedRedemptionDefaultFactorVaultCollateralBIPS",
description:
"Portion of compensation factor paid from the agent's vault collateral during redemption rejection.",
values: {
coston2: {
xrp: "1.05",
},
songbird: {
xrp: "1.001",
btc: "1.001",
doge: "1.001",
},
coston: {
xrp: "1.05",
btc: "1.05",
doge: "1.05",
},
},
},
{
name: "Pool Collateral Compensation Factor",
settingName: "rejectedRedemptionDefaultFactorPoolBIPS",
description:
"Portion of compensation factor paid from the pool collateral during redemption rejection.",
values: {
coston2: {
xrp: "0",
},
songbird: {
xrp: "0",
btc: "0",
doge: "0",
},
coston: {
xrp: "0",
btc: "0",
doge: "0",
},
},
},
],
},
{
title: "Default Agent Settings",
parameters: [
Expand Down
Loading