ANJ Bonding curve

Hello Aragon friends!

I’m trying to understand the bonding curve for ANJ.

Is this the formula being used?

In that case what is the value for BalanceCollateral and what is the value for CW?

I tried the model at:

But I cannot get it to correct value for the current price of ANJ. If I set a reserve ratio to 45% I get in the ballpark of the current price. Is that correct?

In the model your are also using the formula:

final_price = m * (slider_ANJ_presale + slider_ANJ_bc)**n
n = 3
m = 1e-8

Which makes me even more confused. :slight_smile: If someone could explain that would be much appreciated!


The ANJ collateral (staked ANT) you can see here

I just found this here

Total supply

The current total supply of ANJ can be found by checking the ANJ contract page on a block explorer that shows this information, such as Etherscan.

Maximum supply

There is no maximum ANJ supply per se , other than the limit imposed by the total amount of ANT available to deposit in the ANJ bonding curve. To calculate the theoretical maximum supply, we can follow this method:

ANJ comes from a bonding curve that mints ANJ in exchange for ANT. This is the only way to mint ANJ. The ANJ bonding curve is of the type:

In our case the value of n is 4, taking into account that the reserve ratio equals 1/100 .

To get m , we use the price set by the bonding curve when the bonding curve went live, which was the same as the pre-activation price i.e., 100 ANJ per 1 ANT, and the total amount of ANJ minted during pre-activation, 101,490,826.112967760974865700 ANJ . So:


If we take the integral of that curve between two ANJ supply points, x_0 and x_1 , we get the total amount of ANT contributed to mint x_1 - x_0 ANJ tokens.

So if all the existing ANT, let’s call it T , were to be contributed to the curve, that amount would be the integral between 0 and the maximum possible amount of ANJ, let’s call it J :

Now we substitute T with the current total supply of ANT, 39,609,523.80952380954 :

Therefore, given a total supply of 39,609,523.80952380954 ANT , the theoretical maximum supply of ANJ is 350,868,849.187414177 ANJ .

To try calculating the ANJ supply with other amounts of ANT deposited in the bonding curve, replace T in this formula with the desired ANT amount:

Thanks a lot!

100 % onboard with the theoretical total supply.

What I’m trying to understand though is how the bonding curve looks and where (on the curve) we currently are.

y = m * (supplyANJ)^n

m= ?
supplyANJ= 122 000 000 (rn)

What values are m and n and why? (what do they represent?)

On the page wiki page you linked

n = 4

but in the model

m = 4.241277525929538e-10

The bonding curve has nothing to do with this?

PriceToken = BalanceCollateral / TokenSupply * Connector Weight

And how is it different?

Much appreciado!

1 Like

I have no clue would love to understand this as well!

I would like to see where ANJ is on the bonding curve as well! Next to the price of ANJ there should be the bonding curve with a red dot so everyone can see where ANJ is at the moment + the bonding curve formula which they explain it in very simple terms and why they choose those parameters and what they stand for.

I don’t understand why they used 101,490,826.112967760974865700 ANJ as the amount of ANJ minted during pre-activation and don’t add the 11,276,758.456996417886096188 ANJ, which the Aragon Network Governor Council minted. For what to the Aragon Network DAO needs the 11,276,758.456996417886096188 ANJ ? (see the funds in the Aragon Network DAO)

Exactly! :slight_smile:

I’ve looked through pretty much all the docs and there are many different terms being used which makes it confusing.

Anyone from Aragon who can clarify?



yes, we are using the Bancor formula.

The main assumption of Bancor formula for bonding curves is that the so-called “reserve ratio”, determined by the proportion between the amountof collateral token (ANT in our case) staked in the curve and the market cap of the bonded token (ANJ for us), is constant. That market cap is computed as the total supply of the token multiplied by the current price denominated in the collateral token. Let’s put some numeric examples:

Imagine at some point there are 100M ANJ tokens in circulation, there are 250k ANT tokens staked in the curve and the current price is 1 ANJ = 0.01 ANT. Then the reserve ratio will be:

R = (2.5 ⋅ 105) / (10-2 ⋅ 108) = 0.25

So the reserve ratio will be of 25%, and it will always be like that, now matter how many buy or sell operations occur on the curve.

The formula takes the form of:

y = m ⋅ x ^ n


  • x is the total supply of the bonded token (ANJ in our case)
  • y is the price denominated in the collateral token (ANT in our case)
  • n is equivalent to 1 / R - 1

If you want to dive deeper into these topics, you can check this article by Slava Balasanov, this one by Billy Rennekamp or this one by Alex Pinto.

Also, you’d rather use the original version of that observable, it seems there is a bug in that other one:


Thanks man! Will look through and see if I figure it out :slight_smile:

Lets say 100M ANJ tokens are in circulation, there are 1M ANT tokens staked in the curve, y is 1 ANJ = 0.01 ANT and R = 0.25 . Now another 1M ANT get staked into the curve. What is the new y ?

I just put the total ANT staked (T) in the bonding curve in this formula :

