@openzeppelin/wizard-stellar 0.4.4 → 0.5.0

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 (64) hide show
  1. package/dist/add-pausable.d.ts +1 -1
  2. package/dist/add-pausable.d.ts.map +1 -1
  3. package/dist/add-pausable.js +8 -8
  4. package/dist/add-pausable.js.map +1 -1
  5. package/dist/add-upgradeable.d.ts +1 -1
  6. package/dist/add-upgradeable.d.ts.map +1 -1
  7. package/dist/add-upgradeable.js +2 -2
  8. package/dist/add-upgradeable.js.map +1 -1
  9. package/dist/common-options.d.ts +1 -0
  10. package/dist/common-options.d.ts.map +1 -1
  11. package/dist/common-options.js +2 -0
  12. package/dist/common-options.js.map +1 -1
  13. package/dist/contract.d.ts +2 -0
  14. package/dist/contract.d.ts.map +1 -1
  15. package/dist/contract.js +7 -0
  16. package/dist/contract.js.map +1 -1
  17. package/dist/fungible.d.ts.map +1 -1
  18. package/dist/fungible.js +38 -23
  19. package/dist/fungible.js.map +1 -1
  20. package/dist/generate/fungible.d.ts.map +1 -1
  21. package/dist/generate/fungible.js +1 -0
  22. package/dist/generate/fungible.js.map +1 -1
  23. package/dist/generate/non-fungible.d.ts.map +1 -1
  24. package/dist/generate/non-fungible.js +1 -0
  25. package/dist/generate/non-fungible.js.map +1 -1
  26. package/dist/generate/stablecoin.d.ts.map +1 -1
  27. package/dist/generate/stablecoin.js +1 -0
  28. package/dist/generate/stablecoin.js.map +1 -1
  29. package/dist/non-fungible.d.ts +1 -1
  30. package/dist/non-fungible.d.ts.map +1 -1
  31. package/dist/non-fungible.js +80 -41
  32. package/dist/non-fungible.js.map +1 -1
  33. package/dist/set-access-control.d.ts +2 -2
  34. package/dist/set-access-control.d.ts.map +1 -1
  35. package/dist/set-access-control.js +113 -10
  36. package/dist/set-access-control.js.map +1 -1
  37. package/dist/stablecoin.d.ts +2 -1
  38. package/dist/stablecoin.d.ts.map +1 -1
  39. package/dist/stablecoin.js +27 -6
  40. package/dist/stablecoin.js.map +1 -1
  41. package/dist/utils/compile-test.d.ts +1 -0
  42. package/dist/utils/compile-test.d.ts.map +1 -1
  43. package/dist/utils/compile-test.js +19 -5
  44. package/dist/utils/compile-test.js.map +1 -1
  45. package/dist/utils/version.d.ts +4 -4
  46. package/dist/utils/version.js +3 -3
  47. package/dist/zip-rust.d.ts.map +1 -1
  48. package/dist/zip-rust.js +4 -0
  49. package/dist/zip-rust.js.map +1 -1
  50. package/package.json +3 -3
  51. package/src/add-pausable.ts +29 -15
  52. package/src/add-upgradeable.ts +13 -6
  53. package/src/common-options.ts +3 -0
  54. package/src/contract.ts +9 -0
  55. package/src/fungible.ts +57 -29
  56. package/src/generate/fungible.ts +1 -0
  57. package/src/generate/non-fungible.ts +1 -0
  58. package/src/generate/stablecoin.ts +1 -0
  59. package/src/non-fungible.ts +121 -45
  60. package/src/set-access-control.ts +113 -9
  61. package/src/stablecoin.ts +39 -9
  62. package/src/utils/compile-test.ts +52 -25
  63. package/src/utils/version.ts +3 -3
  64. package/src/zip-rust.ts +5 -0
@@ -4,11 +4,11 @@ exports.limitationsOptions = exports.defaults = void 0;
4
4
  exports.printStablecoin = printStablecoin;
5
5
  exports.isAccessControlRequired = isAccessControlRequired;
6
6
  exports.buildStablecoin = buildStablecoin;
7
- const define_functions_1 = require("./utils/define-functions");
8
7
  const common_options_1 = require("./common-options");
9
- const print_1 = require("./print");
10
8
  const fungible_1 = require("./fungible");
9
+ const print_1 = require("./print");
11
10
  const set_access_control_1 = require("./set-access-control");
