mirror of
https://github.com/grassrootseconomics/cic-custodial.git
synced 2024-12-23 02:07:32 +01:00
Mohammed Sohail
8dc0dcf12d
* Gas limit is now 1M for all custodial related txs * Precise value to be determined after testing phase is over
38 lines
1.1 KiB
Go
38 lines
1.1 KiB
Go
package task
|
|
|
|
import (
|
|
"math/big"
|
|
"time"
|
|
|
|
"github.com/bsm/redislock"
|
|
)
|
|
|
|
const (
|
|
lockPrefix = "lock:"
|
|
lockRetryDelay = 25 * time.Millisecond
|
|
lockTimeout = 1 * time.Second
|
|
)
|
|
|
|
var (
|
|
// 20 gwei = max gas price we are willing to pay
|
|
// 250k = max gas limit
|
|
// minGasBalanceRequired is optimistic that the immidiate next transfer request will be successful
|
|
// but the subsequent one could fail (though low probability), therefore we can trigger a gas lock.
|
|
// Therefore our system wide threshold is 0.01 CELO or 10000000000000000 gas units
|
|
minGasBalanceRequired = big.NewInt(20000000000 * 250000 * 2)
|
|
)
|
|
|
|
// lockRetry will at most try to obtain the lock 20 times within ~0.5s.
|
|
// it is expected to prevent immidiate requeue of the task at the expense of more redis calls.
|
|
func lockRetry() redislock.RetryStrategy {
|
|
return redislock.LimitRetry(
|
|
redislock.LinearBackoff(lockRetryDelay),
|
|
20,
|
|
)
|
|
}
|
|
|
|
// balanceCheck compares the network balance with the system set min as threshold to execute a transfer.
|
|
func balanceCheck(networkBalance big.Int) bool {
|
|
return minGasBalanceRequired.Cmp(&networkBalance) < 0
|
|
}
|