@sablier/bob 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/LICENSE-BUSL.md +82 -0
  3. package/LICENSE-GPL.md +470 -0
  4. package/LICENSE.md +9 -0
  5. package/README.md +81 -0
  6. package/artifacts/BobVaultShare.json +936 -0
  7. package/artifacts/SablierBob.json +1683 -0
  8. package/artifacts/SablierEscrow.json +1316 -0
  9. package/artifacts/SablierLidoAdapter.json +1649 -0
  10. package/artifacts/erc20/IERC20.json +226 -0
  11. package/artifacts/interfaces/IBobVaultShare.json +393 -0
  12. package/artifacts/interfaces/ISablierBob.json +1171 -0
  13. package/artifacts/interfaces/ISablierEscrow.json +999 -0
  14. package/artifacts/interfaces/ISablierLidoAdapter.json +1141 -0
  15. package/artifacts/interfaces/external/ICurveStETHPool.json +128 -0
  16. package/artifacts/interfaces/external/ILidoWithdrawalQueue.json +209 -0
  17. package/artifacts/interfaces/external/IStETH.json +262 -0
  18. package/artifacts/interfaces/external/IWETH9.json +259 -0
  19. package/artifacts/interfaces/external/IWstETH.json +311 -0
  20. package/artifacts/libraries/Errors.json +868 -0
  21. package/package.json +68 -0
  22. package/src/BobVaultShare.sol +119 -0
  23. package/src/SablierBob.sol +543 -0
  24. package/src/SablierEscrow.sol +288 -0
  25. package/src/SablierLidoAdapter.sol +549 -0
  26. package/src/abstracts/SablierBobState.sol +156 -0
  27. package/src/abstracts/SablierEscrowState.sol +159 -0
  28. package/src/interfaces/IBobVaultShare.sol +51 -0
  29. package/src/interfaces/ISablierBob.sol +261 -0
  30. package/src/interfaces/ISablierBobAdapter.sol +157 -0
  31. package/src/interfaces/ISablierBobState.sol +74 -0
  32. package/src/interfaces/ISablierEscrow.sol +148 -0
  33. package/src/interfaces/ISablierEscrowState.sol +77 -0
  34. package/src/interfaces/ISablierLidoAdapter.sol +110 -0
  35. package/src/interfaces/external/ICurveStETHPool.sol +31 -0
  36. package/src/interfaces/external/ILidoWithdrawalQueue.sol +67 -0
  37. package/src/interfaces/external/IStETH.sol +18 -0
  38. package/src/interfaces/external/IWETH9.sol +19 -0
  39. package/src/interfaces/external/IWstETH.sol +32 -0
  40. package/src/libraries/Errors.sol +189 -0
  41. package/src/types/Bob.sol +49 -0
  42. package/src/types/Escrow.sol +49 -0
