Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions packages/actions/src/contract-name.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,9 @@ export type ContractName =
| 'Governance'
| 'GoldToken'
| 'LockedGold'
| 'Reserve'
| 'ScoreManager'
| 'SortedOracles'
| 'StableToken'
| 'StableTokenEUR'
| 'StableTokenBRL'
Expand Down
19 changes: 19 additions & 0 deletions packages/actions/src/contracts/reserve.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { reserveABI } from '@celo/abis'
import { Address, getContract, GetContractReturnType } from 'viem'
import { Clients } from '../client.js'
import { resolveAddress } from './registry.js'

export type ReserveContract<T extends Clients = Clients> = GetContractReturnType<
typeof reserveABI,
T
>

export async function getReserveContract<T extends Clients = Clients>(
clients: T
): Promise<ReserveContract<T>> {
return getContract({
address: await resolveAddress(clients.public, 'Reserve'),
abi: reserveABI,
client: clients,
})
}
19 changes: 19 additions & 0 deletions packages/actions/src/contracts/sorted-oracles.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { sortedOraclesABI } from '@celo/abis'
import { Address, getContract, GetContractReturnType } from 'viem'
import { Clients } from '../client.js'
import { resolveAddress } from './registry.js'

export type SortedOraclesContract<T extends Clients = Clients> = GetContractReturnType<
typeof sortedOraclesABI,
T
>

export async function getSortedOraclesContract<T extends Clients = Clients>(
clients: T
): Promise<SortedOraclesContract<T>> {
return getContract({
address: await resolveAddress(clients.public, 'SortedOracles'),
abi: sortedOraclesABI,
client: clients,
})
}
12 changes: 6 additions & 6 deletions packages/cli/src/commands/network/parameters.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ testWithAnvilL2('network:parameters', (web3) => {
maxNumGroupsVotedFor: 10
totalVotes: 60000000000000000000000 (~6.000e+22)
EpochManager:
currentEpochNumber: 4
epochDuration: 86400
currentEpochNumber: 4
epochDuration: 86400 (~8.640e+4)
isTimeForNextEpoch: false
FeeCurrencyDirectory:
intrinsicGasForAlternativeFeeCurrency:
Expand All @@ -42,7 +42,7 @@ testWithAnvilL2('network:parameters', (web3) => {
Execution: 1 week
Referendum: 1 day
LockedCelo:
totalLockedGold: 120000000000000000000000 (~1.200e+23)
totalLockedCelo: 120000000000000000000000 (~1.200e+23)
unlockingPeriod: 6 hours
Reserve:
frozenReserveGoldDays: 0
Expand All @@ -54,15 +54,15 @@ testWithAnvilL2('network:parameters', (web3) => {
SortedOracles:
reportExpiry: 5 minutes
Validators:
commissionUpdateDelay: 3 days
commissionUpdateDelay: 14 hours 24 minutes
downtimeGracePeriod: 0
groupLockedGoldRequirements:
groupLockedCeloRequirements:
duration: 6 months
value: 10000000000000000000000 (~1.000e+22)
maxGroupSize: 2
membershipHistoryLength: 60
slashingMultiplierResetPeriod: 1 month
validatorLockedGoldRequirements:
validatorLockedCeloRequirements:
duration: 2 months
value: 10000000000000000000000 (~1.000e+22)",
],
Expand Down
5 changes: 3 additions & 2 deletions packages/cli/src/commands/network/parameters.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { Flags } from '@oclif/core'
import { BaseCommand } from '../../base'
import { printValueMapRecursive } from '../../utils/cli'
import { ViewCommmandFlags } from '../../utils/flags'
import { getNetworkConfig } from '../../utils/network'

export default class Parameters extends BaseCommand {
static description =
Expand All @@ -17,9 +18,9 @@ export default class Parameters extends BaseCommand {
}

async run() {
const kit = await this.getKit()
const client = await this.getPublicClient()
const res = await this.parse(Parameters)
const config = await kit.getNetworkConfig(!res.flags.raw)
const config = await getNetworkConfig(client, !res.flags.raw)
printValueMapRecursive(config)
}
}
51 changes: 51 additions & 0 deletions packages/cli/src/utils/duration.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import BigNumber from 'bignumber.js'

function valueToBigNumber(input: BigNumber.Value): BigNumber {
return new BigNumber(input.toString())
}

enum TimeDurations {
millennium = 31536000000000,
century = 3153600000000,
decade = 315360000000,
year = 31536000000,
quarter = 7776000000,
month = 2592000000,
week = 604800000,
day = 86400000,
hour = 3600000,
minute = 60000,
second = 1000,
millisecond = 1,
}

type TimeUnit = keyof typeof TimeDurations

// taken mostly from https://gist.github.com/RienNeVaPlus/024de3431ae95546d60f2acce128a7e2
export function secondsToDurationString(
durationSeconds: BigNumber.Value,
outputUnits: TimeUnit[] = ['year', 'month', 'week', 'day', 'hour', 'minute', 'second']
): string {
let durationMilliseconds = valueToBigNumber(durationSeconds)
.times(TimeDurations.second)
.toNumber()
if (durationMilliseconds <= 0) {
return 'past'
}
const durations = outputUnits.reduce((res: Map<TimeUnit, number>, key) => {
const unitDuration = TimeDurations[key]
const value = Math.floor(durationMilliseconds / unitDuration)
durationMilliseconds -= value * unitDuration
return res.set(key, value)
}, new Map())
let s = ''
durations.forEach((value, unit) => {
if (value > 0) {
s += `${value} ${unit}${value !== 1 ? 's' : ''} `
}
})
return s.trim()
}

export const blocksToDurationString = (input: BigNumber.Value): string =>
secondsToDurationString(valueToBigNumber(input).times(1)) // Celo block time is 1 second
Loading
Loading