Proposal: Reduce Luna Tax Cap to 1 SDR

The tax cap for luna transactions is 1 Luna. While all of the stable coins tax caps work out to about 1 SDR or $1.4. However, Luna is now $11 in price so its tax cap is $11 (or whatever the price that luna is).

A year ago, Luna was $0.35 cent; this tax cap was reasonable. But now that Luna is $10+, it is inconsistent with the other native tokens. As the price of Luna increases, this tax will become more unreasonable. The tax cap should be set at 1 SDR similar to the other native tokens.

Here are some FCD calls to check the tax caps for yourselves. Just note that the values are in uUST or uKRT or uLUNA (micro-units). Just divide by 1,000,000 to get the units in UST or KRT or LUNA.

Tax Cap for Luna:
https://fcd.terra.dev/treasury/tax_cap/uluna

Tax Caps for all of the stablecoins:
https://fcd.terra.dev/treasury/tax_caps

Below is an example of transactions from the UST-LUNA terraswap pool. The user swapped from UST to Luna. You can see that they paid a 1 Luna tax on this in the “from_contract” results. Since this was a larger transaction (1340 luna), they paid a smaller tax on this. The tax paid was 0.07%.
https://finder.terra.money/columbus-4/tx/3FA279614F2A423B8A85A6426B1EFCF69C88E1F49BFD65C4650C1C80A3707510

On a smaller transaction (89), the amount of tax that is paid is much higher since the user does not hit the cap. This user paid the full 0.5% tax rate.
https://finder.terra.money/columbus-4/tx/808657B8F7E08F523F760F97889837EA627540180946B2D90FB7C64A3603085C

Unless there is a reason I am missing that the tax should be higher on luna, I suggest placing the max tax on luna to also be 1 SDT so that it is consistent with other denoms. This would benefit those on the network that do not operate with large amounts of Luna to hit the current tax_cap.

Here are some Pros/Cons for reducing the Luna tax cap from a hardcoded 1 Luna to dynamic 1 SDR

Pros:

  • Consistency with other tax policies with other native tokens
  • Smaller users get to benefit from the lower tax cap, not just whales
  • The tax will be a dynamic value (in terms of luna) and can scale with Luna’s price

Cons:

  • Less revenue to validators and stakers from tax on Luna transactions

Let me know your thoughts on this.

I think it’s a smart contract bug. LUNA transfer should be tax-free on mainnet. The TerraSwap contract incorrectly computes a non-zero amount of tax, withholding it instead of sending to the user.

  1. From this line in Terra Core you can see tax calculation for LUNA transfers is skipped:
  1. In the latest version of TerraSwap contract, tax calculation for LUNA transfers returns zero directly:
  1. Just to prove my point, I sent a 300 LUNA transfer on mainnet and was charged 0 tax:

1 Like

Thanks for the clarification on this! It does look like a bug in the terraswap smart contract.

There is also an issue with the LCD Client or the python implementation of it. The LCD Client also will return that the tax cap for luna is 1 Luna.

The following python script will print out the max taxes from the LCD client.

from terra_sdk.client.lcd import LCDClient
lcd_url = 'https://lcd.terra.dev'
terra = LCDClient(chain_id="columbus-4", url= lcd_url)
print('uluna tax cap: {}'.format(terra.treasury.tax_cap('uluna')))
print('usdr tax cap: {}'.format(terra.treasury.tax_cap('usdr')))
print('uusd tax cap: {}'.format(terra.treasury.tax_cap('uusd')))
print('ukrw tax cap: {}'.format(terra.treasury.tax_cap('ukrw')))

The script will print out the following:

uluna tax cap: 1000000uluna
usdr tax cap: 1000000usdr
uusd tax cap: 1422663uusd
ukrw tax cap: 1629831616ukrw

Same problem with the terra.js it seems:

import { LCDClient, Coin } from "@terra-money/terra.js";

const terra = new LCDClient({
  URL: "https://lcd.terra.dev/",
  chainID: "columbus-4",
});

async function run(denom: string) {
  const taxRate = await terra.treasury.taxRate();
  console.log("tax rate:", taxRate);

  const taxCap = await terra.treasury.taxCap(denom);
  console.log(`tax cap for ${denom}: ${taxCap.amount}`);

  const tax = await terra.utils.calculateTax(new Coin(denom, "100000000"));
  console.log(`estimated tax on 100000000 ${denom} transfer: ${tax.amount} ${denom}`);
}

run("uluna");

Returns:

tax rate: 0.005036952869425005
tax cap for uluna: 1000000
estimated tax on 100000000 uluna transfer: 503695 uluna

However, once LCD is set to Bombay testnet:

const terra = new LCDClient({
  URL: "https://bombay-lcd.terra.dev/",
  chainID: "bombay-0008",
});

The result is correct:

tax rate: 0.002467377735563951
tax cap for uluna: 0
estimated tax on 100000000 uluna transfer: 0 uluna

I can only guess there is also something wrong with the current LCD endpoint, but it seems to have been fixed in Bombay.

Thanks for the help again on this. The solution I guess is to wait until Columbus 5. Haha Wen Col 5 like always

3 Likes