盈利分享指南
Widget 分红指南
背景#
为了奖励交易量提供者,API用户可以调整交易手续费收款地址和手续费比例。用户通过提供者发布的小部件进行交易后,提供者将获得相应的手续费奖励。
使用盈利分享模式#
描述
feeRate
: API用户的手续费比例;API用户设置的feeRate
与DODO收取的手续费单独计算,手续费单位为1e18,例如,如果feeRate
设置为1500000000000000,实际手续费率为1500000000000000 / 10^18 = 0.0015 = 0.15%。rebateTo
:将接收交易手续费激励的钱包地址。
⚠️注意:如果要使用盈利分享模式,这两组代码对于小部件来说是必需的。如果这些代码未处理,feeRate默认为0, 默认API用户将不会收取任何交易手续费。
使用React函数#
import { SwapWidget } from '@dodoex/widgets';
function App() {
return (
<SwapWidget
feeRate={1500000000000000}
rebateTo='0x2Ba1633338dDD2Ab37fbc95ea615BA98f0445380'
// ...otherPrpos
/>
)
}
使用非React函数#
/**
* main.js
* InitializeSwapWidget
*/
'use strict';
import { InitSwapWidget } from '@dodoex/widgets';
function initDodoWidget() {
InitSwapWidget({
feeRate: 1500000000000000,
rebateTo: '0x2Ba1633338dDD2Ab37fbc95ea615BA98f0445380',
// ...otherPrpos
});
}
initDodoWidget();
手续费计算-合约代码块#
function _routeWithdraw(
address toToken,
uint256 receiveAmount,
bytes memory feeData,
uint256 minReturnAmount
) internal {
(address broker, uint256 brokerFeeRate) = abi.decode(feeData, (address, uint256));
uint256 routeFee = DecimalMath.mulFloor(receiveAmount, routeFeeRate);
IERC20(toToken).universalTransfer(payable(routeFeeReceiver), routeFee);
uint256 brokerFee = DecimalMath.mulFloor(receiveAmount, brokerFeeRate);
IERC20(toToken).universalTransfer(payable(broker), brokerFee);
receiveAmount = receiveAmount - routeFee - brokerFee;
require(receiveAmount >= minReturnAmount, "DODORouteProxy: Return amount is not enough");
if (toToken == _ETH_ADDRESS_) {
IWETH(_WETH_).withdraw(receiveAmount);
payable(msg.sender).transfer(receiveAmount);
} else {
IERC20(toToken).universalTransfer(payable(msg.sender), receiveAmount);
}
}
正如上面所示,在获取准确的路由报价时,向用户显示的toAmount已经扣除了交易手续费。
盈利分享手续费显示#
报价模块#
根据上述合约,在报价阶段的toAmount(即示例图中的DODO数量)已经扣除了API用户的feeRate后的代币数。

交易明细示例#
基本费用:服务提供商(DODO)的费用;额外费用:小部件用户(feeRate)的附加费用;