and then I put the result (total supply of the bonded ANJ) in this formula: y = m ⋅ x ^ n


  • x is the total supply of the bonded token (ANJ in our case)
  • y is the price denominated in the collateral token (ANT in our case)
  • n is equivalent to 1 / 0.25 - 1
  • m = image

my result is strange

the marketcap valuation based on the bonding curve is strange to me.

For example:

  • The current price per ANJ is 0.01 ANT, the ANJ supply is 100M, 1M ANT (7M$) are staked, ANT price is 7$ and the marketcap of ANJ is 0.07$ * 100M ANJ = $7M.
  • Now I stake 3M ANT (21M$) into the bonding curve and I mint 100M ANJ for that. Now the price has increased from 0.01 ANT per ANJ to 0.08 ANT (8x) per ANJ and the new marketcap is 0.56$ * 200M ANJ = $112M (16x)

This is a bit confusing for me because I would think at this point that ANJ is overvalued but the price of ANJ doesn’t move as quickly as the marketcap of ANJ and only 4M ANT are staked into ANJ which is only 10% of ANT. I would then think wether Aragon Court only makes 10% of the value of the hole Aragon Ecosystem. I think the % of ANT collateral in the ANJ bonding curve compared to total ANT supply is a better indicator for valuation than the marketcap of ANJ.

I think bonding curve tokens should be marked on all exchanges and sites like coingecko and coinmarketcap as “bonding curve tokens” with a link to the bonding curve graph where people see the collateral, the formula and where on the graph they are at the moment. It should be very clear for the users and easy to find. This would prevent users from making mistakes and also rethink the valuation of the coin without the focus on ANJ marketcap so much.

How do you get this 100M? Can you send the math details?
I would recommend using the formula in that article I mentioned:

k = s ((p/b+1)^(1/(n+1))-1)


  • s is the ANJ total supply
  • b is the ANT balance in the curve
  • n is 3
  • p is the amount of newly deposited ANT tokens
  • k is the amount of newly minted ANJ tokens

Also, with those numbers, the reserve ratio won’t be 25%, as R = curve balance / (price * total supply), therfore, R = 1M/(0.01*100M) = 1. This means n=1/R - 1 = 0

I just used your “Observable notebook” to do this. As I said I don’t get any good numbers out of those formulas. So I typed in:

  • ANJ minted during Phase 1 (before Feb 10th): 100M . ANJ minted during pre-activation, 101,490,826.112967760974865700 ANJ
  • ANJ minted(+)/burned(-) through Bonding Curve: 100M . Total ANJ minted: 200M .

and thats all.

The current price of ANJ is $0.072 and the price of ANT is $6.8 , so the current ANJ price = 0.01 ANT. 1M ANT are staked and 100M ANJ are in circulation.

If you query the ANT balance for the bonding curve here:

“12. balanceOf”, use 0xEc0DD1579551964703246BeCfbF199C27Cb84485 as “_owner” param, you’ll see that there are ~303,398 ANT tokens in it, not 1M.

I don’t understand. So this numbers are wrong?

now it says 312k ANT not 1M anymore. Where went the 700k ANT? " 100 ANJ per 1 ANT, and the total amount of ANJ minted during pre-activation was 101,490,826.112967760974865700 ANJ"

Ah so the 700k + 11M ANJ went to the Aragon Network DAO.

Would be nice if this is displayed nicely. just say on the site something like:
Total amount of ANJ minted during pre-activation (date?) was 101,490,826.112967760974865700 ANJ (100 ANJ per 1 ANT). 75% of the ANT + additional 11M ANJ got minted and went to the Aragon Network DAO. Aragon Network DAO is (will be) controlled by ANT holders (link to ANDAO). ANJ will always be backed by 25% of ANT.
(click here to see the bonding curve)

Thanks for all the help. Just one more question:

Could you set this model/fork it and make it work with the price/supply values that we currently have?

I’m just trying to figure out where we are on the curve and the slope.

Thank you sir!

As the second part of the values are dynamic, I don’t think it makes sense to be constantly changing the model, specially because you can just move those sliders to adjust to the current situation: setting the first one to the right most should be a good approximation, then check the total supply here to adjust the second one.

Of course, you can fork the observable yourself and use it as you please.

I absolutely agree with that. However I’m just not able to get the correct USD price for ANJ.

I set the sliders according to current total supply:
Total ANJ minted: 115M

In the model I get:
1 ANJ = 0.01521 ANT

Coingecko ANJ: $0.058
Coingecko ANT: $5.44

5,44*0,01521 = $0,0827 per ANJ

On 1 ANJ = 0.01077 ANT

5,44*0,01077 = $0,058 per ANJ

So it checks out there!

Any thoughts? Thanks!

1 Like

hm, good point, I don’t know what’s going on here, I’ll try to figure it out, there may be some wrong calculation in that model. Thanks for pointing this out!

Awesome, thanks for your patience :slight_smile: lmk if you figure it out!

1 Like

yes, fixed! you can check it out here:

(there’s some lack of precision, but it’s quite close now)

Thanks again!

Hmm, I seem to still be getting the same result. 1 ANJ = 0.01521 ANT. Maybe your change doesn’t translate with the link in some way? Thanks!

1 Like