Skip to content

Commit 381124e

Browse files
authored
SDK vault methods (#84)
* [sdk vault methods] update transactions * [sdk vault methods] update check access * [sdk vault methods] update methods * [sdk vault methods] add operate multicall * [sdk vault methods] update sdk multicall * [sdk vault methods] update sdk multicall * [sdk vault methods] update readme * [sdk vault methods] update sdk * [sdk vault methods] update sdk * [sdk vault methods] fix types * [sdk vault methods] update readme * [sdk vault methods] update deps * [sdk vault methods] update validation * [sdk vault methods] update operate contract * [sdk vault methods] update v3 sdk * [sdk vault methods] update v3 sdk * [sdk vault methods] update v3 sdk
1 parent 9cbc92a commit 381124e

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

69 files changed

+881
-555
lines changed

README.md

+66-70
Original file line numberDiff line numberDiff line change
@@ -120,13 +120,12 @@ promise.abort()
120120
```
121121

122122
##### Table of transactions:
123-
| **Vault** | **osToken** |
124-
|-------------------------------------------------------|------|
125-
| [sdk.vault.deposit](#sdkvaultdeposit) | [sdk.osToken.mint](#sdkostokenmint) |
126-
| [sdk.vault.withdraw](#sdkvaultwithdraw) | [sdk.osToken.burn](#sdkostokenburn) |
127-
| [sdk.vault.claimExitQueue](#sdkvaultclaimexitqueue) |
128-
| [sdk.vault.updateWhitelist](#sdkvaultupdatewhitelist) |
129-
| [sdk.vault.updateBlocklist](#sdkvaultupdateblocklist) |
123+
| **Vault** | **osToken** |
124+
|-----------------------------------------------------------------------------|------|
125+
| [sdk.vault.deposit](#sdkvaultdeposit) | [sdk.osToken.mint](#sdkostokenmint) |
126+
| [sdk.vault.withdraw](#sdkvaultwithdraw) | [sdk.osToken.burn](#sdkostokenburn) |
127+
| [sdk.claimExitQueue](#sdkvaultclaimexitqueue) |
128+
| [sdk.vault.operate](#sdkvaultoperate) |
130129

131130
## API-Vault
132131

@@ -1099,95 +1098,92 @@ const { data, to } = await sdk.vault.claimExitQueue.encode(params)
10991098
const gas = await sdk.vault.claimExitQueue.estimateGas(params)
11001099
```
11011100
---
1102-
### `sdk.vault.updateWhitelist`
1101+
### `sdk.vault.operate`
11031102

11041103
#### Description:
11051104

1106-
Update the whitelist of addresses for a private vault.
1107-
The whitelist contains addresses allowed to stake or mint within
1108-
the private vault. This method can only be called by the vault
1109-
access manager.
1105+
Updates the vault by authorized personnel such as the vault admin, whitelister, blocklist manager, or keys manager.
11101106

11111107

11121108
#### Arguments:
11131109

1114-
| Name | Type | Required | Description |
1115-
|------|----------------------------------------------|-------------|-----------------------------------------------------------------------------------------------------------------------------|
1116-
| whitelist | `Array<{ address: string, isNew: boolean }>` | **Yes** | List of addresses to update the whitelist. Use `isNew: true` to add a new address, `isNew: false` to remove an existing one |
1117-
| userAddress | `string` | **Yes** | The address of the user making the update (access manager) |
1118-
| vaultAddress | `string` | **Yes** | The address of the private vault |
1110+
| Name | Type | Required | Access | Description |
1111+
|--------------|----------------------------------------------|----------|-------------------|-----------------------------------------------------------------------------------------------------------------------------|
1112+
| whitelist | `Array<{ address: string, isNew: boolean }>` | **No** | Whitelister | List of addresses to update the whitelist. Use `isNew: true` to add a new address, `isNew: false` to remove an existing one |
1113+
| blocklist | `Array<{ address: string, isNew: boolean }>` | **No** | Blocklist manager | List of addresses to update the blocklist. Use `isNew: true` to add a new address, `isNew: false` to remove an existing one |
1114+
| keysManager | `string` | **No** | Admin | Address of the vault keys manager |
1115+
| whitelister | `string` | **No** | Admin | Address of the vault whitelister |
1116+
| feeRecipient | `string` | **No** | Admin | Address of the vault fee recipient |
1117+
| validatorsRoot | `string` | **No** | Keys manager | The vault validators merkle tree root |
1118+
| blocklistManager | `string` | **No** | Admin | The blocklisted vault blocklist manager |
1119+
| metadataIpfsHash | `string` | **No** | Admin | The vault metadata IPFS hash |
1120+
| userAddress | `string` | **Yes** | - | The address of the user making the update (admin, whitelister, blocklist manager or keys manager) |
1121+
| vaultAddress | `string` | **Yes** | - | The address of the vault |
11191122

11201123
#### Example:
11211124

11221125
```ts
1123-
const whitelist = [
1124-
{
1125-
address: '0x...',
1126-
isNew: true,
1127-
},
1128-
{
1129-
address: '0x...',
1130-
isNew: false,
1131-
},
1132-
]
1133-
1126+
// Data to update the vault by admin.
11341127
const params = {
1135-
whitelist,
1128+
keysManager: '0x...',
1129+
whitelister: '0x...',
1130+
feeRecipient: '0x...',
1131+
validatorsRoot: '0x...',
1132+
blocklistManager: '0x...',
1133+
metadataIpfsHash: '...',
11361134
vaultAddress: '0x...',
11371135
userAddress: '0x...',
11381136
}
11391137

1140-
// Send transaction
1141-
const hash = await sdk.vault.updateWhitelist(params)
1142-
// When you sign transactions on the backend (for custodians)
1143-
const { data, to } = await sdk.vault.updateWhitelist.encode(params)
1144-
// Get an approximate gas per transaction
1145-
const gas = await sdk.vault.updateWhitelist.estimateGas(params)
1146-
```
1147-
---
1148-
### `sdk.vault.updateBlocklist`
1149-
1150-
#### Description:
1151-
1152-
Update the blocklist of addresses for a blocklisted vault.
1153-
The blocklist contains addresses disallowed to stake or mint within
1154-
the blocklisted vault. This method can only be called by the vault
1155-
access manager.
1156-
1157-
#### Arguments:
1158-
1159-
| Name | Type | Required | Description |
1160-
|--------------|----------------------------------------------|-------------|------------------------------------------------------------------------------------------------------------------------------|
1161-
| blocklist | `Array<{ address: string, isNew: boolean }>` | **Yes** | List of addresses to update the blocklist. Use `isNew: true` to add a new address, `isNew: false` to remove an existing one |
1162-
| userAddress | `string` | **Yes** | The address of the user making the update (access manager) |
1163-
| vaultAddress | `string` | **Yes** | The address of the blocklisted vault |
1164-
1165-
#### Example:
1138+
// Data to update the vault by vault keys manager.
1139+
const params = {
1140+
validatorsRoot: '...',
1141+
vaultAddress: '0x...',
1142+
userAddress: '0x...',
1143+
}
11661144

1167-
```ts
1168-
const blocklist = [
1169-
{
1170-
address: '0x...',
1171-
isNew: true,
1172-
},
1173-
{
1174-
address: '0x...',
1175-
isNew: false,
1176-
},
1177-
]
1145+
// Data to update the private vault by whitelister.
1146+
// The whitelist contains addresses allowed to stake or mint within
1147+
// the vault.
1148+
const params = {
1149+
whitelist: [
1150+
{
1151+
address: '0x...',
1152+
isNew: true,
1153+
},
1154+
{
1155+
address: '0x...',
1156+
isNew: false,
1157+
},
1158+
],
1159+
vaultAddress: '0x...',
1160+
userAddress: '0x...',
1161+
}
11781162

1163+
// Data to update blocklisted vault by blocklist manager.
1164+
// The blocklist contains addresses disallowed to stake or mint within
1165+
// the vault.
11791166
const params = {
1180-
blocklist,
1167+
blocklist: [
1168+
{
1169+
address: '0x...',
1170+
isNew: true,
1171+
},
1172+
{
1173+
address: '0x...',
1174+
isNew: false,
1175+
},
1176+
],
11811177
vaultAddress: '0x...',
11821178
userAddress: '0x...',
11831179
}
11841180

11851181
// Send transaction
1186-
const hash = await sdk.vault.updateBlocklist(params)
1182+
const hash = await sdk.vault.operate(params)
11871183
// When you sign transactions on the backend (for custodians)
1188-
const { data, to } = await sdk.vault.updateBlocklist.encode(params)
1184+
const { data, to } = await sdk.vault.operate.encode(params)
11891185
// Get an approximate gas per transaction
1190-
const gas = await sdk.vault.updateBlockList.estimateGas(params)
1186+
const gas = await sdk.vault.operate.estimateGas(params)
11911187
```
11921188
---
11931189
### `sdk.osToken.mint`

src/contracts/abis/BlocklistVaultDiffAbi.json

+13
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,17 @@
11
[
2+
{
3+
"inputs": [],
4+
"name": "blocklistManager",
5+
"outputs": [
6+
{
7+
"internalType": "address",
8+
"name": "",
9+
"type": "address"
10+
}
11+
],
12+
"stateMutability": "view",
13+
"type": "function"
14+
},
215
{
316
"inputs": [
417
{

src/contracts/abis/PrivateVaultDiffAbi.json

+13
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,17 @@
11
[
2+
{
3+
"inputs": [],
4+
"name": "whitelister",
5+
"outputs": [
6+
{
7+
"internalType": "address",
8+
"name": "",
9+
"type": "address"
10+
}
11+
],
12+
"stateMutability": "view",
13+
"type": "function"
14+
},
215
{
316
"inputs": [
417
{

src/contracts/abis/VaultAbi.json

+26
Original file line numberDiff line numberDiff line change
@@ -441,6 +441,32 @@
441441
"stateMutability": "nonpayable",
442442
"type": "function"
443443
},
444+
{
445+
"inputs": [],
446+
"name": "admin",
447+
"outputs": [
448+
{
449+
"internalType": "address",
450+
"name": "",
451+
"type": "address"
452+
}
453+
],
454+
"stateMutability": "view",
455+
"type": "function"
456+
},
457+
{
458+
"inputs": [],
459+
"name": "keysManager",
460+
"outputs": [
461+
{
462+
"internalType": "address",
463+
"name": "",
464+
"type": "address"
465+
}
466+
],
467+
"stateMutability": "view",
468+
"type": "function"
469+
},
444470
{
445471
"inputs": [
446472
{

src/contracts/createContracts.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ export const createContracts = (input: CreateContractsInput) => {
119119
createVault: (address: string) => createContract<StakeWise.ABI.Vault>(address, VaultAbi, provider),
120120
createUniswapPool: (address: string) => createContract<StakeWise.ABI.UniswapPool>(address, UniswapPoolAbi, provider),
121121
createPrivateVault: (address: string) => createContract<StakeWise.ABI.PrivateVault>(address, PrivateVaultAbi, provider),
122-
createBlocklistVault: (address: string) => createContract<StakeWise.ABI.BlocklistVault>(address, BlocklistVaultAbi, provider),
122+
createBlocklistedVault: (address: string) => createContract<StakeWise.ABI.BlocklistVault>(address, BlocklistVaultAbi, provider),
123123
createRewardSplitter: (address: string) => createContract<StakeWise.ABI.RewardSplitter>(address, RewardSplitterAbi, provider),
124124
createOtherTokenVault: (address: string) => createContract<StakeWise.ABI.OtherTokenVault>(address, OtherTokenVaultAbi, provider),
125125
createVestingEscrowDirect: (address: string) => createContract<StakeWise.ABI.VestingEscrow>(address, VestingEscrowAbi, provider),

src/contracts/vaultMulticall.ts

+22-7
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,15 @@ type VaultMulticallInput = {
2424
vaultContract: VaultAbi | OtherTokenVaultAbi
2525
}
2626

27+
// Methods with _checkHarvested() call
28+
const harvestCheckMethods = [
29+
'deposit',
30+
'mintOsToken',
31+
'enterExitQueue',
32+
'setFeeRecipient',
33+
'claimExitedAssets',
34+
]
35+
2736
const vaultMulticall = async <T extends unknown>(values: VaultMulticallInput): Promise<T> => {
2837
const { options, vaultAddress, userAddress, request, vaultContract, keeperContract } = values
2938
const { params, callStatic, estimateGas, transactionData } = request
@@ -44,15 +53,21 @@ const vaultMulticall = async <T extends unknown>(values: VaultMulticallInput): P
4453
contract = vaultContract.connect(signer)
4554
}
4655

47-
const [ harvestParams, canHarvest ] = await Promise.all([
48-
getHarvestParams({ options, vaultAddress }),
49-
keeperContract.canHarvest(vaultAddress),
50-
])
56+
let canHarvest = false
5157

52-
if (canHarvest) {
53-
const fragment = contract.interface.encodeFunctionData('updateState', [ harvestParams ])
58+
const needHarvest = params.some(({ method }) => harvestCheckMethods.includes(method))
5459

55-
calls.push(fragment)
60+
if (needHarvest) {
61+
const [ harvestParams ] = await Promise.all([
62+
getHarvestParams({ options, vaultAddress }),
63+
keeperContract.canHarvest(vaultAddress).then((value) => canHarvest = value),
64+
])
65+
66+
if (canHarvest) {
67+
const fragment = contract.interface.encodeFunctionData('updateState', [ harvestParams ])
68+
69+
calls.push(fragment)
70+
}
5671
}
5772

5873
params.forEach(({ method, args }) => {

src/methods/vault/index.ts

+5-7
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,10 @@ import getScorePercentiles from './requests/getScorePercentiles'
1313
import getExitQueuePositions from './requests/getExitQueuePositions'
1414

1515
// Transactions
16-
import { deposit } from './transactions/deposit'
17-
import { withdraw } from './transactions/withdraw'
18-
import { claimExitQueue } from './transactions/claimExitQueue'
19-
import { updateWhitelist } from './transactions/updateWhitelist'
20-
import { updateBlocklist } from './transactions/updateBlocklist'
16+
import { default as deposit } from './transactions/deposit'
17+
import { default as operate } from './transactions/operate'
18+
import { default as withdraw } from './transactions/withdraw'
19+
import { default as claimExitQueue } from './transactions/claimExitQueue'
2120

2221

2322
export default {
@@ -37,9 +36,8 @@ export default {
3736
},
3837
transactions: {
3938
deposit,
39+
operate,
4040
withdraw,
4141
claimExitQueue,
42-
updateWhitelist,
43-
updateBlocklist,
4442
},
4543
} as const

src/methods/vault/requests/getExitQueuePositions/index.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { validateArgs } from '../../../../utils'
22
import parseExitRequests from './parseExitRequests'
33
import fetchExitQueuePositions from './fetchExitQueuePositions'
4+
import type { ParseExitRequestsOutput } from './parseExitRequests'
45
import type { FetchExitQueuePositionsInput } from './fetchExitQueuePositions'
56

67

@@ -16,7 +17,7 @@ const mock = {
1617
withdrawable: 0n,
1718
}
1819

19-
const getExitQueuePositions = async (input: GetExitQueuePositionsInput) => {
20+
const getExitQueuePositions = async (input: GetExitQueuePositionsInput): Promise<ParseExitRequestsOutput> => {
2021
const { options, contracts, provider, vaultAddress, userAddress } = input
2122

2223
validateArgs.address({ vaultAddress, userAddress })

src/methods/vault/requests/getExitQueuePositions/parseExitRequests.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ type Position = {
2222
timestamp: string
2323
}
2424

25-
type ParseExitRequestsOutput = {
25+
export type ParseExitRequestsOutput = {
2626
total: bigint
2727
withdrawable: bigint
2828
positions: Position[]

src/methods/vault/transactions/claimExitQueue/claimExitQueue.ts

-25
This file was deleted.

0 commit comments

Comments
 (0)