function _create(LockupDynamic.CreateWithTimestamps memory params) internal returns (uint256 streamId) {
✔ uint256 initialBalance = params.asset.balanceOf(address(this));
✔ params.asset.safeTransferFrom({ from: msg.sender, to: address(this), value: params.totalAmount });
✔ uint256 finalBalance = params.asset.balanceOf(address(this));
✔ uint256 AmountIn = finalBalance - initialBalance;
✔ Lockup.CreateAmounts memory createAmounts =
Helpers.checkAndCalculateBrokerFee(AmountIn, params.broker.fee, MAX_BROKER_FEE);
❌ Lockup.CreateAmounts memory createAmounts =
Helpers.checkAndCalculateBrokerFee(params.totalAmount, params.broker.fee, MAX_BROKER_FEE);
Helpers.checkCreateLockupDynamic(createAmounts.deposit, params.segments, MAX_SEGMENT_COUNT, params.startTime);
streamId = nextStreamId;
Lockup.Stream storage stream = _streams[streamId];
stream.amounts.deposited = createAmounts.deposit;
stream.asset = params.asset;
stream.isCancelable = params.cancelable;
stream.isStream = true;
stream.isTransferable = params.transferable;
stream.sender = params.sender;
stream.startTime = params.startTime;
unchecked {
uint256 segmentCount = params.segments.length;
stream.endTime = params.segments[segmentCount - 1].timestamp;
for (uint256 i = 0; i < segmentCount; ++i) {
_segments[streamId].push(params.segments[i]);
}
nextStreamId = streamId + 1;
}
_mint({ to: params.recipient, tokenId: streamId });
❌ params.asset.safeTransferFrom({ from: msg.sender, to: address(this), value: createAmounts.deposit });
if (createAmounts.brokerFee > 0) {
params.asset.safeTransferFrom({ from: msg.sender, to: params.broker.account, value: createAmounts.brokerFee });
}
emit ISablierV2LockupDynamic.CreateLockupDynamicStream({
streamId: streamId,
funder: msg.sender,
sender: params.sender,
recipient: params.recipient,
amounts: createAmounts,
asset: params.asset,
cancelable: params.cancelable,
transferable: params.transferable,
segments: params.segments,
timestamps: LockupDynamic.Timestamps({ start: stream.startTime, end: stream.endTime }),
broker: params.broker.account
});
}