Once you have the hub's address, you can now create your position. Take into account that:
from and to need to be different tokens
amount must be a positive number
amountOfSwaps must be a positive number
swapInterval must be one of the allowed swap intervals. There is a list of pre-defined supported time intervals, but the hub has a configuration that determines which are allowed and which are not. The supported time intervals are:
1 minute
5 minutes
15 minutes
30 minutes;
1 hour
4 hours
1 day
1 week
pragma solidity >=0.8.0 <0.9.0;
import '@openzeppelin/contracts/token/ERC20/IERC20.sol';
import '@mean-finance/dca-v2-core/contracts/interfaces/IDCAHub.sol';
contract MyContract {
IDCAHub public immutable hub;
constructor(IDCAHub _hub) {
hub = _hub;
}
/// @notice Creates a new position
/// @param _from The address of the "from" token
/// @param _to The address of the "to" token
/// @param _amount How many "from" tokens will be swapped in total
/// @param _amountOfSwaps How many swaps to execute for this position
/// @param _swapInterval How frequently the position's swaps should be executed
/// @param _owner The address of the owner of the position being created
/// @return _positionId The id of the created position
function deposit(
address _from,
address _to,
uint256 _amount,
uint32 _amountOfSwaps,
uint32 _swapInterval,
address _owner,
IDCAPermissionManager.PermissionSet[] calldata _permissions
) external returns (uint256 _positionId) {
// We need to increase the allowance for the hub before calling deposit
IERC20(_from).approve(address(hub), _amount);
_positionId = hub.deposit(_from, _to, _amount, _amountOfSwaps, _swapInterval, _owner, _permissions);
}
}