@@ -0,0 +1,393 @@
1
+ {
2
+ "abi": [
3
+ {
4
+ "type": "function",
5
+ "name": "SABLIER_BOB",
6
+ "inputs": [],
7
+ "outputs": [{ "name": "", "type": "address", "internalType": "address" }],
8
+ "stateMutability": "view"
9
+ },
10
+ {
11
+ "type": "function",
12
+ "name": "VAULT_ID",
13
+ "inputs": [],
14
+ "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
15
+ "stateMutability": "view"
16
+ },
17
+ {
18
+ "type": "function",
19
+ "name": "allowance",
20
+ "inputs": [
21
+ { "name": "owner", "type": "address", "internalType": "address" },
22
+ { "name": "spender", "type": "address", "internalType": "address" }
23
+ ],
24
+ "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
25
+ "stateMutability": "view"
26
+ },
27
+ {
28
+ "type": "function",
29
+ "name": "approve",
30
+ "inputs": [
31
+ { "name": "spender", "type": "address", "internalType": "address" },
32
+ { "name": "value", "type": "uint256", "internalType": "uint256" }
33
+ ],
34
+ "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }],
35
+ "stateMutability": "nonpayable"
36
+ },
37
+ {
38
+ "type": "function",
39
+ "name": "balanceOf",
40
+ "inputs": [{ "name": "account", "type": "address", "internalType": "address" }],
41
+ "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
42
+ "stateMutability": "view"
43
+ },
44
+ {
45
+ "type": "function",
46
+ "name": "burn",
47
+ "inputs": [
48
+ { "name": "vaultId", "type": "uint256", "internalType": "uint256" },
49
+ { "name": "from", "type": "address", "internalType": "address" },
50
+ { "name": "amount", "type": "uint256", "internalType": "uint256" }
51
+ ],
52
+ "outputs": [],
53
+ "stateMutability": "nonpayable"
54
+ },
55
+ {
56
+ "type": "function",
57
+ "name": "decimals",
58
+ "inputs": [],
59
+ "outputs": [{ "name": "", "type": "uint8", "internalType": "uint8" }],
60
+ "stateMutability": "view"
61
+ },
62
+ {
63
+ "type": "function",
64
+ "name": "mint",
65
+ "inputs": [
66
+ { "name": "vaultId", "type": "uint256", "internalType": "uint256" },
67
+ { "name": "to", "type": "address", "internalType": "address" },
68
+ { "name": "amount", "type": "uint256", "internalType": "uint256" }
69
+ ],
70
+ "outputs": [],
71
+ "stateMutability": "nonpayable"
72
+ },
73
+ {
74
+ "type": "function",
75
+ "name": "name",
76
+ "inputs": [],
77
+ "outputs": [{ "name": "", "type": "string", "internalType": "string" }],
78
+ "stateMutability": "view"
79
+ },
80
+ {
81
+ "type": "function",
82
+ "name": "symbol",
83
+ "inputs": [],
84
+ "outputs": [{ "name": "", "type": "string", "internalType": "string" }],
85
+ "stateMutability": "view"
86
+ },
87
+ {
88
+ "type": "function",
89
+ "name": "totalSupply",
90
+ "inputs": [],
91
+ "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
92
+ "stateMutability": "view"
93
+ },
94
+ {
95
+ "type": "function",
96
+ "name": "transfer",
97
+ "inputs": [
98
+ { "name": "to", "type": "address", "internalType": "address" },
99
+ { "name": "value", "type": "uint256", "internalType": "uint256" }
100
+ ],
101
+ "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }],
102
+ "stateMutability": "nonpayable"
103
+ },
104
+ {
105
+ "type": "function",
106
+ "name": "transferFrom",
107
+ "inputs": [
108
+ { "name": "from", "type": "address", "internalType": "address" },
109
+ { "name": "to", "type": "address", "internalType": "address" },
110
+ { "name": "value", "type": "uint256", "internalType": "uint256" }
111
+ ],
112
+ "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }],
113
+ "stateMutability": "nonpayable"
114
+ },
115
+ {
116
+ "type": "event",
117
+ "name": "Approval",
118
+ "inputs": [
119
+ { "name": "owner", "type": "address", "indexed": true, "internalType": "address" },
120
+ { "name": "spender", "type": "address", "indexed": true, "internalType": "address" },
121
+ { "name": "value", "type": "uint256", "indexed": false, "internalType": "uint256" }
122
+ ],
123
+ "anonymous": false
124
+ },
125
+ {
126
+ "type": "event",
127
+ "name": "Transfer",
128
+ "inputs": [
129
+ { "name": "from", "type": "address", "indexed": true, "internalType": "address" },
130
+ { "name": "to", "type": "address", "indexed": true, "internalType": "address" },
131
+ { "name": "value", "type": "uint256", "indexed": false, "internalType": "uint256" }
132
+ ],
133
+ "anonymous": false
134
+ }
135
+ ],
136
+ "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} },
137
+ "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} },
138
+ "methodIdentifiers": {
139
+ "SABLIER_BOB()": "aa2e3b98",
140
+ "VAULT_ID()": "540acabc",
141
+ "allowance(address,address)": "dd62ed3e",
142
+ "approve(address,uint256)": "095ea7b3",
143
+ "balanceOf(address)": "70a08231",
144
+ "burn(uint256,address,uint256)": "9eea5f66",
145
+ "decimals()": "313ce567",
146
+ "mint(uint256,address,uint256)": "836a1040",
147
+ "name()": "06fdde03",
148
+ "symbol()": "95d89b41",
149
+ "totalSupply()": "18160ddd",
150
+ "transfer(address,uint256)": "a9059cbb",
151
+ "transferFrom(address,address,uint256)": "23b872dd"
152
+ },
153
+ "rawMetadata": "{\"compiler\":{\"version\":\"0.8.29+commit.ab55807c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"SABLIER_BOB\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VAULT_ID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"vaultId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"vaultId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"SABLIER_BOB()\":{\"details\":\"This is an immutable state variable.\"},\"VAULT_ID()\":{\"details\":\"This is an immutable state variable.\"},\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"burn(uint256,address,uint256)\":{\"details\":\"Emits a {Transfer} event. Requirements: - The caller must be the SablierBob contract. - `vaultId` must be equal to the {VAULT_ID}. - `from` must have at least `amount` tokens.\",\"params\":{\"amount\":\"The amount of tokens to burn.\",\"from\":\"The address to burn tokens from.\",\"vaultId\":\"The vault ID that this share token represents.\"}},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"mint(uint256,address,uint256)\":{\"details\":\"Emits a {Transfer} event. Requirements: - The caller must be the SablierBob contract. - `vaultId` must be equal to the {VAULT_ID}.\",\"params\":{\"amount\":\"The amount of tokens to mint.\",\"to\":\"The address to mint tokens to.\",\"vaultId\":\"The vault ID that this share token represents.\"}},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"title\":\"IBobVaultShare\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"SABLIER_BOB()\":{\"notice\":\"Returns the address of the Bob contract with the authority to mint and burn tokens.\"},\"VAULT_ID()\":{\"notice\":\"Returns the vault ID this share token represents.\"},\"burn(uint256,address,uint256)\":{\"notice\":\"Burns `amount` tokens from `from`.\"},\"mint(uint256,address,uint256)\":{\"notice\":\"Mints `amount` tokens to `to`.\"}},\"notice\":\"Interface for the ERC-20 token representing shares in a Bob vault.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/interfaces/IBobVaultShare.sol\":\"IBobVaultShare\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[\":@arbitrum/=node_modules/@arbitrum/\",\":@chainlink/=node_modules/@chainlink/\",\":@eth-optimism/=node_modules/@eth-optimism/\",\":@offchainlabs/=node_modules/@offchainlabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":@prb/=node_modules/@prb/\",\":@sablier/=node_modules/@sablier/\",\":@scroll-tech/=node_modules/@scroll-tech/\",\":@zksync/=node_modules/@zksync/\",\":forge-std/=node_modules/forge-std/\"],\"viaIR\":true},\"sources\":{\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]},\"src/interfaces/IBobVaultShare.sol\":{\"keccak256\":\"0x7e91f71800b33ce26fa757b8d74d0e89aaf2de6ee50260a706c4c26029ae4c22\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://18e85a71eef03972eb19a277ca025c645b18aa768c03a2b1e7d81de9eeabe731\",\"dweb:/ipfs/QmbjGtkps9KvG6XBysNLB9eBoY5E47ixkTDtN8cYYRzA6b\"]}},\"version\":1}",
154
+ "metadata": {
155
+ "compiler": { "version": "0.8.29+commit.ab55807c" },
156
+ "language": "Solidity",
157
+ "output": {
158
+ "abi": [
159
+ {
160
+ "inputs": [
161
+ { "internalType": "address", "name": "owner", "type": "address", "indexed": true },
162
+ { "internalType": "address", "name": "spender", "type": "address", "indexed": true },
163
+ { "internalType": "uint256", "name": "value", "type": "uint256", "indexed": false }
164
+ ],
165
+ "type": "event",
166
+ "name": "Approval",
167
+ "anonymous": false
168
+ },
169
+ {
170
+ "inputs": [
171
+ { "internalType": "address", "name": "from", "type": "address", "indexed": true },
172
+ { "internalType": "address", "name": "to", "type": "address", "indexed": true },
173
+ { "internalType": "uint256", "name": "value", "type": "uint256", "indexed": false }
174
+ ],
175
+ "type": "event",
176
+ "name": "Transfer",
177
+ "anonymous": false
178
+ },
179
+ {
180
+ "inputs": [],
181
+ "stateMutability": "view",
182
+ "type": "function",
183
+ "name": "SABLIER_BOB",
184
+ "outputs": [{ "internalType": "address", "name": "", "type": "address" }]
185
+ },
186
+ {
187
+ "inputs": [],
188
+ "stateMutability": "view",
189
+ "type": "function",
190
+ "name": "VAULT_ID",
191
+ "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }]
192
+ },
193
+ {
194
+ "inputs": [
195
+ { "internalType": "address", "name": "owner", "type": "address" },
196
+ { "internalType": "address", "name": "spender", "type": "address" }
197
+ ],
198
+ "stateMutability": "view",
199
+ "type": "function",
200
+ "name": "allowance",
201
+ "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }]
202
+ },
203
+ {
204
+ "inputs": [
205
+ { "internalType": "address", "name": "spender", "type": "address" },
206
+ { "internalType": "uint256", "name": "value", "type": "uint256" }
207
+ ],
208
+ "stateMutability": "nonpayable",
209
+ "type": "function",
210
+ "name": "approve",
211
+ "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }]
212
+ },
213
+ {
214
+ "inputs": [{ "internalType": "address", "name": "account", "type": "address" }],
215
+ "stateMutability": "view",
216
+ "type": "function",
217
+ "name": "balanceOf",
218
+ "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }]
219
+ },
220
+ {
221
+ "inputs": [
222
+ { "internalType": "uint256", "name": "vaultId", "type": "uint256" },
223
+ { "internalType": "address", "name": "from", "type": "address" },
224
+ { "internalType": "uint256", "name": "amount", "type": "uint256" }
225
+ ],
226
+ "stateMutability": "nonpayable",
227
+ "type": "function",
228
+ "name": "burn"
229
+ },
230
+ {
231
+ "inputs": [],
232
+ "stateMutability": "view",
233
+ "type": "function",
234
+ "name": "decimals",
235
+ "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }]
236
+ },
237
+ {
238
+ "inputs": [
239
+ { "internalType": "uint256", "name": "vaultId", "type": "uint256" },
240
+ { "internalType": "address", "name": "to", "type": "address" },
241
+ { "internalType": "uint256", "name": "amount", "type": "uint256" }
242
+ ],
243
+ "stateMutability": "nonpayable",
244
+ "type": "function",
245
+ "name": "mint"
246
+ },
247
+ {
248
+ "inputs": [],
249
+ "stateMutability": "view",
250
+ "type": "function",
251
+ "name": "name",
252
+ "outputs": [{ "internalType": "string", "name": "", "type": "string" }]
253
+ },
254
+ {
255
+ "inputs": [],
256
+ "stateMutability": "view",
257
+ "type": "function",
258
+ "name": "symbol",
259
+ "outputs": [{ "internalType": "string", "name": "", "type": "string" }]
260
+ },
261
+ {
262
+ "inputs": [],
263
+ "stateMutability": "view",
264
+ "type": "function",
265
+ "name": "totalSupply",
266
+ "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }]
267
+ },
268
+ {
269
+ "inputs": [
270
+ { "internalType": "address", "name": "to", "type": "address" },
271
+ { "internalType": "uint256", "name": "value", "type": "uint256" }
272
+ ],
273
+ "stateMutability": "nonpayable",
274
+ "type": "function",
275
+ "name": "transfer",
276
+ "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }]
277
+ },
278
+ {
279
+ "inputs": [
280
+ { "internalType": "address", "name": "from", "type": "address" },
281
+ { "internalType": "address", "name": "to", "type": "address" },
282
+ { "internalType": "uint256", "name": "value", "type": "uint256" }
283
+ ],
284
+ "stateMutability": "nonpayable",
285
+ "type": "function",
286
+ "name": "transferFrom",
287
+ "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }]
288
+ }
289
+ ],
290
+ "devdoc": {
291
+ "kind": "dev",
292
+ "methods": {
293
+ "SABLIER_BOB()": { "details": "This is an immutable state variable." },
294
+ "VAULT_ID()": { "details": "This is an immutable state variable." },
295
+ "allowance(address,address)": {
296
+ "details": "Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called."
297
+ },
298
+ "approve(address,uint256)": {
299
+ "details": "Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event."
300
+ },
301
+ "balanceOf(address)": { "details": "Returns the value of tokens owned by `account`." },
302
+ "burn(uint256,address,uint256)": {
303
+ "details": "Emits a {Transfer} event. Requirements: - The caller must be the SablierBob contract. - `vaultId` must be equal to the {VAULT_ID}. - `from` must have at least `amount` tokens.",
304
+ "params": {
305
+ "amount": "The amount of tokens to burn.",
306
+ "from": "The address to burn tokens from.",
307
+ "vaultId": "The vault ID that this share token represents."
308
+ }
309
+ },
310
+ "decimals()": { "details": "Returns the decimals places of the token." },
311
+ "mint(uint256,address,uint256)": {
312
+ "details": "Emits a {Transfer} event. Requirements: - The caller must be the SablierBob contract. - `vaultId` must be equal to the {VAULT_ID}.",
313
+ "params": {
314
+ "amount": "The amount of tokens to mint.",
315
+ "to": "The address to mint tokens to.",
316
+ "vaultId": "The vault ID that this share token represents."
317
+ }
318
+ },
319
+ "name()": { "details": "Returns the name of the token." },
320
+ "symbol()": { "details": "Returns the symbol of the token." },
321
+ "totalSupply()": { "details": "Returns the value of tokens in existence." },
322
+ "transfer(address,uint256)": {
323
+ "details": "Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."
324
+ },
325
+ "transferFrom(address,address,uint256)": {
326
+ "details": "Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."
327
+ }
328
+ },
329
+ "version": 1
330
+ },
331
+ "userdoc": {
332
+ "kind": "user",
333
+ "methods": {
334
+ "SABLIER_BOB()": {
335
+ "notice": "Returns the address of the Bob contract with the authority to mint and burn tokens."
336
+ },
337
+ "VAULT_ID()": { "notice": "Returns the vault ID this share token represents." },
338
+ "burn(uint256,address,uint256)": { "notice": "Burns `amount` tokens from `from`." },
339
+ "mint(uint256,address,uint256)": { "notice": "Mints `amount` tokens to `to`." }
340
+ },
341
+ "version": 1
342
+ }
343
+ },
344
+ "settings": {
345
+ "remappings": [
346
+ "@arbitrum/=node_modules/@arbitrum/",
347
+ "@chainlink/=node_modules/@chainlink/",
348
+ "@eth-optimism/=node_modules/@eth-optimism/",
349
+ "@offchainlabs/=node_modules/@offchainlabs/",
350
+ "@openzeppelin/=node_modules/@openzeppelin/",
351
+ "@prb/=node_modules/@prb/",
352
+ "@sablier/=node_modules/@sablier/",
353
+ "@scroll-tech/=node_modules/@scroll-tech/",
354
+ "@zksync/=node_modules/@zksync/",
355
+ "forge-std/=node_modules/forge-std/"
356
+ ],
357
+ "optimizer": { "enabled": true, "runs": 1000000 },
358
+ "metadata": { "bytecodeHash": "ipfs" },
359
+ "compilationTarget": { "src/interfaces/IBobVaultShare.sol": "IBobVaultShare" },
360
+ "evmVersion": "shanghai",
361
+ "libraries": {},
362
+ "viaIR": true
363
+ },
364
+ "sources": {
365
+ "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": {
366
+ "keccak256": "0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7",
367
+ "urls": [
368
+ "bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db",
369
+ "dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9"
370
+ ],
371
+ "license": "MIT"
372
+ },
373
+ "node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol": {
374
+ "keccak256": "0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330",
375
+ "urls": [
376
+ "bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf",
377
+ "dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r"
378
+ ],
379
+ "license": "MIT"
380
+ },
381
+ "src/interfaces/IBobVaultShare.sol": {
382
+ "keccak256": "0x7e91f71800b33ce26fa757b8d74d0e89aaf2de6ee50260a706c4c26029ae4c22",
383
+ "urls": [
384
+ "bzz-raw://18e85a71eef03972eb19a277ca025c645b18aa768c03a2b1e7d81de9eeabe731",
385
+ "dweb:/ipfs/QmbjGtkps9KvG6XBysNLB9eBoY5E47ixkTDtN8cYYRzA6b"
386
+ ],
387
+ "license": "GPL-3.0-or-later"
388
+ }
389
+ },
390
+ "version": 1
391
+ },
392
+ "id": 86
393
+ }