@openzeppelin/wizard-stellar 0.6.4 → 0.7.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 (60) hide show
  1. package/dist/account.d.ts.map +1 -1
  2. package/dist/account.js +18 -4
  3. package/dist/account.js.map +1 -1
  4. package/dist/add-votes.d.ts +3 -0
  5. package/dist/add-votes.d.ts.map +1 -0
  6. package/dist/add-votes.js +53 -0
  7. package/dist/add-votes.js.map +1 -0
  8. package/dist/fungible.d.ts +13 -2
  9. package/dist/fungible.d.ts.map +1 -1
  10. package/dist/fungible.js +147 -77
  11. package/dist/fungible.js.map +1 -1
  12. package/dist/generate/fungible.d.ts.map +1 -1
  13. package/dist/generate/fungible.js +2 -0
  14. package/dist/generate/fungible.js.map +1 -1
  15. package/dist/generate/non-fungible.d.ts.map +1 -1
  16. package/dist/generate/non-fungible.js +2 -0
  17. package/dist/generate/non-fungible.js.map +1 -1
  18. package/dist/generate/stablecoin.d.ts.map +1 -1
  19. package/dist/generate/stablecoin.js +2 -0
  20. package/dist/generate/stablecoin.js.map +1 -1
  21. package/dist/governor.d.ts.map +1 -1
  22. package/dist/governor.js +9 -1
  23. package/dist/governor.js.map +1 -1
  24. package/dist/non-fungible.d.ts +2 -0
  25. package/dist/non-fungible.d.ts.map +1 -1
  26. package/dist/non-fungible.js +152 -126
  27. package/dist/non-fungible.js.map +1 -1
  28. package/dist/print.js +16 -1
  29. package/dist/print.js.map +1 -1
  30. package/dist/stablecoin.d.ts.map +1 -1
  31. package/dist/stablecoin.js +6 -31
  32. package/dist/stablecoin.js.map +1 -1
  33. package/dist/utils/compose.d.ts +6 -0
  34. package/dist/utils/compose.d.ts.map +1 -0
  35. package/dist/utils/compose.js +12 -0
  36. package/dist/utils/compose.js.map +1 -0
  37. package/dist/utils/version.d.ts +4 -4
  38. package/dist/utils/version.js +3 -3
  39. package/dist/vault.d.ts +1 -1
  40. package/dist/vault.d.ts.map +1 -1
  41. package/dist/vault.js +27 -7
  42. package/dist/vault.js.map +1 -1
  43. package/dist/zip-shared.d.ts.map +1 -1
  44. package/dist/zip-shared.js +4 -3
  45. package/dist/zip-shared.js.map +1 -1
  46. package/package.json +1 -1
  47. package/src/account.ts +18 -4
  48. package/src/add-votes.ts +53 -0
  49. package/src/fungible.ts +171 -86
  50. package/src/generate/fungible.ts +2 -0
  51. package/src/generate/non-fungible.ts +2 -0
  52. package/src/generate/stablecoin.ts +2 -0
  53. package/src/governor.ts +10 -1
  54. package/src/non-fungible.ts +182 -143
  55. package/src/print.ts +14 -1
  56. package/src/stablecoin.ts +9 -37
  57. package/src/utils/compose.ts +8 -0
  58. package/src/utils/version.ts +3 -3
  59. package/src/vault.ts +32 -7
  60. package/src/zip-shared.ts +4 -3
