Skip to content

Commit 601fa30

Browse files
committed
feat: preview
1 parent a7a90d0 commit 601fa30

File tree

4 files changed

+185
-7
lines changed

4 files changed

+185
-7
lines changed

packages/contract-helpers/src/umbrella/StakeGateway.test.ts

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { BigNumber, Wallet } from 'ethers';
1+
import { BigNumber, providers, Wallet } from 'ethers';
22
import { splitSignature } from 'ethers/lib/utils';
33
import { ProtocolAction } from '../commons/types';
44
import {
@@ -14,7 +14,16 @@ describe('StakeGateway', () => {
1414
const { address: STAKE_TOKEN } = makePair('STAKE_TOKEN');
1515
const { address: ALICE, privateKey: ALICE_PRIVATE_KEY } = makePair('ALICE');
1616
const aliceWallet = new Wallet(ALICE_PRIVATE_KEY);
17-
const stakeGatewayService = new StakeGatewayService(STAKE_TOKEN);
17+
18+
const stakeGatewayService = new StakeGatewayService(
19+
new providers.JsonRpcProvider(),
20+
STAKE_TOKEN,
21+
);
22+
// @ts-expect-error readonly
23+
stakeGatewayService.contract = {
24+
previewRedeem: jest.fn(),
25+
previewStake: jest.fn(),
26+
};
1827
const stakeTokenInterface = StakeGateway__factory.createInterface();
1928
describe('stake', () => {
2029
it('should properly create the transaction', () => {
@@ -252,4 +261,22 @@ describe('StakeGateway', () => {
252261
expect(decoded[1].toString()).toEqual(amount);
253262
});
254263
});
264+
describe('preview', () => {
265+
it('should not throw on previewRedeem', async () => {
266+
await expect(
267+
stakeGatewayService.previewRedeem({
268+
stakeToken: STAKE_TOKEN,
269+
amount: '1',
270+
}),
271+
).resolves.not.toThrow();
272+
});
273+
it('should not throw on previewStake', async () => {
274+
await expect(
275+
stakeGatewayService.previewStake({
276+
stakeToken: STAKE_TOKEN,
277+
amount: '1',
278+
}),
279+
).resolves.not.toThrow();
280+
});
281+
});
255282
});

packages/contract-helpers/src/umbrella/StakeGateway.ts

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import { SignatureLike, splitSignature } from '@ethersproject/bytes';
2-
import { BigNumber, PopulatedTransaction } from 'ethers';
2+
import { BigNumber, PopulatedTransaction, providers } from 'ethers';
33

44
import { ProtocolAction } from '../commons/types';
55
import { gasLimitRecommendations } from '../commons/utils';
6-
import { StakeGatewayInterface } from './typechain/StakeGateway';
6+
import { StakeGatewayInterface, StakeGateway } from './typechain/StakeGateway';
77
import { StakeGateway__factory } from './typechain/StakeGateway__factory';
88

99
interface StakeGatewayStakeParams {
@@ -54,9 +54,16 @@ interface StakeGatewayRedeemATokensParams {
5454

5555
export class StakeGatewayService {
5656
private readonly interface: StakeGatewayInterface;
57-
58-
constructor(private readonly stakeGatewayAddress: string) {
57+
private readonly contract: StakeGateway;
58+
constructor(
59+
provider: providers.Provider,
60+
private readonly stakeGatewayAddress: string,
61+
) {
5962
this.interface = StakeGateway__factory.createInterface();
63+
this.contract = StakeGateway__factory.connect(
64+
stakeGatewayAddress,
65+
provider,
66+
);
6067
}
6168

6269
stake({ sender, stakeToken, amount }: StakeGatewayStakeParams) {
@@ -221,4 +228,20 @@ export class StakeGatewayService {
221228
),
222229
};
223230
}
231+
232+
async previewStake({
233+
stakeToken,
234+
amount,
235+
}: Omit<StakeGatewayStakeParams, 'sender'>) {
236+
const shares = await this.contract.previewStake(stakeToken, amount);
237+
return shares;
238+
}
239+
240+
async previewRedeem({
241+
stakeToken,
242+
amount,
243+
}: Omit<StakeGatewayRedeemParams, 'sender'>) {
244+
const shares = await this.contract.previewRedeem(stakeToken, amount);
245+
return shares;
246+
}
224247
}

packages/contract-helpers/src/umbrella/typechain/StakeGateway.ts

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ export interface StakeGatewayInterface extends utils.Interface {
3232
'emergencyEtherTransfer(address,uint256)': FunctionFragment;
3333
'emergencyTokenTransfer(address,address,uint256)': FunctionFragment;
3434
'owner()': FunctionFragment;
35+
'previewRedeem(address,uint256)': FunctionFragment;
36+
'previewStake(address,uint256)': FunctionFragment;
3537
'redeem(address,uint256)': FunctionFragment;
3638
'redeemATokens(address,uint256)': FunctionFragment;
3739
'redeemNativeTokens(address,uint256)': FunctionFragment;
@@ -51,6 +53,8 @@ export interface StakeGatewayInterface extends utils.Interface {
5153
| 'emergencyEtherTransfer'
5254
| 'emergencyTokenTransfer'
5355
| 'owner'
56+
| 'previewRedeem'
57+
| 'previewStake'
5458
| 'redeem'
5559
| 'redeemATokens'
5660
| 'redeemNativeTokens'
@@ -74,6 +78,14 @@ export interface StakeGatewayInterface extends utils.Interface {
7478
values: [string, string, BigNumberish],
7579
): string;
7680
encodeFunctionData(functionFragment: 'owner', values?: undefined): string;
81+
encodeFunctionData(
82+
functionFragment: 'previewRedeem',
83+
values: [string, BigNumberish],
84+
): string;
85+
encodeFunctionData(
86+
functionFragment: 'previewStake',
87+
values: [string, BigNumberish],
88+
): string;
7789
encodeFunctionData(
7890
functionFragment: 'redeem',
7991
values: [string, BigNumberish],
@@ -143,6 +155,14 @@ export interface StakeGatewayInterface extends utils.Interface {
143155
data: BytesLike,
144156
): Result;
145157
decodeFunctionResult(functionFragment: 'owner', data: BytesLike): Result;
158+
decodeFunctionResult(
159+
functionFragment: 'previewRedeem',
160+
data: BytesLike,
161+
): Result;
162+
decodeFunctionResult(
163+
functionFragment: 'previewStake',
164+
data: BytesLike,
165+
): Result;
146166
decodeFunctionResult(functionFragment: 'redeem', data: BytesLike): Result;
147167
decodeFunctionResult(
148168
functionFragment: 'redeemATokens',
@@ -245,6 +265,18 @@ export interface StakeGateway extends BaseContract {
245265

246266
owner(overrides?: CallOverrides): Promise<[string]>;
247267

268+
previewRedeem(
269+
stakeToken: string,
270+
amount: BigNumberish,
271+
overrides?: CallOverrides,
272+
): Promise<[BigNumber] & { shares: BigNumber }>;
273+
274+
previewStake(
275+
stakeToken: string,
276+
amount: BigNumberish,
277+
overrides?: CallOverrides,
278+
): Promise<[BigNumber] & { shares: BigNumber }>;
279+
248280
redeem(
249281
stakeToken: string,
250282
amount: BigNumberish,
@@ -329,6 +361,18 @@ export interface StakeGateway extends BaseContract {
329361

330362
owner(overrides?: CallOverrides): Promise<string>;
331363

364+
previewRedeem(
365+
stakeToken: string,
366+
amount: BigNumberish,
367+
overrides?: CallOverrides,
368+
): Promise<BigNumber>;
369+
370+
previewStake(
371+
stakeToken: string,
372+
amount: BigNumberish,
373+
overrides?: CallOverrides,
374+
): Promise<BigNumber>;
375+
332376
redeem(
333377
stakeToken: string,
334378
amount: BigNumberish,
@@ -413,6 +457,18 @@ export interface StakeGateway extends BaseContract {
413457

414458
owner(overrides?: CallOverrides): Promise<string>;
415459

460+
previewRedeem(
461+
stakeToken: string,
462+
amount: BigNumberish,
463+
overrides?: CallOverrides,
464+
): Promise<BigNumber>;
465+
466+
previewStake(
467+
stakeToken: string,
468+
amount: BigNumberish,
469+
overrides?: CallOverrides,
470+
): Promise<BigNumber>;
471+
416472
redeem(
417473
stakeToken: string,
418474
amount: BigNumberish,
@@ -507,6 +563,18 @@ export interface StakeGateway extends BaseContract {
507563

508564
owner(overrides?: CallOverrides): Promise<BigNumber>;
509565

566+
previewRedeem(
567+
stakeToken: string,
568+
amount: BigNumberish,
569+
overrides?: CallOverrides,
570+
): Promise<BigNumber>;
571+
572+
previewStake(
573+
stakeToken: string,
574+
amount: BigNumberish,
575+
overrides?: CallOverrides,
576+
): Promise<BigNumber>;
577+
510578
redeem(
511579
stakeToken: string,
512580
amount: BigNumberish,
@@ -592,6 +660,18 @@ export interface StakeGateway extends BaseContract {
592660

593661
owner(overrides?: CallOverrides): Promise<PopulatedTransaction>;
594662

663+
previewRedeem(
664+
stakeToken: string,
665+
amount: BigNumberish,
666+
overrides?: CallOverrides,
667+
): Promise<PopulatedTransaction>;
668+
669+
previewStake(
670+
stakeToken: string,
671+
amount: BigNumberish,
672+
overrides?: CallOverrides,
673+
): Promise<PopulatedTransaction>;
674+
595675
redeem(
596676
stakeToken: string,
597677
amount: BigNumberish,

0 commit comments

Comments
 (0)