11
+ const define_functions_1 = require("./utils/define-functions");
12
12
  exports.defaults = {
13
13
  ...fungible_1.defaults,
14
14
  name: 'MyStablecoin',
@@ -34,11 +34,11 @@ function buildStablecoin(opts) {
34
34
  const allOpts = withDefaults(opts);
35
35
  const c = (0, fungible_1.buildFungible)(allOpts);
36
36
  if (allOpts.limitations) {
37
- addLimitations(c, allOpts.access, allOpts.limitations);
37
+ addLimitations(c, allOpts.access, allOpts.limitations, allOpts.explicitImplementations);
38
38
  }
39
39
  return c;
40
40
  }
41
- function addLimitations(c, access, mode) {
41
+ function addLimitations(c, access, mode, explicitImplementations) {
42
42
  const type = mode === 'allowlist';
43
43
  const limitationsTrait = {
44
44
  traitName: type ? 'FungibleAllowList' : 'FungibleBlockList',
@@ -54,6 +54,8 @@ function addLimitations(c, access, mode) {
54
54
  c.addUseClause('stellar_tokens::fungible', 'blocklist::{BlockList, FungibleBlockList}');
55
55
  c.overrideAssocType('FungibleToken', 'type ContractType = BlockList;');
56
56
  }
57
+ if (explicitImplementations)
58
+ overrideFungibleReadonlyFunctionsWithBase(c);
57
59
  const [getterFn, addFn, removeFn] = type
58
60
  ? [functions.allowed, functions.allow_user, functions.disallow_user]
59
61
  : [functions.blocked, functions.block_user, functions.unblock_user];
@@ -64,9 +66,28 @@ function addLimitations(c, access, mode) {
64
66
  caller: 'operator',
65
67
  };
66
68
  c.addTraitFunction(limitationsTrait, addFn);
67
- (0, set_access_control_1.requireAccessControl)(c, limitationsTrait, addFn, access, accessProps);
69
+ (0, set_access_control_1.requireAccessControl)(c, limitationsTrait, addFn, access, accessProps, explicitImplementations);
68
70
  c.addTraitFunction(limitationsTrait, removeFn);
69
- (0, set_access_control_1.requireAccessControl)(c, limitationsTrait, removeFn, access, accessProps);
71
+ (0, set_access_control_1.requireAccessControl)(c, limitationsTrait, removeFn, access, accessProps, explicitImplementations);
72
+ }
73
+ function overrideFungibleReadonlyFunctionsWithBase(c) {
74
+ c.addUseClause('stellar_tokens::fungible', 'ContractOverrides');
75
+ const fungibleTokenTrait = {
76
+ traitName: 'FungibleToken',
77
+ structName: c.name,
78
+ tags: [],
79
+ };
80
+ const overrides = [
81
+ [fungible_1.functions.total_supply, ['Self::ContractType::total_supply(e)']],
82
+ [fungible_1.functions.balance, ['Self::ContractType::balance(e, &account)']],
83
+ [fungible_1.functions.allowance, ['Self::ContractType::allowance(e, &owner, &spender)']],
84
+ [fungible_1.functions.decimals, ['Self::ContractType::decimals(e)']],
85
+ [fungible_1.functions.name, ['Self::ContractType::name(e)']],
86
+ [fungible_1.functions.symbol, ['Self::ContractType::symbol(e)']],
87
+ ];
88
+ for (const [fn, code] of overrides) {
89
+ c.setFunctionCode(fn, code, fungibleTokenTrait);
90
+ }
70
91
  }
71
92
  const functions = {
72
93
  ...fungible_1.functions,
@@ -1 +1 @@
1
- {"version":3,"file":"stablecoin.js","sourceRoot":"","sources":["../src/stablecoin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stablecoin.js","sourceRoot":"","sources":["../src/stablecoin.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@ export type MakeContract = (opt: GenericOptions) => Contract;
7
7
  export declare const withTemporaryFolderDo: <Args extends unknown[]>(testFunction: WithTemporaryFolderTestFunction<Args>) => (...testFunctionArguments: Args) => (test: ExecutionContext) => Promise<void>;
8
8
  export declare const runRustCompilationTest: (makeContract: MakeContract, opts: GenericOptions, testOptions: {
9
9
  snapshotResult: boolean;
10
+ excludeExplicitTraitTest?: boolean;
10
11
  }) => (test: ExecutionContext) => Promise<void>;
11
12
  export {};
12
13
  //# sourceMappingURL=compile-test.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"compile-test.d.ts","sourceRoot":"","sources":["../../src/utils/compile-test.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,KAAK,CAAC;AAI5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAQ5C,eAAO,MAAM,YAAY,GAAU,GAAG,gBAAgB,EAAE,iBAAiB,MAAM,kBAI9E,CAAC;AAEF,KAAK,+BAA+B,CAAC,IAAI,SAAS,OAAO,EAAE,IAAI,CAC7D,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,gBAAgB,EAAE,MAAM,CAAC,KACzC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAE1B,MAAM,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,cAAc,KAAK,QAAQ,CAAC;AAE7D,eAAO,MAAM,qBAAqB,GAC/B,IAAI,SAAS,OAAO,EAAE,EAAE,cAAc,+BAA+B,CAAC,IAAI,CAAC,MAC3E,GAAG,uBAAuB,IAAI,MACxB,MAAM,gBAAgB,kBAQ5B,CAAC;AAEJ,eAAO,MAAM,sBAAsB;oBAIA,OAAO;OAdjC,MAAM,gBAAgB,kBAuC9B,CAAC"}
1
+ {"version":3,"file":"compile-test.d.ts","sourceRoot":"","sources":["../../src/utils/compile-test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,KAAK,CAAC;AAM5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAO5C,eAAO,MAAM,YAAY,GAAU,GAAG,gBAAgB,EAAE,iBAAiB,MAAM,kBAI9E,CAAC;AAEF,KAAK,+BAA+B,CAAC,IAAI,SAAS,OAAO,EAAE,IAAI,CAC7D,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,gBAAgB,EAAE,MAAM,CAAC,KACzC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAE1B,MAAM,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,cAAc,KAAK,QAAQ,CAAC;AAE7D,eAAO,MAAM,qBAAqB,GAC/B,IAAI,SAAS,OAAO,EAAE,EAAE,cAAc,+BAA+B,CAAC,IAAI,CAAC,MAC3E,GAAG,uBAAuB,IAAI,MACxB,MAAM,gBAAgB,kBAO5B,CAAC;AAkCJ,eAAO,MAAM,sBAAsB;oBAIA,OAAO;+BAA6B,OAAO;OA7CrE,MAAM,gBAAgB,kBAkE9B,CAAC"}
@@ -4,14 +4,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.runRustCompilationTest = exports.withTemporaryFolderDo = exports.runCargoTest = void 0;
7
+ const child_process_1 = require("child_process");
8
+ const promises_1 = require("fs/promises");
7
9
  const os_1 = require("os");
8
10
  const path_1 = __importDefault(require("path"));
9
11
  const util_1 = require("util");
10
- const child_process_1 = require("child_process");
11
- const zip_test_1 = require("./zip-test");
12
- const promises_1 = require("fs/promises");
13
- const zip_shared_1 = require("../zip-shared");
14
12
  const zip_rust_1 = require("../zip-rust");
13
+ const zip_shared_1 = require("../zip-shared");
14
+ const zip_test_1 = require("./zip-test");
15
15
  const asyncExec = (0, util_1.promisify)(child_process_1.exec);
16
16
  const runCargoTest = async (t, temporaryFolder) => {
17
17
  const result = await asyncExec(`cd "${temporaryFolder}" && cargo test`);
@@ -28,8 +28,9 @@ const withTemporaryFolderDo = (testFunction) => (...testFunctionArguments) => as
28
28
  }
29
29
  };
30
30
  exports.withTemporaryFolderDo = withTemporaryFolderDo;
31
- exports.runRustCompilationTest = (0, exports.withTemporaryFolderDo)(async (makeContract, opts, testOptions, test, folderPath) => {
31
+ const doRunRustCompilationTest = async (makeContract, opts, testOptions, test, folderPath) => {
32
32
  test.timeout(3000000);
33
+ await (0, promises_1.mkdir)(folderPath, { recursive: true });
33
34
  const scaffoldContractName = (0, zip_shared_1.contractOptionsToContractName)(opts?.kind || 'contract');
34
35
  const expectedZipFiles = [
35
36
  `contracts/${scaffoldContractName}/src/contract.rs`,
@@ -37,6 +38,7 @@ exports.runRustCompilationTest = (0, exports.withTemporaryFolderDo)(async (makeC
37
38
  `contracts/${scaffoldContractName}/src/lib.rs`,
38
39
  `contracts/${scaffoldContractName}/Cargo.toml`,
39
40
  'Cargo.toml',
41
+ '.gitignore',
40
42
  'README.md',
41
43
  ];
42
44
  const zip = await (0, zip_rust_1.zipRustProject)(makeContract(opts), opts);
@@ -45,5 +47,17 @@ exports.runRustCompilationTest = (0, exports.withTemporaryFolderDo)(async (makeC
45
47
  await (0, exports.runCargoTest)(test, folderPath);
46
48
  if (testOptions.snapshotResult)
47
49
  await (0, zip_test_1.snapshotZipContents)(test, zip, expectedZipFiles);
50
+ };
51
+ exports.runRustCompilationTest = (0, exports.withTemporaryFolderDo)(async (makeContract, opts, testOptions, test, folderPath) => {
52
+ await doRunRustCompilationTest(makeContract, opts, testOptions, test, `${folderPath}/default`);
53
+ const shouldBeExcludedOrHasAlreadyRun = testOptions.excludeExplicitTraitTest || opts.explicitImplementations;
54
+ if (shouldBeExcludedOrHasAlreadyRun)
55
+ return;
56
+ try {
57
+ await doRunRustCompilationTest(makeContract, { ...opts, explicitImplementations: true }, testOptions, test, `${folderPath}/explicit`);
58
+ }
59
+ catch (error) {
60
+ throw new Error(`EXPLICIT IMPLEMENTATION ERROR: ${error}`);
61
+ }
48
62
  });
49
63
  //# sourceMappingURL=compile-test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"compile-test.js","sourceRoot":"","sources":["../../src/utils/compile-test.ts"],"names":[],"mappings":";;;;;;AAAA,2BAA4B;AAE5B,gDAAwB;AACxB,+BAAiC;AACjC,iDAAqC;AAGrC,yCAA0G;AAC1G,0CAA0C;AAC1C,8CAA8D;AAC9D,0CAA6C;AAE7C,MAAM,SAAS,GAAG,IAAA,gBAAS,EAAC,oBAAI,CAAC,CAAC;AAE3B,MAAM,YAAY,GAAG,KAAK,EAAE,CAAmB,EAAE,eAAuB,EAAE,EAAE;IACjF,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,OAAO,eAAe,iBAAiB,CAAC,CAAC;IAExE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AACrC,CAAC,CAAC;AAJW,QAAA,YAAY,gBAIvB;AAQK,MAAM,qBAAqB,GAChC,CAAyB,YAAmD,EAAE,EAAE,CAChF,CAAC,GAAG,qBAA2B,EAAE,EAAE,CACnC,KAAK,EAAE,IAAsB,EAAE,EAAE;IAC/B,MAAM,eAAe,GAAG,MAAM,IAAA,kBAAO,EAAC,cAAI,CAAC,IAAI,CAAC,IAAA,WAAM,GAAE,EAAE,oBAAoB,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC;IAEtG,IAAI,CAAC;QACH,MAAM,YAAY,CAAC,GAAG,qBAAqB,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;IACtE,CAAC;YAAS,CAAC;QACT,MAAM,IAAA,aAAE,EAAC,eAAe,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC,CAAC;AAXS,QAAA,qBAAqB,yBAW9B;AAES,QAAA,sBAAsB,GAAG,IAAA,6BAAqB,EACzD,KAAK,EACH,YAA0B,EAC1B,IAAoB,EACpB,WAAwC,EACxC,IAAsB,EACtB,UAAkB,EAClB,EAAE;IACF,IAAI,CAAC,OAAO,CAAC,OAAS,CAAC,CAAC;IAExB,MAAM,oBAAoB,GAAG,IAAA,0CAA6B,EAAC,IAAI,EAAE,IAAI,IAAI,UAAU,CAAC,CAAC;IAErF,MAAM,gBAAgB,GAAG;QACvB,aAAa,oBAAoB,kBAAkB;QACnD,aAAa,oBAAoB,cAAc;QAC/C,aAAa,oBAAoB,aAAa;QAC9C,aAAa,oBAAoB,aAAa;QAC9C,YAAY;QACZ,WAAW;KACZ,CAAC;IAEF,MAAM,GAAG,GAAG,MAAM,IAAA,yBAAc,EAAC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;IAE3D,IAAA,uBAAY,EAAC,IAAI,EAAE,GAAG,EAAE,IAAA,oCAAyB,EAAC,gBAAgB,CAAC,CAAC,CAAC;IACrE,MAAM,IAAA,yBAAc,EAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACtC,MAAM,IAAA,oBAAY,EAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAErC,IAAI,WAAW,CAAC,cAAc;QAAE,MAAM,IAAA,8BAAmB,EAAC,IAAI,EAAE,GAAG,EAAE,gBAAgB,CAAC,CAAC;AACzF,CAAC,CACF,CAAC"}
1
+ {"version":3,"file":"compile-test.js","sourceRoot":"","sources":["../../src/utils/compile-test.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,14 @@
1
1
  /**
2
2
  * The actual latest version to use in links.
3
3
  */
4
- export declare const contractsVersion = "0.4.1";
5
- export declare const contractsVersionTag = "v0.4.1";
4
+ export declare const contractsVersion = "0.6.0";
5
+ export declare const contractsVersionTag = "v0.6.0";
6
6
  /**
7
7
  * Semantic version string representing of the minimum compatible version of Contracts to display in output.
8
8
  */
9
- export declare const compatibleContractsSemver = "^0.4.1";
9
+ export declare const compatibleContractsSemver = "^0.6.0";
10
10
  /**
11
11
  * The Soroban version for which compilation and testing have passing tests
12
12
  */
13
- export declare const compatibleSorobanVersion = "22.0.8";
13
+ export declare const compatibleSorobanVersion = "23.4.0";
14
14
  //# sourceMappingURL=version.d.ts.map
@@ -4,14 +4,14 @@ exports.compatibleSorobanVersion = exports.compatibleContractsSemver = exports.c
4
4
  /**
5
5
  * The actual latest version to use in links.
6
6
  */
7
- exports.contractsVersion = '0.4.1';
7
+ exports.contractsVersion = '0.6.0';
8
8
  exports.contractsVersionTag = `v${exports.contractsVersion}`;
9
9
  /**
10
10
  * Semantic version string representing of the minimum compatible version of Contracts to display in output.
11
11
  */
12
- exports.compatibleContractsSemver = '^0.4.1';
12
+ exports.compatibleContractsSemver = '^0.6.0';
13
13
  /**
14
14
  * The Soroban version for which compilation and testing have passing tests
15
15
  */
16
- exports.compatibleSorobanVersion = '22.0.8';
16
+ exports.compatibleSorobanVersion = '23.4.0';
17
17
  //# sourceMappingURL=version.js.map
@@ -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;AAyB3C,eAAO,MAAM,wBAAwB,GAAI,GAAG,QAAQ,EAAE,MAAM,cAAc,UAYzE,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;AA6B3C,eAAO,MAAM,wBAAwB,GAAI,GAAG,QAAQ,EAAE,MAAM,cAAc,UAazE,CAAC;AAIF,eAAO,MAAM,cAAc,GAAU,GAAG,QAAQ,EAAE,MAAM,cAAc,mBACb,CAAC"}
package/dist/zip-rust.js CHANGED
@@ -21,6 +21,9 @@ Continue your development journey with [Stellar CLI](https://github.com/stellar/
21
21
  - See [Rust and Stellar installation guide](https://developers.stellar.org/docs/build/smart-contracts/getting-started/setup).
22
22
  - See [Git installation guide](https://github.com/git-guides/install-git).
23
23
  `;
24
+ const gitIgnore = `\
25
+ target/
26
+ `;
24
27
  const createRustZipEnvironment = (c, opts) => {
25
28
  const zip = new jszip_1.default();
26
29
  const contractName = (0, zip_shared_1.contractOptionsToContractName)(opts?.kind || 'contract');
@@ -29,6 +32,7 @@ const createRustZipEnvironment = (c, opts) => {
29
32
  zip.file(`contracts/${contractName}/src/lib.rs`, zip_shared_1.createRustLibFile);
30
33
  zip.file(`contracts/${contractName}/Cargo.toml`, (0, zip_shared_1.printContractCargo)(contractName));
31
34
  zip.file('Cargo.toml', zip_shared_1.workspaceCargo);
35
+ zip.file('.gitignore', gitIgnore);
32
36
  return zip;
33
37
  };
34
38
  exports.createRustZipEnvironment = createRustZipEnvironment;
@@ -1 +1 @@
1
- {"version":3,"file":"zip-rust.js","sourceRoot":"","sources":["../src/zip-rust.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAG1B,mCAAqE;AACrE,6CAMsB;AAEtB,MAAM,MAAM,GAAG;;;;;;;;;;;;;CAad,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;IAE7E,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,CAAC,CAAC,CAAC;IACnF,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,2BAAc,CAAC,CAAC;IAEvC,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAZW,QAAA,wBAAwB,4BAYnC;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,6CAMsB;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;IAE7E,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,CAAC,CAAC,CAAC;IACnF,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,2BAAc,CAAC,CAAC;IACvC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IAElC,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAbW,QAAA,wBAAwB,4BAanC;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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openzeppelin/wizard-stellar",
3
- "version": "0.4.4",
3
+ "version": "0.5.0",
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",
@@ -25,8 +25,8 @@
25
25
  "@types/semver": "^7.5.7",
26
26
  "ava": "^6.0.0",
27
27
  "rimraf": "^5.0.0",
28
+ "semver": "^7.6.0",
28
29
  "ts-node": "^10.4.0",
29
- "typescript": "^5.0.0",
30
- "semver": "^7.6.0"
30
+ "typescript": "^5.0.0"
31
31
  }
32
32
  }
@@ -1,13 +1,12 @@
1
1
  import { getSelfArg } from './common-options';
2
2
  import type { BaseFunction, ContractBuilder } from './contract';
3
3
  import type { Access } from './set-access-control';
4
- import { requireAccessControl } from './set-access-control';
4
+ import { DEFAULT_ACCESS_CONTROL, requireAccessControl } from './set-access-control';
5
5
  import { defineFunctions } from './utils/define-functions';
6
6
 
7
- export function addPausable(c: ContractBuilder, access: Access) {
7
+ export function addPausable(c: ContractBuilder, access: Access, explicitImplementations: boolean) {
8
8
  c.addUseClause('stellar_contract_utils::pausable', 'self', { alias: 'pausable' });
9
9
  c.addUseClause('stellar_contract_utils::pausable', 'Pausable');
10
- c.addUseClause('stellar_macros', 'default_impl');
11
10
 
12
11
  const pausableTrait = {
13
12
  traitName: 'Pausable',
@@ -16,23 +15,38 @@ export function addPausable(c: ContractBuilder, access: Access) {
16
15
  section: 'Utils',
17
16
  };
18
17
 
19
- const pauseFn: BaseFunction = access === 'ownable' ? functions.pause_unused_caller : functions.pause;
20
- const unpauseFn: BaseFunction = access === 'ownable' ? functions.unpause_unused_caller : functions.unpause;
18
+ const effectiveAccess = access === false ? DEFAULT_ACCESS_CONTROL : access;
19
+ const pauseFn: BaseFunction = effectiveAccess === 'ownable' ? functions.pause_unused_caller : functions.pause;
20
+ const unpauseFn: BaseFunction = effectiveAccess === 'ownable' ? functions.unpause_unused_caller : functions.unpause;
21
21
 
22
22
  c.addTraitFunction(pausableTrait, functions.paused);
23
23
  c.addTraitFunction(pausableTrait, pauseFn);
24
24
  c.addTraitFunction(pausableTrait, unpauseFn);
25
- requireAccessControl(c, pausableTrait, pauseFn, access, {
26
- useMacro: true,
27
- role: 'pauser',
28
- caller: 'caller',
29
- });
25
+ requireAccessControl(
26
+ c,
27
+ pausableTrait,
28
+ pauseFn,
29
+ effectiveAccess,
30
+ {
31
+ useMacro: true,
32
+ role: 'pauser',
33
+ caller: 'caller',
34
+ },
35
+ explicitImplementations,
36
+ );
30
37
 
31
- requireAccessControl(c, pausableTrait, unpauseFn, access, {
32
- useMacro: true,
33
- role: 'pauser',
34
- caller: 'caller',
35
- });
38
+ requireAccessControl(
39
+ c,
40
+ pausableTrait,
41
+ unpauseFn,
42
+ effectiveAccess,
43
+ {
44
+ useMacro: true,
45
+ role: 'pauser',
46
+ caller: 'caller',
47
+ },
48
+ explicitImplementations,
49
+ );
36
50
  }
37
51
 
38
52
  const functions = defineFunctions({
@@ -4,7 +4,7 @@ import { requireAccessControl } from './set-access-control';
4
4
  import type { BaseFunction, ContractBuilder } from './contract';
5
5
  import { defineFunctions } from './utils/define-functions';
6
6
 
7
- export function addUpgradeable(c: ContractBuilder, access: Access) {
7
+ export function addUpgradeable(c: ContractBuilder, access: Access, explicitImplementations: boolean) {
8
8
  const functions = defineFunctions({
9
9
  _require_auth: {
10
10
  args: [getSelfArg(), { name: 'operator', type: '&Address' }],
@@ -34,9 +34,16 @@ export function addUpgradeable(c: ContractBuilder, access: Access) {
34
34
 
35
35
  c.addTraitFunction(upgradeableTrait, upgradeFn);
36
36
 
37
- requireAccessControl(c, upgradeableTrait, upgradeFn, access, {
38
- useMacro: false,
39
- role: 'upgrader',
40
- caller: 'operator',
41
- });
37
+ requireAccessControl(
38
+ c,
39
+ upgradeableTrait,
40
+ upgradeFn,
41
+ access,
42
+ {
43
+ useMacro: false,
44
+ role: 'upgrader',
45
+ caller: 'operator',
46
+ },
47
+ explicitImplementations,
48
+ );
42
49
  }
@@ -10,6 +10,7 @@ export const defaults: Required<CommonOptions> = {
10
10
  export const contractDefaults: Required<CommonContractOptions> = {
11
11
  ...defaults,
12
12
  access: false,
13
+ explicitImplementations: false,
13
14
  } as const;
14
15
 
15
16
  export interface CommonOptions {
@@ -18,6 +19,7 @@ export interface CommonOptions {
18
19
 
19
20
  export interface CommonContractOptions extends CommonOptions {
20
21
  access?: Access;
22
+ explicitImplementations?: boolean;
21
23
  }
22
24
 
23
25
  export function withCommonDefaults(opts: CommonOptions): Required<CommonOptions> {
@@ -30,6 +32,7 @@ export function withCommonContractDefaults(opts: CommonContractOptions): Require
30
32
  return {
31
33
  ...withCommonDefaults(opts),
32
34
  access: opts.access ?? contractDefaults.access,
35
+ explicitImplementations: opts.explicitImplementations ?? contractDefaults.explicitImplementations,
33
36
  };
34
37
  }
35
38
 
package/src/contract.ts CHANGED
@@ -185,6 +185,10 @@ export class ContractBuilder implements Contract {
185
185
  }
186
186
  }
187
187
 
188
+ addTraitForEachFunctions(baseTrait: BaseTraitImplBlock, functions: Record<string, BaseFunction>) {
189
+ Object.values(functions).forEach(fn => this.addTraitFunction(baseTrait, fn));
190
+ }
191
+
188
192
  // used for adding a function to a trait implementation block
189
193
  addTraitFunction(baseTrait: BaseTraitImplBlock, fn: BaseFunction): ContractFunction {
190
194
  const t = this.addTraitImplBlock(baseTrait);
@@ -241,6 +245,11 @@ export class ContractBuilder implements Contract {
241
245
  existingFn.tags = [...(existingFn.tags ?? []), tag];
242
246
  }
243
247
 
248
+ setFunctionCode(fn: BaseFunction, code: string[], baseTrait?: BaseTraitImplBlock): void {
249
+ const existingFn = this.getOrCreateFunction(fn, baseTrait);
250
+ existingFn.code = [...code];
251
+ }
252
+
244
253
  addConstructorArgument(arg: Argument): void {
245
254
  for (const existingArg of this.constructorArgs) {
246
255
  if (existingArg.name == arg.name) {
package/src/fungible.ts CHANGED
@@ -11,6 +11,7 @@ import { OptionsError } from './error';
11
11
  import { contractDefaults as commonDefaults } from './common-options';
12
12
  import { printContract } from './print';
13
13
  import { toByteArray, toUint } from './utils/convert-strings';
14
+ import { pickKeys } from '@openzeppelin/wizard-common';
14
15
 
15
16
  export const defaults: Required<FungibleOptions> = {
16
17
  name: 'MyToken',
@@ -22,6 +23,7 @@ export const defaults: Required<FungibleOptions> = {
22
23
  mintable: false,
23
24
  access: commonDefaults.access,
24
25
  info: commonDefaults.info,
26
+ explicitImplementations: commonDefaults.explicitImplementations,
25
27
  } as const;
26
28
 
27
29
  export function printFungible(opts: FungibleOptions = defaults): string {
@@ -59,58 +61,68 @@ export function buildFungible(opts: FungibleOptions): ContractBuilder {
59
61
 
60
62
  const allOpts = withDefaults(opts);
61
63
 
62
- addBase(c, toByteArray(allOpts.name), toByteArray(allOpts.symbol), allOpts.pausable);
64
+ addBase(c, toByteArray(allOpts.name), toByteArray(allOpts.symbol), allOpts.pausable, allOpts.explicitImplementations);
63
65
 
64
66
  if (allOpts.premint) {
65
67
  addPremint(c, allOpts.premint);
66
68
  }
67
69
 
68
70
  if (allOpts.pausable) {
69
- addPausable(c, allOpts.access);
71
+ addPausable(c, allOpts.access, allOpts.explicitImplementations);
70
72
  }
71
73
 
72
74
  if (allOpts.upgradeable) {
73
- addUpgradeable(c, allOpts.access);
75
+ addUpgradeable(c, allOpts.access, allOpts.explicitImplementations);
74
76
  }
75
77
 
76
78
  if (allOpts.burnable) {
77
- addBurnable(c, allOpts.pausable);
79
+ addBurnable(c, allOpts.pausable, allOpts.explicitImplementations);
78
80
  }
79
81
 
80
82
  if (allOpts.mintable) {
81
- addMintable(c, allOpts.access, allOpts.pausable);
83
+ addMintable(c, allOpts.access, allOpts.pausable, allOpts.explicitImplementations);
82
84
  }
83
85
 
84
- setAccessControl(c, allOpts.access);
86
+ setAccessControl(c, allOpts.access, allOpts.explicitImplementations);
85
87
  setInfo(c, allOpts.info);
86
88
 
87
89
  return c;
88
90
  }
89
91
 
90
- function addBase(c: ContractBuilder, name: string, symbol: string, pausable: boolean) {
92
+ function addBase(
93
+ c: ContractBuilder,
94
+ name: string,
95
+ symbol: string,
96
+ pausable: boolean,
97
+ explicitImplementations: boolean,
98
+ ) {
91
99
  // Set metadata
92
- c.addConstructorCode(`Base::set_metadata(e, 18, String::from_str(e, "${name}"), String::from_str(e, "${symbol}"));`);
100
+ c.addConstructorCode(`Base::set_metadata(e, 7, String::from_str(e, "${name}"), String::from_str(e, "${symbol}"));`);
93
101
 
94
102
  // Set token functions
95
103
  c.addUseClause('stellar_tokens::fungible', 'Base');
96
104
  c.addUseClause('stellar_tokens::fungible', 'FungibleToken');
97
- c.addUseClause('stellar_macros', 'default_impl');
98
105
  c.addUseClause('soroban_sdk', 'contract');
99
106
  c.addUseClause('soroban_sdk', 'contractimpl');
100
107
  c.addUseClause('soroban_sdk', 'String');
108
+ c.addUseClause('soroban_sdk', 'Symbol');
101
109
  c.addUseClause('soroban_sdk', 'Env');
110
+ c.addUseClause('soroban_sdk', 'Address');
111
+ c.addUseClause('soroban_sdk', 'MuxedAddress');
112
+ c.addUseClause('soroban_sdk', 'Vec');
102
113
 
103
114
  const fungibleTokenTrait = {
104
115
  traitName: 'FungibleToken',
105
116
  structName: c.name,
106
- tags: ['default_impl', 'contractimpl'],
117
+ tags: explicitImplementations ? ['contractimpl'] : ['contractimpl(contracttrait)'],
107
118
  assocType: 'type ContractType = Base;',
108
119
  };
109
120
 
110
121
  c.addTraitImplBlock(fungibleTokenTrait);
111
122
 
123
+ if (explicitImplementations) c.addTraitForEachFunctions(fungibleTokenTrait, fungibleTokenTraitFunctions);
124
+
112
125
  if (pausable) {
113
- c.addUseClause('soroban_sdk', 'Address');
114
126
  c.addUseClause('stellar_macros', 'when_not_paused');
115
127
 
116
128
  c.addTraitFunction(fungibleTokenTrait, functions.transfer);
@@ -121,15 +133,14 @@ function addBase(c: ContractBuilder, name: string, symbol: string, pausable: boo
121
133
  }
122
134
  }
123
135
 
124
- function addMintable(c: ContractBuilder, access: Access, pausable: boolean) {
125
- c.addUseClause('soroban_sdk', 'Address');
136
+ function addMintable(c: ContractBuilder, access: Access, pausable: boolean, explicitImplementations: boolean) {
126
137
  switch (access) {
127
138
  case false:
128
139
  break;
129
140
  case 'ownable': {
130
141
  c.addFreeFunction(functions.mint);
131
142
 
132
- requireAccessControl(c, undefined, functions.mint, access);
143
+ requireAccessControl(c, undefined, functions.mint, access, undefined, explicitImplementations);
133
144
 
134
145
  if (pausable) {
135
146
  c.addFunctionTag(functions.mint, 'when_not_paused');
@@ -139,11 +150,18 @@ function addMintable(c: ContractBuilder, access: Access, pausable: boolean) {
139
150
  case 'roles': {
140
151
  c.addFreeFunction(functions.mint_with_caller);
141
152
 
142
- requireAccessControl(c, undefined, functions.mint_with_caller, access, {
143
- useMacro: true,
144
- caller: 'caller',
145
- role: 'minter',
146
- });
153
+ requireAccessControl(
154
+ c,
155
+ undefined,
156
+ functions.mint_with_caller,
157
+ access,
158
+ {
159
+ useMacro: true,
160
+ caller: 'caller',
161
+ role: 'minter',
162
+ },
163
+ explicitImplementations,
164
+ );
147
165
 
148
166
  if (pausable) {
149
167
  c.addFunctionTag(functions.mint_with_caller, 'when_not_paused');
@@ -157,14 +175,13 @@ function addMintable(c: ContractBuilder, access: Access, pausable: boolean) {
157
175
  }
158
176
  }
159
177
 
160
- function addBurnable(c: ContractBuilder, pausable: boolean) {
178
+ function addBurnable(c: ContractBuilder, pausable: boolean, explicitImplementations: boolean) {
161
179
  c.addUseClause('stellar_tokens::fungible', 'burnable::FungibleBurnable');
162
- c.addUseClause('soroban_sdk', 'Address');
163
180
 
164
181
  const fungibleBurnableTrait = {
165
182
  traitName: 'FungibleBurnable',
166
183
  structName: c.name,
167
- tags: ['contractimpl'],
184
+ tags: explicitImplementations ? ['contractimpl'] : ['contractimpl(contracttrait)'],
168
185
  section: 'Extensions',
169
186
  };
170
187
 
@@ -176,9 +193,8 @@ function addBurnable(c: ContractBuilder, pausable: boolean) {
176
193
 
177
194
  c.addTraitFunction(fungibleBurnableTrait, functions.burn_from);
178
195
  c.addFunctionTag(functions.burn_from, 'when_not_paused', fungibleBurnableTrait);
179
- } else {
180
- // prepend '#[default_impl]'
181
- fungibleBurnableTrait.tags.unshift('default_impl');
196
+ } else if (explicitImplementations) c.addTraitForEachFunctions(fungibleBurnableTrait, fungibleBurnableFunctions);
197
+ else {
182
198
  c.addTraitImplBlock(fungibleBurnableTrait);
183
199
  }
184
200
  }
@@ -194,9 +210,7 @@ function addPremint(c: ContractBuilder, amount: string) {
194
210
  }
195
211
 
196
212
  // TODO: handle signed int?
197
- const premintAbsolute = toUint(getInitialSupply(amount, 18), 'premint', 'u128');
198
-
199
- c.addUseClause('soroban_sdk', 'Address');
213
+ const premintAbsolute = toUint(getInitialSupply(amount, 7), 'premint', 'u128');
200
214
 
201
215
  c.addConstructorArgument({ name: 'recipient', type: 'Address' });
202
216
  c.addConstructorCode(`Base::mint(e, &recipient, ${premintAbsolute});`);
@@ -265,7 +279,7 @@ export const functions = defineFunctions({
265
279
  args: [
266
280
  getSelfArg(),
267
281
  { name: 'from', type: 'Address' },
268
- { name: 'to', type: 'Address' },
282
+ { name: 'to', type: 'MuxedAddress' },
269
283
  { name: 'amount', type: 'i128' },
270
284
  ],
271
285
  code: ['Self::ContractType::transfer(e, &from, &to, amount)'],
@@ -335,3 +349,17 @@ export const functions = defineFunctions({
335
349
  code: ['Base::mint(e, &account, amount);'],
336
350
  },
337
351
  });
352
+
353
+ const fungibleTokenTraitFunctions = pickKeys(functions, [
354
+ 'total_supply',
355
+ 'balance',
356
+ 'allowance',
357
+ 'transfer',
358
+ 'transfer_from',
359
+ 'approve',
360
+ 'decimals',
361
+ 'name',
362
+ 'symbol',
363
+ ]);
364
+
365
+ const fungibleBurnableFunctions = pickKeys(functions, ['burn', 'burn_from']);
@@ -15,6 +15,7 @@ const blueprint = {
15
15
  premint: ['1'],
16
16
  access: accessOptions,
17
17
  info: infoOptions,
18
+ explicitImplementations: booleans,
18
19
  };
19
20
 
20
21
  export function* generateFungibleOptions(): Generator<Required<FungibleOptions>> {
@@ -18,6 +18,7 @@ const blueprint = {
18
18
  mintable: booleans,
19
19
  access: accessOptions,
20
20
  info: infoOptions,
21
+ explicitImplementations: booleans,
21
22
  };
22
23
 
23
24
  export function* generateNonFungibleOptions(): Generator<Required<NonFungibleOptions>> {
@@ -16,6 +16,7 @@ const blueprint = {
16
16
  access: accessOptions,
17
17
  limitations: limitationsOptions,
18
18
  info: infoOptions,
19
+ explicitImplementations: booleans,
19
20
  };
20
21
 
21
22
  export function* generateStablecoinOptions(): Generator<Required<StablecoinOptions>> {