AleoNet / snarkVM

A Virtual Machine for Zero-Knowledge Executions

Home Page:https://snarkvm.org

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[Bug] Credits.aleo

OzielLa opened this issue · comments

// Check if the initial bond amount is at least 100 credits.

image
To ensure proper execution, a minimum of 100 credits should be added by the validator. This addition should be placed after the code segment labeled "position validator_in_committee."

Is this a bug? What would be an example exploit?

Right now we only do the check when the validator is entering the committee. Afterwards, a validator can increase their self bond by smaller amounts than 100 credits.

The only transaction that lowers a validator balance is unbond_public which is where we ensure the validator is still over the minimum 100 credit threshold, otherwise we remove them from the committee.

Is this a bug? What would be an example exploit?

Right now we only do the check when the validator is entering the committee. Afterwards, a validator can increase their self bond by smaller amounts than 100 credits.

The only transaction that lowers a validator balance is unbond_public which is where we ensure the validator is still over the minimum 100 credit threshold, otherwise we remove them from the committee.

Currently, the code only checks if the initial stake is greater than 100. For subsequent stakes, it is unable to execute the check for values greater than 100.

Would it need to execute the check for greater than 100 for subsequent stakes? The only thing that would lower the stake is unbond_public which does the check to ensure the self bonded amount for a validator remains over 100.

Would it need to execute the check for greater than 100 for subsequent stakes? The only thing that would lower the stake is unbond_public which does the check to ensure the self bonded amount for a validator remains over 100.

Oh, I might have misunderstood. There is actually an initial requirement of 100 million (1,000,000,000,000) in the form of "gte r12 10_000_000_000_000u64 into r13;" for the first time. Here, the number 100 I mentioned earlier was mistakenly interpreted as the minimum staking requirement for validators each time.

That requirement is 10 million credits => 10_000_000_000_000u64. Since the validator key is necessarily hot (live on a machine connected to the internet), we made the self bond amount small ~100 credits but the entire delegation is still 10M credits.

Another difference with this flow is that a validator can become unbonded by a delegator who by removing their stake can put the total delegation for a validator below 10M.

great