Skip to content

Improve condition for Commitment button and display commitment end date #723

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
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
10 changes: 9 additions & 1 deletion src/pages/Staking/StakeDetailsPage/index.tsx
Original file line number Diff line number Diff line change
@@ -75,6 +75,12 @@ const StakeDetailsPage: FC = () => {
stakingProviderAddress || AddressZero
)

const endCommitment = tacoApp.stakingProviderInfo?.endCommitment
const isCommited = (Number(endCommitment) ?? 0) > 0
const endCommitmentDate = new Date(
(Number(endCommitment) ?? 0) * 1000
).toLocaleDateString()

const isInActiveStake = BigNumber.from(stake?.totalInTStake ?? "0").isZero()

const { total: rewardsForStake } = useAppSelector((state) =>
@@ -166,10 +172,12 @@ const StakeDetailsPage: FC = () => {
</StakeDetailRow>
</Stack>
</SimpleGrid>
{tacoApp.isAuthorized && (
{tacoApp.isAuthorized && !isCommited ? (
<Button onClick={handleCommitToTaco} type="submit">
Commit to TACo
</Button>
) : (
<p>Your commitment ends on {endCommitmentDate}</p>
)}
</Card>
) : (
1 change: 1 addition & 0 deletions src/store/staking-applications/slice.ts
Original file line number Diff line number Diff line change
@@ -287,6 +287,7 @@ export const stakingApplicationsSlice = createSlice({
deauthorizationCreatedAt: undefined,
isOperatorInPool: undefined,
operator: AddressZero,
stakingProviderInfo: undefined,
}

state.randomBeacon.stakingProviders.data[stakingProvider] = {
42 changes: 42 additions & 0 deletions src/threshold-ts/applications/index.ts
Original file line number Diff line number Diff line change
@@ -38,6 +38,20 @@ export interface AuthorizationParameters<
authorizationDecreaseChangePeriod: NumberType
}

export interface StakingProviderInfo<
NumberType extends BigNumberish = BigNumber
> {
operator: string
operatorConfirmed: boolean
operatorStartTimestamp: NumberType
authorized: NumberType
deauthorizing: NumberType
endDeauthorization: NumberType
tReward: NumberType
rewardPerTokenPaid: NumberType
endCommitment: NumberType
}

export interface StakingProviderAppInfo<
NumberType extends BigNumberish = BigNumber
> {
@@ -75,6 +89,8 @@ export interface StakingProviderAppInfo<
* it means that the operator for a given staking provider is not set.
*/
isOperatorInPool: boolean | undefined

stakingProviderInfo?: StakingProviderInfo | undefined
}

/**
@@ -202,6 +218,8 @@ export interface IApplication {
*/
stakingProviderToOperator(stakingProvider: string): Promise<string>

stakingProviderInfo(stakingProvider: string): Promise<StakingProviderInfo>

/**
* Used to get staking provider address mapped to the given registered
* operator address
@@ -314,6 +332,15 @@ export class Application implements IApplication {
},
]

const tacoCalls: ContractCall[] = [
{
interface: this.contract.interface,
address: this.contract.address,
method: "stakingProviderInfo",
args: [stakingProvider],
},
]

const [
authorizedStake,
pendingAuthorizationDecrease,
@@ -323,6 +350,14 @@ export class Application implements IApplication {
[operator],
] = await this._multicall.aggregate(calls)

let stakingProviderInfo
try {
;[stakingProviderInfo] = await this._multicall.aggregate(tacoCalls)
} catch (error) {
console.warn("Failed to aggregate tacoCalls", error)
stakingProviderInfo = undefined
}

let isOperatorInPool = undefined
if (operator && !isAddressZero(operator)) {
try {
@@ -368,6 +403,7 @@ export class Application implements IApplication {
deauthorizationCreatedAt,
isOperatorInPool,
operator,
stakingProviderInfo,
}
}

@@ -448,6 +484,12 @@ export class Application implements IApplication {
)
}

stakingProviderInfo = async (
stakingProvider: string
): Promise<StakingProviderInfo> => {
return await this._application.stakingProviderInfo(stakingProvider)
}

stakingProviderToOperator = async (
stakingProvider: string
): Promise<string> => {