@openzeppelin/wizard-stellar 0.6.1 → 0.6.3

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 (50) hide show
  1. package/dist/api.d.ts +3 -0
  2. package/dist/api.d.ts.map +1 -1
  3. package/dist/api.js +7 -1
  4. package/dist/api.js.map +1 -1
  5. package/dist/build-generic.d.ts +4 -0
  6. package/dist/build-generic.d.ts.map +1 -1
  7. package/dist/build-generic.js +3 -0
  8. package/dist/build-generic.js.map +1 -1
  9. package/dist/generate/sources.d.ts.map +1 -1
  10. package/dist/generate/sources.js +6 -0
  11. package/dist/generate/sources.js.map +1 -1
  12. package/dist/generate/vault.d.ts +3 -0
  13. package/dist/generate/vault.d.ts.map +1 -0
  14. package/dist/generate/vault.js +21 -0
  15. package/dist/generate/vault.js.map +1 -0
  16. package/dist/index.d.ts +2 -0
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +3 -1
  19. package/dist/index.js.map +1 -1
  20. package/dist/kind.js +1 -0
  21. package/dist/kind.js.map +1 -1
  22. package/dist/set-info.d.ts.map +1 -1
  23. package/dist/set-info.js +17 -2
  24. package/dist/set-info.js.map +1 -1
  25. package/dist/utils/compile-test.d.ts.map +1 -1
  26. package/dist/utils/compile-test.js +4 -1
  27. package/dist/utils/compile-test.js.map +1 -1
  28. package/dist/vault.d.ts +16 -0
  29. package/dist/vault.d.ts.map +1 -0
  30. package/dist/vault.js +334 -0
  31. package/dist/vault.js.map +1 -0
  32. package/dist/zip-rust.d.ts.map +1 -1
  33. package/dist/zip-rust.js +1 -1
  34. package/dist/zip-rust.js.map +1 -1
  35. package/dist/zip-shared.d.ts +1 -0
  36. package/dist/zip-shared.d.ts.map +1 -1
  37. package/dist/zip-shared.js +60 -1
  38. package/dist/zip-shared.js.map +1 -1
  39. package/package.json +1 -1
  40. package/src/api.ts +13 -0
  41. package/src/build-generic.ts +6 -0
  42. package/src/generate/sources.ts +7 -0
  43. package/src/generate/vault.ts +21 -0
  44. package/src/index.ts +2 -0
  45. package/src/kind.ts +1 -0
  46. package/src/set-info.ts +21 -2
  47. package/src/utils/compile-test.ts +5 -1
  48. package/src/vault.ts +378 -0
  49. package/src/zip-rust.ts +5 -1
  50. package/src/zip-shared.ts +62 -0
