Ref: Minimum balance requirement for a smart contract
Local state uint count: 12
Local state byte slice count: 2
100000 (Accounts on Algorand require a minimum balance of 100,000 micro Algo)
+ 100000 ASA 1 (Asset Optin)
+ 100000 ASA 2 (Asset Optin)
+ 100000 Pool Token (Asset Optin)
+ 542000 App Optin (100000 + (25000+3500)*12 + (25000+25000)*2)
= 942000 micro Algo
100000 (Accounts on Algorand require a minimum balance of 100,000 micro Algo)
+ 100000 ASA 1 (Asset Optin)
+ 100,000 ASA 2 (Asset Optin)
+ 100000 Pool Token (Asset Optin)
+ 542000 App Optin (100000 + (25000+3500)*12 + (25000+25000)*2)
= 842000 micro Algo
Issued Pool Tokens = floor(sqrt(Asset1 Amount * Asset2 Amount))
Locked Pool Tokens= 1000
Pool Token Output = Issued Pool Tokens - Locked Pool Tokens
The same formula applies to single and flexible modes.
Old K = Asset1 Reserves * Asset2 Reserves
New K = (Asset1 Reserves + Asset1 Amount) * (Asset2 Reserves + Asset2 Amount)
R = sqrt(Old K) / Issued Pool Tokens
New Issued Pool Tokens = sqrt(New K) / R
New Issued Pool Tokens = sqrt(New K) / ( sqrt(Old K) / Issued Pool Tokens)
New Issued Pool Tokens = sqrt((New K * Issued Pool Tokens* Issued Pool Tokens) / Old K)
Pool Tokens Out = New Issued Pool Tokens - Old Issued Pool Tokens
New Asset1 Reserves = Old Asset1 Reserves + Asset1 Amount
New Asset2 Reserves = Old Asset1 Reserves + Asset2 Amount
Calculated Asset1 Amount = floor((Pool Tokens Out * New Asset1 Reserves) / New Issued Pool Tokens)
Calculated Asset2 Amount =floor((Pool Tokens Out *New Asset2 Reserves) / New Issued Pool Tokens)
Asset1 Swap Amount = Asset1 Amount - Calculated Asset1 Amount
Asset2 Swap Amount = Asset2 Amount - Calculated Asset2 Amount
Swap Amount = Max(Asset1 Swap Amount, Asset2 Swap Amount)
Total Fee Amount = (Swap Amount * Total Fee Share) / (10000 - Total Fee Share)
Protocol Fee Amount = Total Fee Amount / Protocol Fee Ratio
Poolers Fee Amount = Total Fee Amount - Protocol Fee Amount
Asset1 Swap Amount > Asset2 Swap Amount:
Fee As Pool Tokens = (Total Fee Amount * New Issued Pool Tokens) / (New Asset1 Reserves * 2)
New Asset1 Reserves = New Asset1 Reserves - Protocol Fee Amount
Pool Tokens Out = Pool Tokens Out - Fee As Pool Tokens
Asset2 Swap Amount > Asset1 Swap Amount:
Fee As Pool Tokens = (Total Fee Amount * New Issued Pool Tokens) / (New Asset2 Reserves * 2)
New Asset2 Reserves = New Asset2 Reserves - Protocol Fee Amount
Pool Tokens Out = Pool Tokens Out - Fee As Pool Tokens
Issued Pool Tokens == Locked Pool Tokens + Removed Pool Tokens
Asset1 Output = Asset1 Reserves
Asset2 Output = Asset2 Reserves
Issued Pool Tokens > Locked Pool Tokens + Removed Pool Tokens
Asset1 Output= floor(Removed Pool Token Amount * Asset1 Reserves / Issued Pool Tokens)
Asset2 Output= floor(Removed Pool Token Amount * Asset2 Reserves / Issued Pool Tokens)
Calculate the Asset1 Output and Asset2 Output as multiple assets out and convert an asset to desired output by doing an internal swap (fixed-input swap).
Input Amount = Asset2 Output
Swap Output = FixedInputSwap(Input Amount)
Asset1 Output=Asset1 Output + Swap Output
Asset2 Output=0
Input Amount = Asset1 Output
Swap Output = FixedInputSwap(Input Amount)
Asset2 Output=Asset2 Output + Swap Output
Asset1 Output=0
Total Fee = floor((Input Amount * Total Fee Share) / 10000)
Protocol Fee = floor(Total Fee / Protocol Fee Ratio)
Poolers Fee = Total Fee - Protocol Fee
Swap Amount = Input Amount - Total Fee
K = Input Supply * Output Supply
Swap Output = Output Supply - (floor(K / (Input Supply + Swap Amount)) + 1)
Swap Amount = (floor(K / (Output Supply - Output Amount)) + 1) - Input Supply
Input Amount = floor((Swap Amount * 10000) / (10000 - Total Fee Share))
Total Fee = Input Amount - Swap Amount
Protocol Fee = floor(Total Fee / Protocol Fee Ratio)
Poolers Fee = Total Fee - Protocol Fee
Change = Input Transfer Amount - Input Amount
Applies to both assets.
Total Fee = floor((Loan Amount * Total Fee Share) / 10000)
Protocol Fee = floor(Total Fee / Protocol Fee Ratio)
Poolers Fee = Total Fee - Protocol Fee
Expected Repayment Amount = Loan Amount + Total Fee
Donation Amount = Repayment Transfer Amount - Expected Repayment Amount
Applies to both assets.
Input Amount= Transfer Amount (Final Balance - Initial Balance)
Note: The rest is the same with fixed input swap.
Total Fee = floor((Input Amount * Total Fee Share) / 10000)
Protocol Fee = floor(Total Fee / Protocol Fee Ratio)
Poolers Fee = Total Fee - Protocol Fee