@@ -1 +1 @@
1
- {"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../src/account.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAG7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAMtD,eAAO,MAAM,aAAa,4DAA6D,CAAC;AAExF,MAAM,MAAM,MAAM,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAgBpD,eAAO,MAAM,QAAQ,EAAE,QAAQ,CAAC,cAAc,CASpC,CAAC;AAEX,wBAAgB,YAAY,CAAC,IAAI,GAAE,cAAyB,GAAG,MAAM,CAEpE;AAED,MAAM,WAAW,cAAe,SAAQ,aAAa;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,cAAc,GAAG,QAAQ,CAAC,cAAc,CAAC,CAW3E;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,cAAc,GAAG,eAAe,CA0BlE;AAuND,eAAO,MAAM,SAAS,2DAYpB,CAAC"}
1
+ {"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../src/account.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAG7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAMtD,eAAO,MAAM,aAAa,4DAA6D,CAAC;AAExF,MAAM,MAAM,MAAM,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAgBpD,eAAO,MAAM,QAAQ,EAAE,QAAQ,CAAC,cAAc,CASpC,CAAC;AAEX,wBAAgB,YAAY,CAAC,IAAI,GAAE,cAAyB,GAAG,MAAM,CAEpE;AAED,MAAM,WAAW,cAAe,SAAQ,aAAa;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,cAAc,GAAG,QAAQ,CAAC,cAAc,CAAC,CAW3E;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,cAAc,GAAG,eAAe,CA0BlE;AAqOD,eAAO,MAAM,SAAS,2DAYpB,CAAC"}
package/dist/account.js CHANGED
@@ -93,6 +93,7 @@ function addBase(c, opts) {
93
93
  c.addUseClause('soroban_sdk', 'contract');
94
94
  c.addUseClause('soroban_sdk', 'contractimpl');
95
95
  c.addUseClause('soroban_sdk', 'Address');
96
+ c.addUseClause('soroban_sdk', 'BytesN');
96
97
  c.addUseClause('soroban_sdk', 'Env');
97
98
  c.addUseClause('soroban_sdk', 'Map');
98
99
  c.addUseClause('soroban_sdk', 'String');
@@ -102,10 +103,11 @@ function addBase(c, opts) {
102
103
  c.addUseClause('soroban_sdk::auth', 'CustomAccountInterface');
103
104
  c.addUseClause('soroban_sdk::crypto', 'Hash');
104
105
  c.addUseClause('stellar_accounts::smart_account', 'self', { alias: 'smart_account' });
106
+ // `ContextRule` and `AuthDigestPreimage`/`BytesN` appear in the signatures of
107
+ // `SmartAccount` methods (e.g. `auth_digest`), which the contracttrait macro
108
+ // needs in scope even though the generated code never names them.
109
+ c.addUseClause('stellar_accounts::smart_account', 'AuthDigestPreimage');
105
110
  c.addUseClause('stellar_accounts::smart_account', 'AuthPayload');
106
- // `ContextRule` is the return type of several `SmartAccount` methods, which the
107
- // contracttrait macro needs in scope even though the generated code never
108
- // names it.
109
111
  c.addUseClause('stellar_accounts::smart_account', 'ContextRule');
110
112
  c.addUseClause('stellar_accounts::smart_account', 'ContextRuleType');
111
113
  c.addUseClause('stellar_accounts::smart_account', 'Signer');
@@ -117,7 +119,19 @@ function addBase(c, opts) {
117
119
  const signerLines = ['let mut signers = Vec::new(e);'];
118
120
  if (opts.delegatedSigners) {
119
121
  signerArgs.push('delegated_signers');
120
- c.addConstructorArgument({ name: 'delegated_signers', type: 'Vec<Address>' });
122
+ // The library rejects a delegated signer that is the account itself or the
123
+ // contract of an authorized context, but cannot detect this case.
124
+ c.addConstructorArgument({
125
+ name: 'delegated_signers',
126
+ type: 'Vec<Address>',
127
+ comment: [
128
+ 'A delegated signer must not delegate its own authentication back to this',
129
+ 'account, through `delegate_auth` (CAP-71) or by calling `require_auth` on',
130
+ 'this account from its `__check_auth`, unless it is another smart account',
131
+ 'built on OpenZeppelin Stellar Contracts. Otherwise, one of the two',
132
+ 'accounts can be authorized without any key.',
133
+ ],
134
+ });
121
135
  signerLines.push('for account in delegated_signers.iter() {', ' signers.push_back(Signer::Delegated(account));', '}');
122
136
  }
123
137
  for (const { option, prefix, label } of externalSigners) {
@@ -1 +1 @@
1
- {"version":3,"file":"account.js","sourceRoot":"","sources":["../src/account.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"account.js","sourceRoot":"","sources":["../src/account.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ContractBuilder } from './contract';
2
+ export declare function addVotes(c: ContractBuilder, explicitImplementations: boolean): void;
3
+ //# sourceMappingURL=add-votes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-votes.d.ts","sourceRoot":"","sources":["../src/add-votes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAGlD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,eAAe,EAAE,uBAAuB,EAAE,OAAO,QAgB5E"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.addVotes = addVotes;
4
+ const common_options_1 = require("./common-options");
5
+ const define_functions_1 = require("./utils/define-functions");
6
+ function addVotes(c, explicitImplementations) {
7
+ c.addUseClause('stellar_governance::votes', 'Votes');
8
+ const votesTrait = {
9
+ traitName: 'Votes',
10
+ structName: c.name,
11
+ tags: explicitImplementations ? ['contractimpl'] : ['contractimpl(contracttrait)'],
12
+ section: 'Extensions',
13
+ };
14
+ if (explicitImplementations) {
15
+ c.addUseClause('stellar_governance::votes', 'self', { alias: 'votes' });
16
+ c.addTraitForEachFunctions(votesTrait, functions);
17
+ }
18
+ else {
19
+ c.addTraitImplBlock(votesTrait);
20
+ }
21
+ }
22
+ const functions = (0, define_functions_1.defineFunctions)({
23
+ get_votes: {
24
+ args: [(0, common_options_1.getSelfArg)(), { name: 'account', type: 'Address' }],
25
+ returns: 'u128',
26
+ code: ['votes::get_votes(e, &account)'],
27
+ },
28
+ get_votes_at_checkpoint: {
29
+ args: [(0, common_options_1.getSelfArg)(), { name: 'account', type: 'Address' }, { name: 'ledger', type: 'u32' }],
30
+ returns: 'u128',
31
+ code: ['votes::get_votes_at_checkpoint(e, &account, ledger)'],
32
+ },
33
+ get_total_supply: {
34
+ args: [(0, common_options_1.getSelfArg)()],
35
+ returns: 'u128',
36
+ code: ['votes::get_total_supply(e)'],
37
+ },
38
+ get_total_supply_at_checkpoint: {
39
+ args: [(0, common_options_1.getSelfArg)(), { name: 'ledger', type: 'u32' }],
40
+ returns: 'u128',
41
+ code: ['votes::get_total_supply_at_checkpoint(e, ledger)'],
42
+ },
43
+ get_delegate: {
44
+ args: [(0, common_options_1.getSelfArg)(), { name: 'account', type: 'Address' }],
45
+ returns: 'Option<Address>',
46
+ code: ['votes::get_delegate(e, &account)'],
47
+ },
48
+ delegate: {
49
+ args: [(0, common_options_1.getSelfArg)(), { name: 'account', type: 'Address' }, { name: 'delegatee', type: 'Address' }],
50
+ code: ['votes::delegate(e, &account, &delegatee);'],
51
+ },
52
+ });
53
+ //# sourceMappingURL=add-votes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-votes.js","sourceRoot":"","sources":["../src/add-votes.ts"],"names":[],"mappings":";;AAIA,4BAgBC;AApBD,qDAA8C;AAE9C,+DAA2D;AAE3D,SAAgB,QAAQ,CAAC,CAAkB,EAAE,uBAAgC;IAC3E,CAAC,CAAC,YAAY,CAAC,2BAA2B,EAAE,OAAO,CAAC,CAAC;IAErD,MAAM,UAAU,GAAG;QACjB,SAAS,EAAE,OAAO;QAClB,UAAU,EAAE,CAAC,CAAC,IAAI;QAClB,IAAI,EAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,6BAA6B,CAAC;QAClF,OAAO,EAAE,YAAY;KACtB,CAAC;IAEF,IAAI,uBAAuB,EAAE,CAAC;QAC5B,CAAC,CAAC,YAAY,CAAC,2BAA2B,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QACxE,CAAC,CAAC,wBAAwB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IACpD,CAAC;SAAM,CAAC;QACN,CAAC,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC;AACH,CAAC;AAED,MAAM,SAAS,GAAG,IAAA,kCAAe,EAAC;IAChC,SAAS,EAAE;QACT,IAAI,EAAE,CAAC,IAAA,2BAAU,GAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAC1D,OAAO,EAAE,MAAM;QACf,IAAI,EAAE,CAAC,+BAA+B,CAAC;KACxC;IACD,uBAAuB,EAAE;QACvB,IAAI,EAAE,CAAC,IAAA,2BAAU,GAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QAC3F,OAAO,EAAE,MAAM;QACf,IAAI,EAAE,CAAC,qDAAqD,CAAC;KAC9D;IACD,gBAAgB,EAAE;QAChB,IAAI,EAAE,CAAC,IAAA,2BAAU,GAAE,CAAC;QACpB,OAAO,EAAE,MAAM;QACf,IAAI,EAAE,CAAC,4BAA4B,CAAC;KACrC;IACD,8BAA8B,EAAE;QAC9B,IAAI,EAAE,CAAC,IAAA,2BAAU,GAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QACrD,OAAO,EAAE,MAAM;QACf,IAAI,EAAE,CAAC,kDAAkD,CAAC;KAC3D;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,CAAC,IAAA,2BAAU,GAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAC1D,OAAO,EAAE,iBAAiB;QAC1B,IAAI,EAAE,CAAC,kCAAkC,CAAC;KAC3C;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,CAAC,IAAA,2BAAU,GAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAClG,IAAI,EAAE,CAAC,2CAA2C,CAAC;KACpD;CACF,CAAC,CAAC"}
@@ -8,23 +8,34 @@ export interface FungibleOptions extends CommonContractOptions {
8
8
  decimals?: string;
9
9
  burnable?: boolean;
10
10
  votes?: boolean;
11
+ totalSupply?: boolean;
12
+ cap?: string;
11
13
  pausable?: boolean;
12
14
  upgradeable?: boolean;
13
15
  premint?: string;
14
16
  mintable?: boolean;
15
17
  }
18
+ /**
19
+ * Contract type restricting which accounts can use the token, selected by the Stablecoin limitations.
20
+ */
21
+ export type TransferPolicy = 'AllowList' | 'BlockList';
16
22
  export declare function withDefaults(opts: FungibleOptions): Required<FungibleOptions>;
17
23
  export declare function isAccessControlRequired(opts: Partial<FungibleOptions>): boolean;
18
24
  export declare function buildFungible(opts: FungibleOptions): ContractBuilder;
25
+ /**
26
+ * Builds a Fungible contract whose contract type also includes the given transfer policy.
27
+ */
28
+ export declare function buildFungibleWithTransferPolicy(opts: FungibleOptions, transferPolicy?: TransferPolicy): ContractBuilder;
19
29
  export declare const premintPattern: RegExp;
20
30
  /**
21
31
  * Calculates the initial supply that would be used in a Fungible contract based on a given premint amount and number of decimals.
22
32
  *
23
33
  * @param premint Premint amount in token units, may be fractional
24
34
  * @param decimals The number of decimals in the token
35
+ * @param field The option reported in errors
25
36
  * @returns `premint` with zeros padded or removed based on `decimals`.
26
37
  * @throws OptionsError if `premint` has more than one decimal character or is more precise than allowed by the `decimals` argument.
27
38
  */
28
- export declare function getInitialSupply(premint: string, decimals: number): string;
29
- export declare const functions: Record<"symbol" | "name" | "decimals" | "total_supply" | "balance" | "allowance" | "transfer" | "transfer_from" | "approve" | "burn" | "burn_from" | "mint" | "mint_with_caller", import("./contract").BaseFunction>;
39
+ export declare function getInitialSupply(premint: string, decimals: number, field?: string): string;
40
+ export declare const functions: Record<"symbol" | "name" | "decimals" | "cap" | "balance" | "allowance" | "transfer" | "transfer_from" | "approve" | "total_supply" | "burn" | "burn_from" | "mint" | "mint_with_caller", import("./contract").BaseFunction>;
30
41
  //# sourceMappingURL=fungible.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fungible.d.ts","sourceRoot":"","sources":["../src/fungible.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAM7C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAW9D,eAAO,MAAM,QAAQ,EAAE,QAAQ,CAAC,eAAe,CAarC,CAAC;AAEX,wBAAgB,aAAa,CAAC,IAAI,GAAE,eAA0B,GAAG,MAAM,CAEtE;AAED,MAAM,WAAW,eAAgB,SAAQ,qBAAqB;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,eAAe,GAAG,QAAQ,CAAC,eAAe,CAAC,CAY7E;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,OAAO,CAE/E;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,eAAe,GAAG,eAAe,CAyCpE;AAiJD,eAAO,MAAM,cAAc,QAAkB,CAAC;AAkB9C;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CA+B1E;AAED,eAAO,MAAM,SAAS,sNA0FpB,CAAC"}
1
+ {"version":3,"file":"fungible.d.ts","sourceRoot":"","sources":["../src/fungible.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAO7C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAa9D,eAAO,MAAM,QAAQ,EAAE,QAAQ,CAAC,eAAe,CAerC,CAAC;AAEX,wBAAgB,aAAa,CAAC,IAAI,GAAE,eAA0B,GAAG,MAAM,CAEtE;AAED,MAAM,WAAW,eAAgB,SAAQ,qBAAqB;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,WAAW,CAAC;AAEvD,wBAAgB,YAAY,CAAC,IAAI,EAAE,eAAe,GAAG,QAAQ,CAAC,eAAe,CAAC,CAc7E;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,OAAO,CAE/E;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,eAAe,GAAG,eAAe,CAEpE;AAED;;GAEG;AACH,wBAAgB,+BAA+B,CAC7C,IAAI,EAAE,eAAe,EACrB,cAAc,CAAC,EAAE,cAAc,GAC9B,eAAe,CA8EjB;AAyLD,eAAO,MAAM,cAAc,QAAoB,CAAC;AA0BhD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,SAAY,GAAG,MAAM,CA+B7F;AAED,eAAO,MAAM,SAAS,8NAgGpB,CAAC"}
package/dist/fungible.js CHANGED
@@ -5,11 +5,13 @@ exports.printFungible = printFungible;
5
5
  exports.withDefaults = withDefaults;
6
6
  exports.isAccessControlRequired = isAccessControlRequired;
7
7
  exports.buildFungible = buildFungible;
8
+ exports.buildFungibleWithTransferPolicy = buildFungibleWithTransferPolicy;
8
9
  exports.getInitialSupply = getInitialSupply;
9
10
  const contract_1 = require("./contract");
10
11
  const set_access_control_1 = require("./set-access-control");
11
12
  const add_pausable_1 = require("./add-pausable");
12
13
  const add_upgradeable_1 = require("./add-upgradeable");
14
+ const add_votes_1 = require("./add-votes");
13
15
  const define_functions_1 = require("./utils/define-functions");
14
16
  const common_options_1 = require("./common-options");
15
17
  const set_info_1 = require("./set-info");
@@ -17,14 +19,18 @@ const error_1 = require("./error");
17
19
  const common_options_2 = require("./common-options");
18
20
  const print_1 = require("./print");
19
21
  const convert_strings_1 = require("./utils/convert-strings");
22
+ const compose_1 = require("./utils/compose");
20
23
  const wizard_common_1 = require("@openzeppelin/wizard-common");
21
24
  const DEFAULT_DECIMALS = 7;
25
+ const I128_MAX = (1n << 127n) - 1n;
22
26
  exports.defaults = {
23
27
  name: 'MyToken',
24
28
  symbol: 'MTK',
25
29
  decimals: DEFAULT_DECIMALS.toString(),
26
30
  burnable: false,
27
31
  votes: false,
32
+ totalSupply: false,
33
+ cap: '',
28
34
  pausable: false,
29
35
  upgradeable: false,
30
36
  premint: '0',
@@ -43,6 +49,8 @@ function withDefaults(opts) {
43
49
  decimals: opts.decimals ?? exports.defaults.decimals,
44
50
  burnable: opts.burnable ?? exports.defaults.burnable,
45
51
  votes: opts.votes ?? exports.defaults.votes,
52
+ totalSupply: opts.totalSupply ?? exports.defaults.totalSupply,
53
+ cap: opts.cap ?? exports.defaults.cap,
46
54
  pausable: opts.pausable ?? exports.defaults.pausable,
47
55
  upgradeable: opts.upgradeable ?? exports.defaults.upgradeable,
48
56
  premint: opts.premint || exports.defaults.premint,
@@ -53,12 +61,48 @@ function isAccessControlRequired(opts) {
53
61
  return opts.mintable === true || opts.pausable === true || opts.upgradeable === true;
54
62
  }
55
63
  function buildFungible(opts) {
64
+ return buildFungibleWithTransferPolicy(opts);
65
+ }
66
+ /**
67
+ * Builds a Fungible contract whose contract type also includes the given transfer policy.
68
+ */
69
+ function buildFungibleWithTransferPolicy(opts, transferPolicy) {
56
70
  const c = new contract_1.ContractBuilder(opts.name);
57
71
  const allOpts = withDefaults(opts);
58
72
  const decimals = (0, convert_strings_1.toUint)(allOpts.decimals, 'decimals', 'u32');
59
- addBase(c, (0, convert_strings_1.toByteArray)(allOpts.name), (0, convert_strings_1.toByteArray)(allOpts.symbol), decimals, allOpts.votes, allOpts.pausable, allOpts.explicitImplementations);
73
+ const capped = allOpts.cap !== '';
74
+ // The cap is checked against the total supply, so it requires the supply to be tracked.
75
+ const totalSupply = allOpts.totalSupply || capped;
76
+ if (allOpts.votes && capped) {
77
+ throw new error_1.OptionsError({
78
+ votes: 'Votes extension cannot be used with a cap',
79
+ cap: 'Cap cannot be used with Votes extension',
80
+ });
81
+ }
82
+ if (allOpts.votes && totalSupply) {
83
+ throw new error_1.OptionsError({
84
+ votes: 'Votes extension cannot be used with Total Supply extension',
85
+ totalSupply: 'Total Supply extension cannot be used with Votes extension',
86
+ });
87
+ }
88
+ // Order follows the library's documentation, e.g. `Compose<(AllowList, Capped, TotalSupply)>`.
89
+ const contractTypes = [
90
+ ...(transferPolicy ? [transferPolicy] : []),
91
+ ...(allOpts.votes ? ['FungibleVotes'] : []),
92
+ ...(capped ? ['Capped'] : []),
93
+ ...(totalSupply ? ['TotalSupply'] : []),
94
+ ];
95
+ addBase(c, (0, convert_strings_1.toByteArray)(allOpts.name), (0, convert_strings_1.toByteArray)(allOpts.symbol), decimals, contractTypes, allOpts.pausable, allOpts.explicitImplementations);
96
+ if (allOpts.votes) {
97
+ (0, add_votes_1.addVotes)(c, allOpts.explicitImplementations);
98
+ }
99
+ if (totalSupply) {
100
+ addTotalSupply(c, allOpts.explicitImplementations);
101
+ }
102
+ // The cap has to be set before the premint, which is checked against it.
103
+ const capAbsolute = capped ? addCap(c, allOpts.cap, decimals, allOpts.explicitImplementations) : undefined;
60
104
  if (allOpts.premint) {
61
- addPremint(c, allOpts.premint, decimals, allOpts.votes);
105
+ addPremint(c, allOpts.premint, decimals, capAbsolute);
62
106
  }
63
107
  if (allOpts.pausable) {
64
108
  (0, add_pausable_1.addPausable)(c, allOpts.access, allOpts.explicitImplementations);
@@ -67,24 +111,23 @@ function buildFungible(opts) {
67
111
  (0, add_upgradeable_1.addUpgradeable)(c, allOpts.access, allOpts.explicitImplementations);
68
112
  }
69
113
  if (allOpts.burnable) {
70
- addBurnable(c, allOpts.votes, allOpts.pausable, allOpts.explicitImplementations);
114
+ addBurnable(c, allOpts.pausable, allOpts.explicitImplementations);
71
115
  }
72
116
  if (allOpts.mintable) {
73
- addMintable(c, allOpts.access, allOpts.votes, allOpts.pausable, allOpts.explicitImplementations);
117
+ addMintable(c, allOpts.access, allOpts.pausable, allOpts.explicitImplementations);
74
118
  }
75
119
  (0, set_access_control_1.setAccessControl)(c, allOpts.access, allOpts.explicitImplementations);
76
120
  (0, set_info_1.setInfo)(c, allOpts.info);
77
121
  return c;
78
122
  }
79
- function addBase(c, name, symbol, decimals, votes, pausable, explicitImplementations) {
123
+ function addBase(c, name, symbol, decimals, contractTypes, pausable, explicitImplementations) {
80
124
  // Set metadata
81
125
  c.addConstructorCode(`Base::set_metadata(e, ${decimals}, String::from_str(e, "${name}"), String::from_str(e, "${symbol}"));`);
82
126
  // Set token functions
83
127
  c.addUseClause('stellar_tokens::fungible', 'Base');
128
+ c.addUseClause('stellar_tokens::fungible', 'Compose');
84
129
  c.addUseClause('stellar_tokens::fungible', 'FungibleToken');
85
- if (votes) {
86
- c.addUseClause('stellar_tokens::fungible', 'ContractOverrides');
87
- c.addUseClause('stellar_governance::votes', 'Votes');
130
+ if (contractTypes.includes('FungibleVotes')) {
88
131
  c.addUseClause('stellar_tokens::fungible', 'votes::FungibleVotes');
89
132
  }
90
133
  c.addUseClause('soroban_sdk', 'contract');
@@ -99,7 +142,7 @@ function addBase(c, name, symbol, decimals, votes, pausable, explicitImplementat
99
142
  traitName: 'FungibleToken',
100
143
  structName: c.name,
101
144
  tags: explicitImplementations ? ['contractimpl'] : ['contractimpl(contracttrait)'],
102
- assocType: `type ContractType = ${votes ? 'FungibleVotes' : 'Base'};`,
145
+ assocType: (0, compose_1.printComposedContractType)(contractTypes.length > 0 ? contractTypes : ['Base']),
103
146
  };
104
147
  c.addTraitImplBlock(fungibleTokenTrait);
105
148
  if (explicitImplementations)
@@ -111,38 +154,76 @@ function addBase(c, name, symbol, decimals, votes, pausable, explicitImplementat
111
154
  c.addTraitFunction(fungibleTokenTrait, exports.functions.transfer_from);
112
155
  c.addFunctionTag(exports.functions.transfer_from, 'when_not_paused', fungibleTokenTrait);
113
156
  }
114
- if (votes) {
115
- c.addTraitImplBlock({
116
- traitName: 'Votes',
117
- structName: c.name,
118
- tags: explicitImplementations ? ['contractimpl'] : ['contractimpl(contracttrait)'],
119
- section: 'Extensions',
157
+ // `Base` implements every `FungibleToken` method inherently, while the other contract types provide
158
+ // some of them only through the `ContractOverrides` trait, which then has to be in scope. The
159
+ // supply-tracking contract types provide transfers through it as well.
160
+ const tracksSupply = contractTypes.includes('TotalSupply');
161
+ if ((explicitImplementations && contractTypes.length > 0) || (pausable && tracksSupply)) {
162
+ c.addUseClause('stellar_tokens::fungible', 'ContractOverrides');
163
+ }
164
+ }
165
+ function addTotalSupply(c, explicitImplementations) {
166
+ c.addUseClause('stellar_tokens::fungible', 'total_supply::{FungibleTotalSupply, TotalSupply}');
167
+ const fungibleTotalSupplyTrait = {
168
+ traitName: 'FungibleTotalSupply',
169
+ structName: c.name,
170
+ tags: explicitImplementations ? ['contractimpl'] : ['contractimpl(contracttrait)'],
171
+ section: 'Extensions',
172
+ };
173
+ if (explicitImplementations)
174
+ c.addTraitFunction(fungibleTotalSupplyTrait, exports.functions.total_supply);
175
+ else
176
+ c.addTraitImplBlock(fungibleTotalSupplyTrait);
177
+ }
178
+ function addCap(c, cap, decimals, explicitImplementations) {
179
+ if (!exports.premintPattern.test(cap)) {
180
+ throw new error_1.OptionsError({
181
+ cap: 'Not a valid number',
120
182
  });
121
183
  }
184
+ const capAbsolute = (0, convert_strings_1.toUint)(getInitialSupply(cap, Number(decimals), 'cap'), 'cap', 'u128');
185
+ // `Capped::set_cap` takes an `i128`.
186
+ validateI128(capAbsolute, 'cap');
187
+ if (capAbsolute === 0n) {
188
+ throw new error_1.OptionsError({
189
+ cap: 'Cap must be greater than 0',
190
+ });
191
+ }
192
+ c.addUseClause('stellar_tokens::fungible', 'capped::{Capped, FungibleCapped}');
193
+ c.addConstructorCode(`Capped::set_cap(e, ${capAbsolute});`);
194
+ const fungibleCappedTrait = {
195
+ traitName: 'FungibleCapped',
196
+ structName: c.name,
197
+ tags: explicitImplementations ? ['contractimpl'] : ['contractimpl(contracttrait)'],
198
+ section: 'Extensions',
199
+ };
200
+ if (explicitImplementations)
201
+ c.addTraitFunction(fungibleCappedTrait, exports.functions.cap);
202
+ else
203
+ c.addTraitImplBlock(fungibleCappedTrait);
204
+ return capAbsolute;
122
205
  }
123
- function addMintable(c, access, votes, pausable, explicitImplementations) {
124
- const mintFn = votes ? votesFunctions.mint : exports.functions.mint;
125
- const mintWithCallerFn = votes ? votesFunctions.mint_with_caller : exports.functions.mint_with_caller;
206
+ function addMintable(c, access, pausable, explicitImplementations) {
126
207
  switch (access) {
127
208
  case false:
128
209
  break;
129
210
  case 'ownable': {
130
- c.addFreeFunction(mintFn);
131
- (0, set_access_control_1.requireAccessControl)(c, undefined, mintFn, access, undefined, explicitImplementations);
211
+ c.addFreeFunction(exports.functions.mint);
212
+ (0, set_access_control_1.requireAccessControl)(c, undefined, exports.functions.mint, access, undefined, explicitImplementations);
132
213
  if (pausable) {
133
- c.addFunctionTag(mintFn, 'when_not_paused');
214
+ c.addFunctionTag(exports.functions.mint, 'when_not_paused');
134
215
  }
135
216
  break;
136
217
  }
137
218
  case 'roles': {
138
- c.addFreeFunction(mintWithCallerFn);
139
- (0, set_access_control_1.requireAccessControl)(c, undefined, mintWithCallerFn, access, {
219
+ c.addFreeFunction(exports.functions.mint_with_caller);
220
+ (0, set_access_control_1.requireAccessControl)(c, undefined, exports.functions.mint_with_caller, access, {
140
221
  useMacro: true,
141
222
  caller: 'caller',
142
223
  role: 'minter',
143
224
  }, explicitImplementations);
144
225
  if (pausable) {
145
- c.addFunctionTag(mintWithCallerFn, 'when_not_paused');
226
+ c.addFunctionTag(exports.functions.mint_with_caller, 'when_not_paused');
146
227
  }
147
228
  break;
148
229
  }
@@ -152,7 +233,7 @@ function addMintable(c, access, votes, pausable, explicitImplementations) {
152
233
  }
153
234
  }
154
235
  }
155
- function addBurnable(c, votes, pausable, explicitImplementations) {
236
+ function addBurnable(c, pausable, explicitImplementations) {
156
237
  c.addUseClause('stellar_tokens::fungible', 'burnable::FungibleBurnable');
157
238
  const fungibleBurnableTrait = {
158
239
  traitName: 'FungibleBurnable',
@@ -160,35 +241,47 @@ function addBurnable(c, votes, pausable, explicitImplementations) {
160
241
  tags: explicitImplementations ? ['contractimpl'] : ['contractimpl(contracttrait)'],
161
242
  section: 'Extensions',
162
243
  };
163
- const burnFn = votes ? votesFunctions.burn : exports.functions.burn;
164
- const burnFromFn = votes ? votesFunctions.burn_from : exports.functions.burn_from;
165
- if (pausable || votes || explicitImplementations) {
244
+ if (pausable || explicitImplementations) {
166
245
  if (pausable) {
167
246
  c.addUseClause('stellar_macros', 'when_not_paused');
168
247
  }
169
- c.addTraitFunction(fungibleBurnableTrait, burnFn);
170
- c.addTraitFunction(fungibleBurnableTrait, burnFromFn);
248
+ c.addTraitFunction(fungibleBurnableTrait, exports.functions.burn);
249
+ c.addTraitFunction(fungibleBurnableTrait, exports.functions.burn_from);
171
250
  if (pausable) {
172
- c.addFunctionTag(burnFn, 'when_not_paused', fungibleBurnableTrait);
173
- c.addFunctionTag(burnFromFn, 'when_not_paused', fungibleBurnableTrait);
251
+ c.addFunctionTag(exports.functions.burn, 'when_not_paused', fungibleBurnableTrait);
252
+ c.addFunctionTag(exports.functions.burn_from, 'when_not_paused', fungibleBurnableTrait);
174
253
  }
175
254
  }
176
255
  else {
177
256
  c.addTraitImplBlock(fungibleBurnableTrait);
178
257
  }
179
258
  }
180
- exports.premintPattern = /^(\d*\.?\d*)$/;
181
- function addPremint(c, amount, decimals, votes) {
259
+ function validateI128(value, field) {
260
+ if (value > I128_MAX) {
261
+ throw new error_1.OptionsError({
262
+ [field]: 'Value is greater than i128 max value',
263
+ });
264
+ }
265
+ }
266
+ exports.premintPattern = /^\d*(?:\.\d*)?$/;
267
+ function addPremint(c, amount, decimals, capAbsolute) {
182
268
  if (amount !== undefined && amount !== '0') {
183
269
  if (!exports.premintPattern.test(amount)) {
184
270
  throw new error_1.OptionsError({
185
271
  premint: 'Not a valid number',
186
272
  });
187
273
  }
188
- // TODO: handle signed int?
189
274
  const premintAbsolute = (0, convert_strings_1.toUint)(getInitialSupply(amount, Number(decimals)), 'premint', 'u128');
275
+ // `mint` takes an `i128`.
276
+ validateI128(premintAbsolute, 'premint');
277
+ if (capAbsolute !== undefined && premintAbsolute > capAbsolute) {
278
+ throw new error_1.OptionsError({
279
+ premint: 'Premint exceeds the cap',
280
+ cap: 'Cap is lower than the premint',
281
+ });
282
+ }
190
283
  c.addConstructorArgument({ name: 'recipient', type: 'Address' });
191
- c.addConstructorCode(`${votes ? 'FungibleVotes' : 'Base'}::mint(e, &recipient, ${premintAbsolute});`);
284
+ c.addConstructorCode(`<Self as FungibleToken>::ContractType::mint(e, &recipient, ${premintAbsolute});`);
192
285
  }
193
286
  }
194
287
  /**
@@ -196,15 +289,16 @@ function addPremint(c, amount, decimals, votes) {
196
289
  *
197
290
  * @param premint Premint amount in token units, may be fractional
198
291
  * @param decimals The number of decimals in the token
292
+ * @param field The option reported in errors
199
293
  * @returns `premint` with zeros padded or removed based on `decimals`.
200
294
  * @throws OptionsError if `premint` has more than one decimal character or is more precise than allowed by the `decimals` argument.
201
295
  */
202
- function getInitialSupply(premint, decimals) {
296
+ function getInitialSupply(premint, decimals, field = 'premint') {
203
297
  let result;
204
298
  const premintSegments = premint.split('.');
205
299
  if (premintSegments.length > 2) {
206
300
  throw new error_1.OptionsError({
207
- premint: 'Not a valid number',
301
+ [field]: 'Not a valid number',
208
302
  });
209
303
  }
210
304
  else {
@@ -217,13 +311,13 @@ function getInitialSupply(premint, decimals) {
217
311
  catch {
218
312
  // .repeat gives an error if decimals number is too large
219
313
  throw new error_1.OptionsError({
220
- premint: 'Decimals number too large',
314
+ [field]: 'Decimals number too large',
221
315
  });
222
316
  }
223
317
  }
224
318
  else if (decimals < lastSegment.length) {
225
319
  throw new error_1.OptionsError({
226
- premint: 'Too many decimals',
320
+ [field]: 'Too many decimals',
227
321
  });
228
322
  }
229
323
  // concat segments without leading zeros
@@ -236,11 +330,6 @@ function getInitialSupply(premint, decimals) {
236
330
  }
237
331
  exports.functions = (0, define_functions_1.defineFunctions)({
238
332
  // Token Functions
239
- total_supply: {
240
- args: [(0, common_options_1.getSelfArg)()],
241
- returns: 'i128',
242
- code: ['Self::ContractType::total_supply(e)'],
243
- },
244
333
  balance: {
245
334
  args: [(0, common_options_1.getSelfArg)(), { name: 'account', type: 'Address' }],
246
335
  returns: 'i128',
@@ -296,38 +385,19 @@ exports.functions = (0, define_functions_1.defineFunctions)({
296
385
  code: ['Self::ContractType::symbol(e)'],
297
386
  },
298
387
  // Extensions
299
- burn: {
300
- args: [(0, common_options_1.getSelfArg)(), { name: 'from', type: 'Address' }, { name: 'amount', type: 'i128' }],
301
- code: ['Base::burn(e, &from, amount)'],
302
- },
303
- burn_from: {
304
- args: [
305
- (0, common_options_1.getSelfArg)(),
306
- { name: 'spender', type: 'Address' },
307
- { name: 'from', type: 'Address' },
308
- { name: 'amount', type: 'i128' },
309
- ],
310
- code: ['Base::burn_from(e, &spender, &from, amount)'],
311
- },
312
- mint: {
313
- args: [(0, common_options_1.getSelfArg)(), { name: 'account', type: 'Address' }, { name: 'amount', type: 'i128' }],
314
- code: ['Base::mint(e, &account, amount);'],
388
+ total_supply: {
389
+ args: [(0, common_options_1.getSelfArg)()],
390
+ returns: 'i128',
391
+ code: ['Self::ContractType::total_supply(e)'],
315
392
  },
316
- mint_with_caller: {
317
- name: 'mint',
318
- args: [
319
- (0, common_options_1.getSelfArg)(),
320
- { name: 'account', type: 'Address' },
321
- { name: 'amount', type: 'i128' },
322
- { name: 'caller', type: 'Address' },
323
- ],
324
- code: ['Base::mint(e, &account, amount);'],
393
+ cap: {
394
+ args: [(0, common_options_1.getSelfArg)()],
395
+ returns: 'i128',
396
+ code: ['Capped::cap(e)'],
325
397
  },
326
- });
327
- const votesFunctions = (0, define_functions_1.defineFunctions)({
328
398
  burn: {
329
399
  args: [(0, common_options_1.getSelfArg)(), { name: 'from', type: 'Address' }, { name: 'amount', type: 'i128' }],
330
- code: ['FungibleVotes::burn(e, &from, amount)'],
400
+ code: ['Self::ContractType::burn(e, &from, amount)'],
331
401
  },
332
402
  burn_from: {
333
403
  args: [
@@ -336,11 +406,12 @@ const votesFunctions = (0, define_functions_1.defineFunctions)({
336
406
  { name: 'from', type: 'Address' },
337
407
  { name: 'amount', type: 'i128' },
338
408
  ],
339
- code: ['FungibleVotes::burn_from(e, &spender, &from, amount)'],
409
+ code: ['Self::ContractType::burn_from(e, &spender, &from, amount)'],
340
410
  },
411
+ // Minting goes through the contract type, which keeps the total supply, the cap and the voting units up to date.
341
412
  mint: {
342
413
  args: [(0, common_options_1.getSelfArg)(), { name: 'account', type: 'Address' }, { name: 'amount', type: 'i128' }],
343
- code: ['FungibleVotes::mint(e, &account, amount);'],
414
+ code: ['<Self as FungibleToken>::ContractType::mint(e, &account, amount);'],
344
415
  },
345
416
  mint_with_caller: {
346
417
  name: 'mint',
@@ -350,11 +421,10 @@ const votesFunctions = (0, define_functions_1.defineFunctions)({
350
421
  { name: 'amount', type: 'i128' },
351
422
  { name: 'caller', type: 'Address' },
352
423
  ],
353
- code: ['FungibleVotes::mint(e, &account, amount);'],
424
+ code: ['<Self as FungibleToken>::ContractType::mint(e, &account, amount);'],
354
425
  },
355
426
  });
356
427
  const fungibleTokenTraitFunctions = (0, wizard_common_1.pickKeys)(exports.functions, [
357
- 'total_supply',
358
428
  'balance',
359
429
  'allowance',
360
430
  'transfer',