package/dist/vault.js ADDED
@@ -0,0 +1,334 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.functions = exports.defaults = void 0;
4
+ exports.printVault = printVault;
5
+ exports.withDefaults = withDefaults;
6
+ exports.isAccessControlRequired = isAccessControlRequired;
7
+ exports.buildVault = buildVault;
8
+ const contract_1 = require("./contract");
9
+ const set_access_control_1 = require("./set-access-control");
10
+ const add_pausable_1 = require("./add-pausable");
11
+ const add_upgradeable_1 = require("./add-upgradeable");
12
+ const define_functions_1 = require("./utils/define-functions");
13
+ const common_options_1 = require("./common-options");
14
+ const set_info_1 = require("./set-info");
15
+ const common_options_2 = require("./common-options");
16
+ const print_1 = require("./print");
17
+ const convert_strings_1 = require("./utils/convert-strings");
18
+ const error_1 = require("./error");
19
+ const wizard_common_1 = require("@openzeppelin/wizard-common");
20
+ // Upper bound enforced by the library's `Vault::set_decimals_offset`
21
+ // (`stellar_tokens::vault::MAX_DECIMALS_OFFSET`); a larger value panics on deploy.
22
+ const MAX_DECIMALS_OFFSET = 10;
23
+ exports.defaults = {
24
+ name: 'MyVault',
25
+ symbol: 'MTK',
26
+ decimalsOffset: '0',
27
+ pausable: false,
28
+ upgradeable: false,
29
+ access: common_options_2.contractDefaults.access,
30
+ info: common_options_2.contractDefaults.info,
31
+ explicitImplementations: common_options_2.contractDefaults.explicitImplementations,
32
+ };
33
+ function printVault(opts = exports.defaults) {
34
+ return (0, print_1.printContract)(buildVault(opts));
35
+ }
36
+ function withDefaults(opts) {
37
+ return {
38
+ ...opts,
39
+ ...(0, common_options_1.withCommonContractDefaults)(opts),
40
+ decimalsOffset: opts.decimalsOffset ?? exports.defaults.decimalsOffset,
41
+ pausable: opts.pausable ?? exports.defaults.pausable,
42
+ upgradeable: opts.upgradeable ?? exports.defaults.upgradeable,
43
+ };
44
+ }
45
+ function isAccessControlRequired(opts) {
46
+ return opts.pausable === true || opts.upgradeable === true;
47
+ }
48
+ function buildVault(opts) {
49
+ const c = new contract_1.ContractBuilder(opts.name);
50
+ const allOpts = withDefaults(opts);
51
+ const decimalsOffset = (0, convert_strings_1.toUint)(allOpts.decimalsOffset, 'decimalsOffset', 'u32');
52
+ if (decimalsOffset > MAX_DECIMALS_OFFSET) {
53
+ throw new error_1.OptionsError({
54
+ decimalsOffset: `Maximum decimals offset is ${MAX_DECIMALS_OFFSET}`,
55
+ });
56
+ }
57
+ addBase(c, (0, convert_strings_1.toByteArray)(allOpts.name), (0, convert_strings_1.toByteArray)(allOpts.symbol), decimalsOffset, allOpts.pausable, allOpts.explicitImplementations);
58
+ if (allOpts.pausable) {
59
+ (0, add_pausable_1.addPausable)(c, allOpts.access, allOpts.explicitImplementations);
60
+ }
61
+ if (allOpts.upgradeable) {
62
+ (0, add_upgradeable_1.addUpgradeable)(c, allOpts.access, allOpts.explicitImplementations);
63
+ }
64
+ (0, set_access_control_1.setAccessControl)(c, allOpts.access, allOpts.explicitImplementations);
65
+ // The AccessControl trait surface (e.g. `get_existing_roles`, role lookups)
66
+ // references `Symbol` and `Vec`, which the contracttrait macro and explicit
67
+ // implementations need in scope even when no function is role-gated.
68
+ if (allOpts.access === 'roles') {
69
+ c.addUseClause('soroban_sdk', 'Symbol');
70
+ c.addUseClause('soroban_sdk', 'Vec');
71
+ }
72
+ (0, set_info_1.setInfo)(c, allOpts.info);
73
+ return c;
74
+ }
75
+ function addBase(c, name, symbol, decimalsOffset, pausable, explicitImplementations) {
76
+ // The underlying asset is supplied at deployment, while the virtual decimals
77
+ // offset is a baked-in configuration value. The offset must be set before the
78
+ // metadata because the vault derives its decimals from the underlying asset's
79
+ // decimals plus the offset.
80
+ c.addConstructorArgument({ name: 'asset', type: 'Address' });
81
+ c.addConstructorCode('Vault::set_asset(e, asset);');
82
+ c.addConstructorCode(`Vault::set_decimals_offset(e, ${decimalsOffset});`);
83
+ c.addConstructorCode(`Base::set_metadata(e, Self::decimals(e), String::from_str(e, "${name}"), String::from_str(e, "${symbol}"));`);
84
+ // Set token functions
85
+ c.addUseClause('stellar_tokens::fungible', 'Base');
86
+ c.addUseClause('stellar_tokens::fungible', 'FungibleToken');
87
+ c.addUseClause('stellar_tokens::vault', 'FungibleVault');
88
+ c.addUseClause('stellar_tokens::vault', 'Vault');
89
+ // The base token functions we emit delegate to `Self::ContractType::...`,
90
+ // which resolve through the `ContractOverrides` trait that `Vault` implements,
91
+ // so it must be in scope. This happens with explicit implementations (all
92
+ // functions are spelled out) and when pausable adds transfer overrides.
93
+ if (explicitImplementations || pausable)
94
+ c.addUseClause('stellar_tokens::fungible', 'ContractOverrides');
95
+ c.addUseClause('soroban_sdk', 'contract');
96
+ c.addUseClause('soroban_sdk', 'contractimpl');
97
+ c.addUseClause('soroban_sdk', 'String');
98
+ c.addUseClause('soroban_sdk', 'Env');
99
+ c.addUseClause('soroban_sdk', 'Address');
100
+ c.addUseClause('soroban_sdk', 'MuxedAddress');
101
+ const fungibleTokenTrait = {
102
+ traitName: 'FungibleToken',
103
+ structName: c.name,
104
+ tags: explicitImplementations ? ['contractimpl'] : ['contractimpl(contracttrait)'],
105
+ assocType: 'type ContractType = Vault;',
106
+ };
107
+ c.addTraitImplBlock(fungibleTokenTrait);
108
+ if (explicitImplementations) {
109
+ c.addTraitForEachFunctions(fungibleTokenTrait, fungibleTokenTraitFunctions);
110
+ }
111
+ else {
112
+ // The vault overrides decimals to derive them from the underlying asset and
113
+ // the virtual decimals offset.
114
+ c.addTraitFunction(fungibleTokenTrait, exports.functions.decimals);
115
+ }
116
+ if (pausable) {
117
+ c.addUseClause('stellar_macros', 'when_not_paused');
118
+ c.addTraitFunction(fungibleTokenTrait, exports.functions.transfer);
119
+ c.addFunctionTag(exports.functions.transfer, 'when_not_paused', fungibleTokenTrait);
120
+ c.addTraitFunction(fungibleTokenTrait, exports.functions.transfer_from);
121
+ c.addFunctionTag(exports.functions.transfer_from, 'when_not_paused', fungibleTokenTrait);
122
+ }
123
+ const fungibleVaultTrait = {
124
+ traitName: 'FungibleVault',
125
+ structName: c.name,
126
+ tags: explicitImplementations ? ['contractimpl'] : ['contractimpl(contracttrait)'],
127
+ section: 'Extensions',
128
+ };
129
+ if (explicitImplementations) {
130
+ c.addTraitForEachFunctions(fungibleVaultTrait, fungibleVaultTraitFunctions);
131
+ }
132
+ else {
133
+ c.addTraitImplBlock(fungibleVaultTrait);
134
+ }
135
+ }
136
+ exports.functions = (0, define_functions_1.defineFunctions)({
137
+ // FungibleToken Trait
138
+ total_supply: {
139
+ args: [(0, common_options_1.getSelfArg)()],
140
+ returns: 'i128',
141
+ code: ['Self::ContractType::total_supply(e)'],
142
+ },
143
+ balance: {
144
+ args: [(0, common_options_1.getSelfArg)(), { name: 'account', type: 'Address' }],
145
+ returns: 'i128',
146
+ code: ['Self::ContractType::balance(e, &account)'],
147
+ },
148
+ allowance: {
149
+ args: [(0, common_options_1.getSelfArg)(), { name: 'owner', type: 'Address' }, { name: 'spender', type: 'Address' }],
150
+ returns: 'i128',
151
+ code: ['Self::ContractType::allowance(e, &owner, &spender)'],
152
+ },
153
+ transfer: {
154
+ args: [
155
+ (0, common_options_1.getSelfArg)(),
156
+ { name: 'from', type: 'Address' },
157
+ { name: 'to', type: 'MuxedAddress' },
158
+ { name: 'amount', type: 'i128' },
159
+ ],
160
+ code: ['Self::ContractType::transfer(e, &from, &to, amount)'],
161
+ },
162
+ transfer_from: {
163
+ args: [
164
+ (0, common_options_1.getSelfArg)(),
165
+ { name: 'spender', type: 'Address' },
166
+ { name: 'from', type: 'Address' },
167
+ { name: 'to', type: 'Address' },
168
+ { name: 'amount', type: 'i128' },
169
+ ],
170
+ code: ['Self::ContractType::transfer_from(e, &spender, &from, &to, amount)'],
171
+ },
172
+ approve: {
173
+ args: [
174
+ (0, common_options_1.getSelfArg)(),
175
+ { name: 'owner', type: 'Address' },
176
+ { name: 'spender', type: 'Address' },
177
+ { name: 'amount', type: 'i128' },
178
+ { name: 'live_until_ledger', type: 'u32' },
179
+ ],
180
+ code: ['Self::ContractType::approve(e, &owner, &spender, amount, live_until_ledger)'],
181
+ },
182
+ // The vault derives decimals from the underlying asset's decimals plus the
183
+ // virtual offset, so it overrides the default metadata-based implementation.
184
+ decimals: {
185
+ args: [(0, common_options_1.getSelfArg)()],
186
+ returns: 'u32',
187
+ code: ['Vault::decimals(e)'],
188
+ },
189
+ name: {
190
+ args: [(0, common_options_1.getSelfArg)()],
191
+ returns: 'String',
192
+ code: ['Self::ContractType::name(e)'],
193
+ },
194
+ symbol: {
195
+ args: [(0, common_options_1.getSelfArg)()],
196
+ returns: 'String',
197
+ code: ['Self::ContractType::symbol(e)'],
198
+ },
199
+ // FungibleVault Trait
200
+ query_asset: {
201
+ args: [(0, common_options_1.getSelfArg)()],
202
+ returns: 'Address',
203
+ code: ['Self::ContractType::query_asset(e)'],
204
+ },
205
+ total_assets: {
206
+ args: [(0, common_options_1.getSelfArg)()],
207
+ returns: 'i128',
208
+ code: ['Self::ContractType::total_assets(e)'],
209
+ },
210
+ convert_to_shares: {
211
+ args: [(0, common_options_1.getSelfArg)(), { name: 'assets', type: 'i128' }],
212
+ returns: 'i128',
213
+ code: ['Self::ContractType::convert_to_shares(e, assets)'],
214
+ },
215
+ convert_to_assets: {
216
+ args: [(0, common_options_1.getSelfArg)(), { name: 'shares', type: 'i128' }],
217
+ returns: 'i128',
218
+ code: ['Self::ContractType::convert_to_assets(e, shares)'],
219
+ },
220
+ max_deposit: {
221
+ args: [(0, common_options_1.getSelfArg)(), { name: 'receiver', type: 'Address' }],
222
+ returns: 'i128',
223
+ code: ['Self::ContractType::max_deposit(e, receiver)'],
224
+ },
225
+ preview_deposit: {
226
+ args: [(0, common_options_1.getSelfArg)(), { name: 'assets', type: 'i128' }],
227
+ returns: 'i128',
228
+ code: ['Self::ContractType::preview_deposit(e, assets)'],
229
+ },
230
+ deposit: {
231
+ args: [
232
+ (0, common_options_1.getSelfArg)(),
233
+ { name: 'assets', type: 'i128' },
234
+ { name: 'receiver', type: 'Address' },
235
+ { name: 'from', type: 'Address' },
236
+ { name: 'operator', type: 'Address' },
237
+ ],
238
+ returns: 'i128',
239
+ code: ['Self::ContractType::deposit(e, assets, receiver, from, operator)'],
240
+ },
241
+ max_mint: {
242
+ args: [(0, common_options_1.getSelfArg)(), { name: 'receiver', type: 'Address' }],
243
+ returns: 'i128',
244
+ code: ['Self::ContractType::max_mint(e, receiver)'],
245
+ },
246
+ preview_mint: {
247
+ args: [(0, common_options_1.getSelfArg)(), { name: 'shares', type: 'i128' }],
248
+ returns: 'i128',
249
+ code: ['Self::ContractType::preview_mint(e, shares)'],
250
+ },
251
+ mint: {
252
+ args: [
253
+ (0, common_options_1.getSelfArg)(),
254
+ { name: 'shares', type: 'i128' },
255
+ { name: 'receiver', type: 'Address' },
256
+ { name: 'from', type: 'Address' },
257
+ { name: 'operator', type: 'Address' },
258
+ ],
259
+ returns: 'i128',
260
+ code: ['Self::ContractType::mint(e, shares, receiver, from, operator)'],
261
+ },
262
+ max_withdraw: {
263
+ args: [(0, common_options_1.getSelfArg)(), { name: 'owner', type: 'Address' }],
264
+ returns: 'i128',
265
+ code: ['Self::ContractType::max_withdraw(e, owner)'],
266
+ },
267
+ preview_withdraw: {
268
+ args: [(0, common_options_1.getSelfArg)(), { name: 'assets', type: 'i128' }],
269
+ returns: 'i128',
270
+ code: ['Self::ContractType::preview_withdraw(e, assets)'],
271
+ },
272
+ withdraw: {
273
+ args: [
274
+ (0, common_options_1.getSelfArg)(),
275
+ { name: 'assets', type: 'i128' },
276
+ { name: 'receiver', type: 'Address' },
277
+ { name: 'owner', type: 'Address' },
278
+ { name: 'operator', type: 'Address' },
279
+ ],
280
+ returns: 'i128',
281
+ code: ['Self::ContractType::withdraw(e, assets, receiver, owner, operator)'],
282
+ },
283
+ max_redeem: {
284
+ args: [(0, common_options_1.getSelfArg)(), { name: 'owner', type: 'Address' }],
285
+ returns: 'i128',
286
+ code: ['Self::ContractType::max_redeem(e, owner)'],
287
+ },
288
+ preview_redeem: {
289
+ args: [(0, common_options_1.getSelfArg)(), { name: 'shares', type: 'i128' }],
290
+ returns: 'i128',
291
+ code: ['Self::ContractType::preview_redeem(e, shares)'],
292
+ },
293
+ redeem: {
294
+ args: [
295
+ (0, common_options_1.getSelfArg)(),
296
+ { name: 'shares', type: 'i128' },
297
+ { name: 'receiver', type: 'Address' },
298
+ { name: 'owner', type: 'Address' },
299
+ { name: 'operator', type: 'Address' },
300
+ ],
301
+ returns: 'i128',
302
+ code: ['Self::ContractType::redeem(e, shares, receiver, owner, operator)'],
303
+ },
304
+ });
305
+ const fungibleTokenTraitFunctions = (0, wizard_common_1.pickKeys)(exports.functions, [
306
+ 'total_supply',
307
+ 'balance',
308
+ 'allowance',
309
+ 'transfer',
310
+ 'transfer_from',
311
+ 'approve',
312
+ 'decimals',
313
+ 'name',
314
+ 'symbol',
315
+ ]);
316
+ const fungibleVaultTraitFunctions = (0, wizard_common_1.pickKeys)(exports.functions, [
317
+ 'query_asset',
318
+ 'total_assets',
319
+ 'convert_to_shares',
320
+ 'convert_to_assets',
321
+ 'max_deposit',
322
+ 'preview_deposit',
323
+ 'deposit',
324
+ 'max_mint',
325
+ 'preview_mint',
326
+ 'mint',
327
+ 'max_withdraw',
328
+ 'preview_withdraw',
329
+ 'withdraw',
330
+ 'max_redeem',
331
+ 'preview_redeem',
332
+ 'redeem',
333
+ ]);
334
+ //# sourceMappingURL=vault.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault.js","sourceRoot":"","sources":["../src/vault.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"zip-rust.d.ts","sourceRoot":"","sources":["../src/zip-rust.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AA8B3C,eAAO,MAAM,wBAAwB,GAAI,GAAG,QAAQ,EAAE,MAAM,cAAc,UAczE,CAAC;AAIF,eAAO,MAAM,cAAc,GAAU,GAAG,QAAQ,EAAE,MAAM,cAAc,mBACb,CAAC"}
1
+ {"version":3,"file":"zip-rust.d.ts","sourceRoot":"","sources":["../src/zip-rust.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AA+B3C,eAAO,MAAM,wBAAwB,GAAI,GAAG,QAAQ,EAAE,MAAM,cAAc,UAiBzE,CAAC;AAIF,eAAO,MAAM,cAAc,GAAU,GAAG,QAAQ,EAAE,MAAM,cAAc,mBACb,CAAC"}
package/dist/zip-rust.js CHANGED
@@ -29,7 +29,7 @@ const createRustZipEnvironment = (c, opts) => {
29
29
  const contractName = (0, zip_shared_1.contractOptionsToContractName)(opts?.kind || 'contract');
30
30
  const requiredLibDeps = (0, zip_shared_1.getRequiredLibDependencies)(c);
31
31
  zip.file(`contracts/${contractName}/src/contract.rs`, (0, print_1.removeCreateLevelAttributes)((0, print_1.printContract)(c)));
32
- zip.file(`contracts/${contractName}/src/test.rs`, (0, zip_shared_1.printRustNameTest)(c));
32
+ zip.file(`contracts/${contractName}/src/test.rs`, opts?.kind === 'Vault' ? (0, zip_shared_1.printVaultRustTest)(c) : (0, zip_shared_1.printRustNameTest)(c));
33
33
  zip.file(`contracts/${contractName}/src/lib.rs`, zip_shared_1.createRustLibFile);
34
34
  zip.file(`contracts/${contractName}/Cargo.toml`, (0, zip_shared_1.printContractCargo)(contractName, requiredLibDeps));
35
35
  zip.file('Cargo.toml', (0, zip_shared_1.workspaceCargo)(requiredLibDeps));
@@ -1 +1 @@
1
- {"version":3,"file":"zip-rust.js","sourceRoot":"","sources":["../src/zip-rust.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAG1B,mCAAqE;AACrE,6CAOsB;AAEtB,MAAM,MAAM,GAAG;;;;;;;;;;;;;CAad,CAAC;AAEF,MAAM,SAAS,GAAG;;CAEjB,CAAC;AAEK,MAAM,wBAAwB,GAAG,CAAC,CAAW,EAAE,IAAoB,EAAE,EAAE;IAC5E,MAAM,GAAG,GAAG,IAAI,eAAK,EAAE,CAAC;IAExB,MAAM,YAAY,GAAG,IAAA,0CAA6B,EAAC,IAAI,EAAE,IAAI,IAAI,UAAU,CAAC,CAAC;IAC7E,MAAM,eAAe,GAAG,IAAA,uCAA0B,EAAC,CAAC,CAAC,CAAC;IAEtD,GAAG,CAAC,IAAI,CAAC,aAAa,YAAY,kBAAkB,EAAE,IAAA,mCAA2B,EAAC,IAAA,qBAAa,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrG,GAAG,CAAC,IAAI,CAAC,aAAa,YAAY,cAAc,EAAE,IAAA,8BAAiB,EAAC,CAAC,CAAC,CAAC,CAAC;IACxE,GAAG,CAAC,IAAI,CAAC,aAAa,YAAY,aAAa,EAAE,8BAAiB,CAAC,CAAC;IACpE,GAAG,CAAC,IAAI,CAAC,aAAa,YAAY,aAAa,EAAE,IAAA,+BAAkB,EAAC,YAAY,EAAE,eAAe,CAAC,CAAC,CAAC;IACpG,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,IAAA,2BAAc,EAAC,eAAe,CAAC,CAAC,CAAC;IACxD,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IAElC,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAdW,QAAA,wBAAwB,4BAcnC;AAEF,MAAM,oBAAoB,GAAG,CAAC,GAAU,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AAEpE,MAAM,cAAc,GAAG,KAAK,EAAE,CAAW,EAAE,IAAoB,EAAE,EAAE,CACxE,oBAAoB,CAAC,IAAA,gCAAwB,EAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAD7C,QAAA,cAAc,kBAC+B"}
1
+ {"version":3,"file":"zip-rust.js","sourceRoot":"","sources":["../src/zip-rust.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAG1B,mCAAqE;AACrE,6CAQsB;AAEtB,MAAM,MAAM,GAAG;;;;;;;;;;;;;CAad,CAAC;AAEF,MAAM,SAAS,GAAG;;CAEjB,CAAC;AAEK,MAAM,wBAAwB,GAAG,CAAC,CAAW,EAAE,IAAoB,EAAE,EAAE;IAC5E,MAAM,GAAG,GAAG,IAAI,eAAK,EAAE,CAAC;IAExB,MAAM,YAAY,GAAG,IAAA,0CAA6B,EAAC,IAAI,EAAE,IAAI,IAAI,UAAU,CAAC,CAAC;IAC7E,MAAM,eAAe,GAAG,IAAA,uCAA0B,EAAC,CAAC,CAAC,CAAC;IAEtD,GAAG,CAAC,IAAI,CAAC,aAAa,YAAY,kBAAkB,EAAE,IAAA,mCAA2B,EAAC,IAAA,qBAAa,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrG,GAAG,CAAC,IAAI,CACN,aAAa,YAAY,cAAc,EACvC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,IAAA,+BAAkB,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAA,8BAAiB,EAAC,CAAC,CAAC,CACtE,CAAC;IACF,GAAG,CAAC,IAAI,CAAC,aAAa,YAAY,aAAa,EAAE,8BAAiB,CAAC,CAAC;IACpE,GAAG,CAAC,IAAI,CAAC,aAAa,YAAY,aAAa,EAAE,IAAA,+BAAkB,EAAC,YAAY,EAAE,eAAe,CAAC,CAAC,CAAC;IACpG,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,IAAA,2BAAc,EAAC,eAAe,CAAC,CAAC,CAAC;IACxD,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IAElC,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAjBW,QAAA,wBAAwB,4BAiBnC;AAEF,MAAM,oBAAoB,GAAG,CAAC,GAAU,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AAEpE,MAAM,cAAc,GAAG,KAAK,EAAE,CAAW,EAAE,IAAoB,EAAE,EAAE,CACxE,oBAAoB,CAAC,IAAA,gCAAwB,EAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAD7C,QAAA,cAAc,kBAC+B"}
@@ -3,6 +3,7 @@ declare function pascalToSnakeCase(string: string): string;
3
3
  export declare const contractOptionsToContractName: typeof pascalToSnakeCase;
4
4
  export declare function getAddressArgs(c: Pick<Contract, 'constructorArgs'>): string[];
5
5
  export declare const printRustNameTest: (c: Pick<Contract, "constructorArgs" | "name">) => string;
6
+ export declare const printVaultRustTest: (c: Pick<Contract, "constructorArgs" | "name">) => string;
6
7
  export declare function getRequiredLibDependencies(c: Pick<Contract, 'useClauses'>): string[];
7
8
  export declare const addDependenciesWith: (dependencyValue: string, dependenciesToAdd: string[]) => string;
8
9
  export declare const printContractCargo: (scaffoldContractName: string, requiredLibDeps: readonly string[]) => string;
@@ -1 +1 @@
1
- {"version":3,"file":"zip-shared.d.ts","sourceRoot":"","sources":["../src/zip-shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG3C,iBAAS,iBAAiB,CAAC,MAAM,EAAE,MAAM,UAKxC;AAED,eAAO,MAAM,6BAA6B,0BAAoB,CAAC;AAE/D,wBAAgB,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,GAAG,MAAM,EAAE,CAI7E;AAED,eAAO,MAAM,iBAAiB,GAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM,CAAC,WAqB9E,CAAC;AAiBF,wBAAgB,0BAA0B,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,GAAG,MAAM,EAAE,CAGpF;AAED,eAAO,MAAM,mBAAmB,GAAI,iBAAiB,MAAM,EAAE,mBAAmB,MAAM,EAAE,WACG,CAAC;AAE5F,eAAO,MAAM,kBAAkB,GAAI,sBAAsB,MAAM,EAAE,iBAAiB,SAAS,MAAM,EAAE,WAiBT,CAAC;AAE3F,eAAO,MAAM,iBAAiB,mEAK7B,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,iBAAiB,SAAS,MAAM,EAAE,WA0BhE,CAAC"}
1
+ {"version":3,"file":"zip-shared.d.ts","sourceRoot":"","sources":["../src/zip-shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG3C,iBAAS,iBAAiB,CAAC,MAAM,EAAE,MAAM,UAKxC;AAED,eAAO,MAAM,6BAA6B,0BAAoB,CAAC;AAE/D,wBAAgB,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,GAAG,MAAM,EAAE,CAI7E;AAED,eAAO,MAAM,iBAAiB,GAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM,CAAC,WAqB9E,CAAC;AAOF,eAAO,MAAM,kBAAkB,GAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM,CAAC,WAuD/E,CAAC;AAiBF,wBAAgB,0BAA0B,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,GAAG,MAAM,EAAE,CAGpF;AAED,eAAO,MAAM,mBAAmB,GAAI,iBAAiB,MAAM,EAAE,mBAAmB,MAAM,EAAE,WACG,CAAC;AAE5F,eAAO,MAAM,kBAAkB,GAAI,sBAAsB,MAAM,EAAE,iBAAiB,SAAS,MAAM,EAAE,WAiBT,CAAC;AAE3F,eAAO,MAAM,iBAAiB,mEAK7B,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,iBAAiB,SAAS,MAAM,EAAE,WA0BhE,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.workspaceCargo = exports.createRustLibFile = exports.printContractCargo = exports.addDependenciesWith = exports.printRustNameTest = exports.contractOptionsToContractName = void 0;
3
+ exports.workspaceCargo = exports.createRustLibFile = exports.printContractCargo = exports.addDependenciesWith = exports.printVaultRustTest = exports.printRustNameTest = exports.contractOptionsToContractName = void 0;
4
4
  exports.getAddressArgs = getAddressArgs;
5
5
  exports.getRequiredLibDependencies = getRequiredLibDependencies;
6
6
  const version_1 = require("./utils/version");
@@ -39,6 +39,65 @@ fn initial_state() {
39
39
  // Add more tests bellow
40
40
  `;
41
41
  exports.printRustNameTest = printRustNameTest;
42
+ // The vault's constructor takes an underlying asset address and derives its own
43
+ // decimals by calling into that asset contract. A generated address would have
44
+ // no `decimals()` to call, so the test deploys a minimal mock fungible asset
45
+ // first and registers the vault against it. A single-element tuple needs a
46
+ // trailing comma in Rust.
47
+ const printVaultRustTest = (c) => {
48
+ const registerArgs = (c.constructorArgs || []).map(arg => arg.name === 'asset' ? 'asset_address.clone()' : 'Address::generate(&env)');
49
+ const registerTuple = `(${registerArgs.join(', ')}${registerArgs.length === 1 ? ',' : ''})`;
50
+ return `#![cfg(test)]
51
+
52
+ extern crate std;
53
+
54
+ use soroban_sdk::{
55
+ contract, contractimpl, testutils::Address as _, Address, Env, MuxedAddress, String,
56
+ };
57
+ use stellar_tokens::fungible::{Base, FungibleToken};
58
+
59
+ use crate::contract::{ ${c.name}, ${c.name}Client };
60
+
61
+ // Mock asset contract: a minimal fungible token used as the vault's underlying asset.
62
+ #[contract]
63
+ pub struct MockAssetContract;
64
+
65
+ #[contractimpl]
66
+ impl MockAssetContract {
67
+ pub fn __constructor(e: &Env, initial_supply: i128, admin: Address) {
68
+ Base::set_metadata(
69
+ e,
70
+ 18,
71
+ String::from_str(e, "Mock Asset Token"),
72
+ String::from_str(e, "MAT"),
73
+ );
74
+ Base::mint(e, &admin, initial_supply);
75
+ }
76
+ }
77
+
78
+ #[contractimpl(contracttrait)]
79
+ impl FungibleToken for MockAssetContract {
80
+ type ContractType = Base;
81
+ }
82
+
83
+ #[test]
84
+ fn initial_state() {
85
+ let env = Env::default();
86
+
87
+ let admin = Address::generate(&env);
88
+ let asset_address = env.register(MockAssetContract, (1_000_000_000i128, admin));
89
+
90
+ let contract_addr = env.register(${c.name}, ${registerTuple});
91
+ let client = ${c.name}Client::new(&env, &contract_addr);
92
+
93
+ assert_eq!(client.query_asset(), asset_address);
94
+ assert_eq!(client.name(), String::from_str(&env, "${c.name}"));
95
+ }
96
+
97
+ // Add more tests bellow
98
+ `;
99
+ };
100
+ exports.printVaultRustTest = printVaultRustTest;
42
101
  const libDependencies = [
43
102
  'stellar-tokens',
44
103
  'stellar-access',
@@ -1 +1 @@
1
- {"version":3,"file":"zip-shared.js","sourceRoot":"","sources":["../src/zip-shared.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"zip-shared.js","sourceRoot":"","sources":["../src/zip-shared.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openzeppelin/wizard-stellar",
3
- "version": "0.6.1",
3
+ "version": "0.6.3",
4
4
  "description": "A boilerplate generator to get started with OpenZeppelin Stellar Soroban Contracts",
5
5
  "license": "AGPL-3.0-only",
6
6
  "repository": "https://github.com/OpenZeppelin/contracts-wizard",
package/src/api.ts CHANGED
@@ -3,11 +3,17 @@ import type { FungibleOptions } from './fungible';
3
3
  import type { GovernorOptions } from './governor';
4
4
  import type { NonFungibleOptions } from './non-fungible';
5
5
  import type { StablecoinOptions } from './stablecoin';
6
+ import type { VaultOptions } from './vault';
6
7
  import {
7
8
  printStablecoin,
8
9
  defaults as stablecoinDefaults,
9
10
  isAccessControlRequired as stablecoinIsAccessControlRequired,
10
11
  } from './stablecoin';
12
+ import {
13
+ printVault,
14
+ defaults as vaultDefaults,
15
+ isAccessControlRequired as vaultIsAccessControlRequired,
16
+ } from './vault';
11
17
  import {
12
18
  printFungible,
13
19
  defaults as fungibledefaults,
@@ -48,6 +54,7 @@ export type Fungible = WizardContractAPI<FungibleOptions> & AccessControlAPI<Fun
48
54
  export type Governor = WizardContractAPI<GovernorOptions> & AccessControlAPI<GovernorOptions>;
49
55
  export type NonFungible = WizardContractAPI<NonFungibleOptions> & AccessControlAPI<NonFungibleOptions>;
50
56
  export type Stablecoin = WizardContractAPI<StablecoinOptions> & AccessControlAPI<StablecoinOptions>;
57
+ export type Vault = WizardContractAPI<VaultOptions> & AccessControlAPI<VaultOptions>;
51
58
 
52
59
  export const fungible: Fungible = {
53
60
  print: printFungible,
@@ -72,3 +79,9 @@ export const stablecoin: Stablecoin = {
72
79
  defaults: stablecoinDefaults,
73
80
  isAccessControlRequired: stablecoinIsAccessControlRequired,
74
81
  };
82
+
83
+ export const vault: Vault = {
84
+ print: printVault,
85
+ defaults: vaultDefaults,
86
+ isAccessControlRequired: vaultIsAccessControlRequired,
87
+ };
@@ -6,12 +6,15 @@ import type { NonFungibleOptions } from './non-fungible';
6
6
  import { buildNonFungible } from './non-fungible';
7
7
  import type { StablecoinOptions } from './stablecoin';
8
8
  import { buildStablecoin } from './stablecoin';
9
+ import type { VaultOptions } from './vault';
10
+ import { buildVault } from './vault';
9
11
 
10
12
  export interface KindedOptions {
11
13
  Fungible: { kind: 'Fungible' } & FungibleOptions;
12
14
  Governor: { kind: 'Governor' } & GovernorOptions;
13
15
  NonFungible: { kind: 'NonFungible' } & NonFungibleOptions;
14
16
  Stablecoin: { kind: 'Stablecoin' } & StablecoinOptions;
17
+ Vault: { kind: 'Vault' } & VaultOptions;
15
18
  }
16
19
 
17
20
  export type GenericOptions = KindedOptions[keyof KindedOptions];
@@ -30,6 +33,9 @@ export function buildGeneric(opts: GenericOptions) {
30
33
  case 'Stablecoin':
31
34
  return buildStablecoin(opts);
32
35
 
36
+ case 'Vault':
37
+ return buildVault(opts);
38
+
33
39
  default: {
34
40
  const _: never = opts;
35
41
  throw new Error('Unknown kind');
@@ -6,6 +6,7 @@ import { generateFungibleOptions } from './fungible';
6
6
  import { generateGovernorOptions } from './governor';
7
7
  import { generateNonFungibleOptions } from './non-fungible';
8
8
  import { generateStablecoinOptions } from './stablecoin';
9
+ import { generateVaultOptions } from './vault';
9
10
  import type { GenericOptions, KindedOptions } from '../build-generic';
10
11
  import { buildGeneric } from '../build-generic';
11
12
  import { printContract } from '../print';
@@ -38,6 +39,12 @@ export function* generateOptions(kind?: Kind): Generator<GenericOptions> {
38
39
  yield { kind: 'Stablecoin', ...kindOpts };
39
40
  }
40
41
  }
42
+
43
+ if (!kind || kind === 'Vault') {
44
+ for (const kindOpts of generateVaultOptions()) {
45
+ yield { kind: 'Vault', ...kindOpts };
46
+ }
47
+ }
41
48
  }
42
49
 
43
50
  interface GeneratedContract {
@@ -0,0 +1,21 @@
1
+ import type { VaultOptions } from '../vault';
2
+ import { accessOptions } from '../set-access-control';
3
+ import { infoOptions } from '../set-info';
4
+ import { generateAlternatives } from './alternatives';
5
+
6
+ const booleans = [true, false];
7
+
8
+ const blueprint = {
9
+ name: ['MyVault'],
10
+ symbol: ['MTK'],
11
+ decimalsOffset: ['0', '2'],
12
+ pausable: booleans,
13
+ upgradeable: booleans,
14
+ access: accessOptions,
15
+ info: infoOptions,
16
+ explicitImplementations: booleans,
17
+ };
18
+
19
+ export function* generateVaultOptions(): Generator<Required<VaultOptions>> {
20
+ yield* generateAlternatives(blueprint);
21
+ }
package/src/index.ts CHANGED
@@ -25,8 +25,10 @@ export { fungible } from './api';
25
25
  export { governor } from './api';
26
26
  export { nonFungible } from './api';
27
27
  export { stablecoin } from './api';
28
+ export { vault } from './api';
28
29
 
29
30
  export type { FungibleOptions } from './fungible';
30
31
  export type { GovernorOptions } from './governor';
31
32
  export type { NonFungibleOptions } from './non-fungible';
32
33
  export type { StablecoinOptions } from './stablecoin';
34
+ export type { VaultOptions } from './vault';
package/src/kind.ts CHANGED
@@ -18,6 +18,7 @@ function isKind<T>(value: Kind | T): value is Kind {
18
18
  case 'Governor':
19
19
  case 'NonFungible':
20
20
  case 'Stablecoin':
21
+ case 'Vault':
21
22
  return true;
22
23
 
23
24
  default: {
package/src/set-info.ts CHANGED
@@ -1,4 +1,17 @@
1
1
  import type { ContractBuilder } from './contract';
2
+ import { OptionsError } from './error';
3
+
4
+ // These values are printed into a // comment line in the generated Rust. LF
5
+ // ends that comment, letting following text become source. CR and U+2028/U+2029
6
+ // cannot break out in Rust, but are rejected as defense in depth (review tools
7
+ // render U+2028/U+2029 as line breaks).
8
+ const LINE_TERMINATOR = /[\n\r\u2028\u2029]/u;
9
+
10
+ function checkSingleLine(value: string, field: string): void {
11
+ if (LINE_TERMINATOR.test(value)) {
12
+ throw new OptionsError({ [field]: 'Must not contain line breaks' });
13
+ }
14
+ }
2
15
 
3
16
  export const infoOptions = [{}, { license: 'WTFPL' }] as const;
4
17
 
@@ -10,7 +23,13 @@ export type Info = {
10
23
  };
11
24
 
12
25
  export function setInfo(c: ContractBuilder, { securityContact, license }: Info): void {
13
- if (securityContact) c.addContractMetadata({ key: 'security_contact', value: securityContact });
26
+ if (securityContact) {
27
+ checkSingleLine(securityContact, 'securityContact');
28
+ c.addContractMetadata({ key: 'security_contact', value: securityContact });
29
+ }
14
30
 
15
- if (license) c.license = license;
31
+ if (license) {
32
+ checkSingleLine(license, 'license');
33
+ c.license = license;
34
+ }
16
35
  }