-
Notifications
You must be signed in to change notification settings - Fork 261
Expand file tree
/
Copy pathsuperTokenEndpoints.ts
More file actions
119 lines (107 loc) · 4.9 KB
/
superTokenEndpoints.ts
File metadata and controls
119 lines (107 loc) · 4.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
import {NativeAssetSuperToken, WrapperSuperToken} from '@superfluid-finance/sdk-core';
import {getFramework} from '../../../../sdkReduxConfig';
import {type TransactionInfo} from '../../../argTypes';
import {registerNewTransactionAndReturnQueryFnResult} from '../../../transactionTrackerSlice/registerNewTransaction';
import {createGeneralTags, createSpecificTags} from '../../cacheTags/CacheTagTypes';
import {type RpcEndpointBuilder} from '../rpcEndpointBuilder';
import {
type SuperTokenDowngradeMutation,
type SuperTokenTransferMutation,
type SuperTokenUpgradeAllowanceQuery,
type SuperTokenUpgradeMutation,
} from './superTokenArgs';
export const createSuperTokenEndpoints = (builder: RpcEndpointBuilder) => ({
superTokenUpgrade: builder.mutation<TransactionInfo, SuperTokenUpgradeMutation>({
queryFn: async (arg, queryApi) => {
const framework = await getFramework(arg.chainId);
const superToken = await framework.loadSuperToken(arg.superTokenAddress);
const canUpgradeTokenType =
superToken instanceof WrapperSuperToken || superToken instanceof NativeAssetSuperToken;
if (!canUpgradeTokenType) {
throw new Error('Only WrapperSuperToken or NativeAssetSuperToken can be upgraded.');
}
const transactionResponse = await superToken
.upgrade({
amount: arg.amountWei,
overrides: arg.overrides,
})
.exec(arg.signer);
return await registerNewTransactionAndReturnQueryFnResult({
transactionResponse,
chainId: arg.chainId,
signerAddress: await arg.signer.getAddress(),
dispatch: queryApi.dispatch,
title: 'Upgrade to Super Token',
extraData: arg.transactionExtraData,
});
},
}),
superTokenUpgradeAllowance: builder.query<string, SuperTokenUpgradeAllowanceQuery>({
queryFn: async (arg) => {
const framework = await getFramework(arg.chainId);
const superToken = await framework.loadSuperToken(arg.superTokenAddress);
// TODO(KK): "!"
return {
data: await superToken.underlyingToken!.allowance({
providerOrSigner: framework.settings.provider,
owner: arg.accountAddress,
spender: superToken.address,
}),
};
},
providesTags: (_result, _error, arg) => [
...createGeneralTags({chainId: arg.chainId}),
...createSpecificTags({
chainId: arg.chainId,
address1: arg.superTokenAddress,
address2: arg.accountAddress,
}),
],
}),
superTokenDowngrade: builder.mutation<TransactionInfo, SuperTokenDowngradeMutation>({
queryFn: async (arg, queryApi) => {
const framework = await getFramework(arg.chainId);
const superToken = await framework.loadSuperToken(arg.superTokenAddress);
const canDowngradeTokenType =
superToken instanceof WrapperSuperToken || superToken instanceof NativeAssetSuperToken;
if (!canDowngradeTokenType) {
throw new Error('Only WrapperSuperToken or NativeAssetSuperToken can be downgraded.');
}
const transactionResponse = await superToken
.downgrade({
amount: arg.amountWei,
overrides: arg.overrides,
})
.exec(arg.signer);
return await registerNewTransactionAndReturnQueryFnResult({
transactionResponse,
chainId: arg.chainId,
signerAddress: await arg.signer.getAddress(),
dispatch: queryApi.dispatch,
title: 'Downgrade from Super Token',
extraData: arg.transactionExtraData,
});
},
}),
superTokenTransfer: builder.mutation<TransactionInfo, SuperTokenTransferMutation>({
queryFn: async (arg, queryApi) => {
const framework = await getFramework(arg.chainId);
const superToken = await framework.loadSuperToken(arg.superTokenAddress);
const transactionResponse = await superToken
.transfer({
amount: arg.amountWei,
receiver: arg.receiverAddress,
overrides: arg.overrides,
})
.exec(arg.signer);
return await registerNewTransactionAndReturnQueryFnResult({
transactionResponse,
chainId: arg.chainId,
signerAddress: await arg.signer.getAddress(),
dispatch: queryApi.dispatch,
title: 'Transfer Super Token',
extraData: arg.transactionExtraData,
});
},
}),
});