@metaplex-foundation/kinobi 0.14.0 → 0.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/dist/cjs/renderers/rust/GetRustTypeManifestVisitor.js +16 -5
  2. package/dist/cjs/renderers/rust/GetRustTypeManifestVisitor.js.map +1 -1
  3. package/dist/cjs/renderers/rust/templates/accountsMod.njk +2 -2
  4. package/dist/cjs/renderers/rust/templates/accountsPage.njk +33 -28
  5. package/dist/cjs/renderers/rust/templates/definedTypesMod.njk +2 -2
  6. package/dist/cjs/renderers/rust/templates/errorsMod.njk +1 -1
  7. package/dist/cjs/renderers/rust/templates/errorsPage.njk +1 -1
  8. package/dist/cjs/renderers/rust/templates/instructionsCpiPage.njk +62 -9
  9. package/dist/cjs/renderers/rust/templates/instructionsCpiPageBuilder.njk +55 -26
  10. package/dist/cjs/renderers/rust/templates/instructionsMod.njk +61 -2
  11. package/dist/cjs/renderers/rust/templates/instructionsPage.njk +24 -18
  12. package/dist/cjs/renderers/rust/templates/instructionsPageBuilder.njk +47 -19
  13. package/dist/cjs/renderers/rust/templates/programsMod.njk +2 -2
  14. package/package.json +1 -1
  15. package/src/renderers/rust/GetRustTypeManifestVisitor.ts +20 -5
  16. package/src/renderers/rust/templates/accountsMod.njk +2 -2
  17. package/src/renderers/rust/templates/accountsPage.njk +33 -28
  18. package/src/renderers/rust/templates/definedTypesMod.njk +2 -2
  19. package/src/renderers/rust/templates/errorsMod.njk +1 -1
  20. package/src/renderers/rust/templates/errorsPage.njk +1 -1
  21. package/src/renderers/rust/templates/instructionsCpiPage.njk +62 -9
  22. package/src/renderers/rust/templates/instructionsCpiPageBuilder.njk +55 -26
  23. package/src/renderers/rust/templates/instructionsMod.njk +61 -2
  24. package/src/renderers/rust/templates/instructionsPage.njk +24 -18
  25. package/src/renderers/rust/templates/instructionsPageBuilder.njk +47 -19
  26. package/src/renderers/rust/templates/programsMod.njk +2 -2
@@ -48,7 +48,9 @@ class GetRustTypeManifestVisitor {
48
48
  this.parentName = null;
49
49
  return {
50
50
  ...manifest,
51
- type: `#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]\n${manifest.type}`,
51
+ type: '#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]\n' +
52
+ '#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]\n' +
53
+ `${manifest.type}`,
52
54
  };
53
55
  }
54
56
  visitAccountData(accountData) {
@@ -92,8 +94,12 @@ class GetRustTypeManifestVisitor {
92
94
  }
93
95
  return {
94
96
  ...manifest,
95
- type: `#[derive(${traits.join(', ')})]\n${manifest.type}`,
96
- nestedStructs: manifest.nestedStructs.map((struct) => `#[derive(${traits.join(', ')})]\n${struct}`),
97
+ type: `#[derive(${traits.join(', ')})]\n` +
98
+ '#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]\n' +
99
+ `${manifest.type}`,
100
+ nestedStructs: manifest.nestedStructs.map((struct) => `#[derive(${traits.join(', ')})]\n` +
101
+ '#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]\n' +
102
+ `${struct}`),
97
103
  };
98
104
  }
99
105
  visitError() {
@@ -262,11 +268,16 @@ class GetRustTypeManifestVisitor {
262
268
  this.nestedStruct = originalNestedStruct;
263
269
  const fieldName = (0, shared_1.snakeCase)(structFieldType.name);
264
270
  const docblock = this.createDocblock(structFieldType.docs);
271
+ let derive = '';
272
+ if (fieldManifest.type === 'Pubkey') {
273
+ derive =
274
+ '#[cfg_attr(feature = "serde", serde(with = "serde_with::As::<serde_with::DisplayFromStr>"))]\n';
275
+ }
265
276
  return {
266
277
  ...fieldManifest,
267
278
  type: this.inlineStruct
268
- ? `${docblock}${fieldName}: ${fieldManifest.type},`
269
- : `${docblock}pub ${fieldName}: ${fieldManifest.type},`,
279
+ ? `${docblock}${derive}${fieldName}: ${fieldManifest.type},`
280
+ : `${docblock}${derive}pub ${fieldName}: ${fieldManifest.type},`,
270
281
  };
271
282
  }
272
283
  visitTupleType(tupleType) {
@@ -1 +1 @@
1
- {"version":3,"file":"GetRustTypeManifestVisitor.js","sourceRoot":"","sources":["../../../../src/renderers/rust/GetRustTypeManifestVisitor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GetRustTypeManifestVisitor.js","sourceRoot":"","sources":["../../../../src/renderers/rust/GetRustTypeManifestVisitor.ts"],"names":[],"mappings":"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"}
@@ -3,11 +3,11 @@
3
3
  {% block main %}
4
4
 
5
5
  {% for account in accountsToExport | sort(false, false, 'name') %}
6
- pub mod {{ account.name | snakeCase }};
6
+ pub(crate) mod {{ account.name | snakeCase }};
7
7
  {% endfor %}
8
8
 
9
9
  {% for account in accountsToExport | sort(false, false, 'name') %}
10
- pub use self::{{ account.name | snakeCase }}::*;
10
+ pub use self::{{ account.name | snakeCase }}::*;
11
11
  {% endfor %}
12
12
 
13
13
  {% endblock %}
@@ -12,25 +12,23 @@
12
12
  {{ nestedStruct }}
13
13
  {% endfor %}
14
14
 
15
- {% if account.size != null or seeds.length > 0 %}
16
15
  impl {{ account.name | pascalCase }} {
17
16
  {% if account.size != null %}
18
17
  pub const LEN: usize = {{ account.size }};
19
18
  {% endif %}
20
19
 
21
20
  {% if seeds.length > 0 %}
22
- pub fn find_pda(
23
- {% if hasVariableSeeds %}
24
- {% for seed in seeds %}
25
- {% if seed.kind == 'variable' and seed.type.kind == 'publicKeyTypeNode' %}
26
- {{ seed.name | snakeCase }}: &{{ seed.typeManifest.type }},
27
- {% elif seed.kind === 'variable' %}
28
- {{ seed.name | snakeCase }}: {{ seed.typeManifest.type }},
29
- {% endif %}
30
- {% endfor %}
31
- {% endif %}
32
- ) -> (solana_program::pubkey::Pubkey, u8) {
33
- solana_program::pubkey::Pubkey::find_program_address(
21
+ pub fn create_pda(
22
+ {% if hasVariableSeeds %}
23
+ {% for seed in seeds %}
24
+ {% if seed.kind === 'variable' %}
25
+ {{ seed.name | snakeCase }}: {{ seed.typeManifest.type }},
26
+ {% endif %}
27
+ {% endfor %}
28
+ {% endif %}
29
+ bump: u8,
30
+ ) -> Result<solana_program::pubkey::Pubkey, solana_program::pubkey::PubkeyError> {
31
+ solana_program::pubkey::Pubkey::create_program_address(
34
32
  &[
35
33
  {% for seed in seeds %}
36
34
  {% if seed.kind === 'programId' %}
@@ -43,21 +41,24 @@ impl {{ account.name | pascalCase }} {
43
41
  {{ seed.name | snakeCase }}.to_string().as_ref(),
44
42
  {% endif %}
45
43
  {% endfor %}
44
+ &[bump],
46
45
  ],
47
46
  &crate::{{ program.name | snakeCase | upper }}_ID,
48
47
  )
49
48
  }
50
- pub fn create_pda(
51
- {% if hasVariableSeeds %}
52
- {% for seed in seeds %}
53
- {% if seed.kind === 'variable' %}
54
- {{ seed.name | snakeCase }}: {{ seed.typeManifest.type }},
55
- {% endif %}
56
- {% endfor %}
57
- {% endif %}
58
- bump: u8,
59
- ) -> Result<solana_program::pubkey::Pubkey, solana_program::pubkey::PubkeyError> {
60
- solana_program::pubkey::Pubkey::create_program_address(
49
+
50
+ pub fn find_pda(
51
+ {% if hasVariableSeeds %}
52
+ {% for seed in seeds %}
53
+ {% if seed.kind == 'variable' and seed.type.kind == 'publicKeyTypeNode' %}
54
+ {{ seed.name | snakeCase }}: &{{ seed.typeManifest.type }},
55
+ {% elif seed.kind === 'variable' %}
56
+ {{ seed.name | snakeCase }}: {{ seed.typeManifest.type }},
57
+ {% endif %}
58
+ {% endfor %}
59
+ {% endif %}
60
+ ) -> (solana_program::pubkey::Pubkey, u8) {
61
+ solana_program::pubkey::Pubkey::find_program_address(
61
62
  &[
62
63
  {% for seed in seeds %}
63
64
  {% if seed.kind === 'programId' %}
@@ -70,19 +71,23 @@ impl {{ account.name | pascalCase }} {
70
71
  {{ seed.name | snakeCase }}.to_string().as_ref(),
71
72
  {% endif %}
72
73
  {% endfor %}
73
- &[bump],
74
74
  ],
75
75
  &crate::{{ program.name | snakeCase | upper }}_ID,
76
76
  )
77
77
  }
78
78
  {% endif %}
79
+
80
+ #[inline(always)]
81
+ pub fn from_bytes(data: &[u8]) -> Result<Self, std::io::Error> {
82
+ let mut data = data;
83
+ Self::deserialize(&mut data)
84
+ }
79
85
  }
80
- {% endif %}
81
86
 
82
- impl<'a> TryFrom<&'a solana_program::account_info::AccountInfo<'a>> for {{ account.name | pascalCase }} {
87
+ impl<'a> TryFrom<&solana_program::account_info::AccountInfo<'a>> for {{ account.name | pascalCase }} {
83
88
  type Error = std::io::Error;
84
89
 
85
- fn try_from(account_info: &'a solana_program::account_info::AccountInfo<'a>) -> Result<Self, Self::Error> {
90
+ fn try_from(account_info: &solana_program::account_info::AccountInfo<'a>) -> Result<Self, Self::Error> {
86
91
  let mut data: &[u8] = &(*account_info.data).borrow();
87
92
  Self::deserialize(&mut data)
88
93
  }
@@ -3,11 +3,11 @@
3
3
  {% block main %}
4
4
 
5
5
  {% for definedType in definedTypesToExport | sort(false, false, 'name') %}
6
- pub mod {{ definedType.name | snakeCase }};
6
+ pub(crate) mod {{ definedType.name | snakeCase }};
7
7
  {% endfor %}
8
8
 
9
9
  {% for definedType in definedTypesToExport | sort(false, false, 'name') %}
10
- pub use self::{{ definedType.name | snakeCase }}::*;
10
+ pub use self::{{ definedType.name | snakeCase }}::*;
11
11
  {% endfor %}
12
12
 
13
13
  {% endblock %}
@@ -4,7 +4,7 @@
4
4
 
5
5
  {% for program in programsToExport | sort(false, false, 'name') %}
6
6
  {% if program.errors.length > 0 %}
7
- pub mod {{ program.name | snakeCase }};
7
+ pub(crate) mod {{ program.name | snakeCase }};
8
8
  {% endif %}
9
9
  {% endfor %}
10
10
 
@@ -8,7 +8,7 @@ use thiserror::Error;
8
8
  #[derive(Clone, Debug, Eq, Error, FromPrimitive, PartialEq)]
9
9
  pub enum {{ program.name | pascalCase }}Error {
10
10
  {% for error in errors | sort(false, false, 'code') %}
11
- /// 0x{{ error.code.toString(16) | upper }} - {{ error.message }}
11
+ /// {{ error.code }} (0x{{ error.code.toString(16) | upper }}) - {{ error.message }}
12
12
  #[error("{{ error.message }}")]
13
13
  {{ error.name | pascalCase }},
14
14
  {% endfor %}
@@ -1,16 +1,37 @@
1
+ /// `{{ instruction.name | snakeCase }}` CPI accounts.
2
+ pub struct {{ instruction.name | pascalCase }}CpiAccounts<'a, 'b> {
3
+ {% for account in instruction.accounts %}
4
+ {% if account.docs.length > 0 %}
5
+ {{ macros.docblock(account.docs) }}
6
+ {% endif %}
7
+
8
+ {% if account.isSigner === 'either' %}
9
+ {% set type = '(&\'b solana_program::account_info::AccountInfo<\'a>, bool)' %}
10
+ {% else %}
11
+ {% set type = '&\'b solana_program::account_info::AccountInfo<\'a>' %}
12
+ {% endif %}
13
+
14
+ {% if account.isOptional %}
15
+ pub {{ account.name | snakeCase }}: Option<{{ type }}>,
16
+ {% else %}
17
+ pub {{ account.name | snakeCase }}: {{ type }},
18
+ {% endif %}
19
+ {% endfor %}
20
+ }
21
+
1
22
  /// `{{ instruction.name | snakeCase }}` CPI instruction.
2
- pub struct {{ instruction.name | pascalCase }}Cpi<'a> {
23
+ pub struct {{ instruction.name | pascalCase }}Cpi<'a, 'b> {
3
24
  /// The program to invoke.
4
- pub __program: &'a solana_program::account_info::AccountInfo<'a>,
25
+ pub __program: &'b solana_program::account_info::AccountInfo<'a>,
5
26
  {% for account in instruction.accounts %}
6
27
  {% if account.docs.length > 0 %}
7
28
  {{ macros.docblock(account.docs) }}
8
29
  {% endif %}
9
30
 
10
31
  {% if account.isSigner === 'either' %}
11
- {% set type = '(&\'a solana_program::account_info::AccountInfo<\'a>, bool)' %}
32
+ {% set type = '(&\'b solana_program::account_info::AccountInfo<\'a>, bool)' %}
12
33
  {% else %}
13
- {% set type = '&\'a solana_program::account_info::AccountInfo<\'a>' %}
34
+ {% set type = '&\'b solana_program::account_info::AccountInfo<\'a>' %}
14
35
  {% endif %}
15
36
 
16
37
  {% if account.isOptional %}
@@ -25,14 +46,44 @@ pub struct {{ instruction.name | pascalCase }}Cpi<'a> {
25
46
  {% endif %}
26
47
  }
27
48
 
28
- impl<'a> {{ instruction.name | pascalCase }}Cpi<'a> {
49
+ impl<'a, 'b> {{ instruction.name | pascalCase }}Cpi<'a, 'b> {
50
+ pub fn new(
51
+ program: &'b solana_program::account_info::AccountInfo<'a>,
52
+ accounts: {{ instruction.name | pascalCase }}CpiAccounts<'a, 'b>,
53
+ {% if hasArgs %}
54
+ args: {{ instruction.name | pascalCase }}InstructionArgs,
55
+ {% endif %}
56
+ ) -> Self {
57
+ Self {
58
+ __program: program,
59
+ {% for account in instruction.accounts %}
60
+ {{ account.name | snakeCase }}: accounts.{{ account.name | snakeCase }},
61
+ {% endfor %}
62
+ {% if hasArgs %}
63
+ __args: args,
64
+ {% endif %}
65
+ }
66
+ }
67
+ #[inline(always)]
29
68
  pub fn invoke(&self) -> solana_program::entrypoint::ProgramResult {
30
- self.invoke_signed(&[])
69
+ self.invoke_signed_with_remaining_accounts(&[], &[])
70
+ }
71
+ #[inline(always)]
72
+ pub fn invoke_with_remaining_accounts(&self, remaining_accounts: &[super::InstructionAccountInfo<'a, '_>]) -> solana_program::entrypoint::ProgramResult {
73
+ self.invoke_signed_with_remaining_accounts(&[], remaining_accounts)
74
+ }
75
+ #[inline(always)]
76
+ pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program::entrypoint::ProgramResult {
77
+ self.invoke_signed_with_remaining_accounts(signers_seeds, &[])
31
78
  }
32
79
  #[allow(clippy::clone_on_copy)]
33
80
  #[allow(clippy::vec_init_then_push)]
34
- pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program::entrypoint::ProgramResult {
35
- let mut accounts = Vec::with_capacity({{ instruction.accounts.length }});
81
+ pub fn invoke_signed_with_remaining_accounts(
82
+ &self,
83
+ signers_seeds: &[&[&[u8]]],
84
+ remaining_accounts: &[super::InstructionAccountInfo<'a, '_>]
85
+ ) -> solana_program::entrypoint::ProgramResult {
86
+ let mut accounts = Vec::with_capacity({{ instruction.accounts.length }} + remaining_accounts.len());
36
87
  {% for account in instruction.accounts %}
37
88
  {% if account.isSigner === 'either' %}
38
89
  {% if account.isOptional and instruction.optionalAccountStrategy === 'programId' %}
@@ -88,6 +139,7 @@ impl<'a> {{ instruction.name | pascalCase }}Cpi<'a> {
88
139
  {% endif %}
89
140
  {% endif %}
90
141
  {% endfor %}
142
+ remaining_accounts.iter().for_each(|remaining_account| accounts.push(remaining_account.to_account_meta()));
91
143
  let {{ 'mut ' if hasArgs }}data = {{ instruction.name | pascalCase }}InstructionData::new().try_to_vec().unwrap();
92
144
  {% if hasArgs %}
93
145
  let mut args = self.__args.try_to_vec().unwrap();
@@ -99,7 +151,7 @@ impl<'a> {{ instruction.name | pascalCase }}Cpi<'a> {
99
151
  accounts,
100
152
  data,
101
153
  };
102
- let mut account_infos = Vec::with_capacity({{ instruction.accounts.length }} + 1);
154
+ let mut account_infos = Vec::with_capacity({{ instruction.accounts.length }} + 1 + remaining_accounts.len());
103
155
  account_infos.push(self.__program.clone());
104
156
  {% for account in instruction.accounts %}
105
157
  {% if account.isOptional %}
@@ -110,6 +162,7 @@ impl<'a> {{ instruction.name | pascalCase }}Cpi<'a> {
110
162
  account_infos.push(self.{{ account.name | snakeCase }}{{ '.0' if account.isSigner === 'either' }}.clone());
111
163
  {% endif %}
112
164
  {% endfor %}
165
+ remaining_accounts.iter().for_each(|remaining_account| account_infos.push(remaining_account.account_info().clone()));
113
166
 
114
167
  if signers_seeds.is_empty() {
115
168
  solana_program::program::invoke(&instruction, &account_infos)
@@ -1,10 +1,10 @@
1
1
  /// `{{ instruction.name | snakeCase }}` CPI instruction builder.
2
- pub struct {{ instruction.name | pascalCase }}CpiBuilder<'a> {
3
- instruction: Box<{{ instruction.name | pascalCase }}CpiBuilderInstruction<'a>>,
2
+ pub struct {{ instruction.name | pascalCase }}CpiBuilder<'a, 'b> {
3
+ instruction: Box<{{ instruction.name | pascalCase }}CpiBuilderInstruction<'a, 'b>>,
4
4
  }
5
5
 
6
- impl<'a> {{ instruction.name | pascalCase }}CpiBuilder<'a> {
7
- pub fn new(program: &'a solana_program::account_info::AccountInfo<'a>) -> Self {
6
+ impl<'a, 'b> {{ instruction.name | pascalCase }}CpiBuilder<'a, 'b> {
7
+ pub fn new(program: &'b solana_program::account_info::AccountInfo<'a>) -> Self {
8
8
  let instruction = Box::new({{ instruction.name | pascalCase }}CpiBuilderInstruction {
9
9
  __program: program,
10
10
  {% for account in instruction.accounts %}
@@ -15,6 +15,7 @@ impl<'a> {{ instruction.name | pascalCase }}CpiBuilder<'a> {
15
15
  {{ arg.name | snakeCase }}: None,
16
16
  {% endif %}
17
17
  {% endfor %}
18
+ __remaining_accounts: Vec::new(),
18
19
  });
19
20
  Self { instruction }
20
21
  }
@@ -22,11 +23,23 @@ impl<'a> {{ instruction.name | pascalCase }}CpiBuilder<'a> {
22
23
  {{'/// `[optional account]`\n' if account.isOptional }}
23
24
  {{- macros.docblock(account.docs) -}}
24
25
  #[inline(always)]
25
- pub fn {{ account.name | snakeCase }}(&mut self, {{ account.name | snakeCase }}: &'a solana_program::account_info::AccountInfo<'a>{{ ', as_signer: bool' if account.isSigner === 'either' }}) -> &mut Self {
26
- {% if account.isSigner === 'either' %}
27
- self.instruction.{{ account.name | snakeCase }} = Some(({{ account.name | snakeCase }}, as_signer));
26
+ pub fn {{ account.name | snakeCase }}(&mut self, {{ account.name | snakeCase }}: {{ "Option<&'b solana_program::account_info::AccountInfo<'a>>" if account.isOptional else "&'b solana_program::account_info::AccountInfo<'a>" }}{{ ', as_signer: bool' if account.isSigner === 'either' }}) -> &mut Self {
27
+ {% if account.isOptional %}
28
+ {% if account.isSigner === 'either' %}
29
+ if let Some({{ account.name | snakeCase }}) = {{ account.name | snakeCase }} {
30
+ self.instruction.{{ account.name | snakeCase }} = Some(({{ account.name | snakeCase }}, as_signer));
31
+ } else {
32
+ self.instruction.{{ account.name | snakeCase }} = None;
33
+ }
34
+ {% else %}
35
+ self.instruction.{{ account.name | snakeCase }} = {{ account.name | snakeCase }};
36
+ {% endif %}
28
37
  {% else %}
29
- self.instruction.{{ account.name | snakeCase }} = Some({{ account.name | snakeCase }});
38
+ {% if account.isSigner === 'either' %}
39
+ self.instruction.{{ account.name | snakeCase }} = Some(({{ account.name | snakeCase }}, as_signer));
40
+ {% else %}
41
+ self.instruction.{{ account.name | snakeCase }} = Some({{ account.name | snakeCase }});
42
+ {% endif %}
30
43
  {% endif %}
31
44
  self
32
45
  }
@@ -43,8 +56,23 @@ impl<'a> {{ instruction.name | pascalCase }}CpiBuilder<'a> {
43
56
  }
44
57
  {% endif %}
45
58
  {% endfor %}
59
+ #[inline(always)]
60
+ pub fn add_remaining_account(&mut self, account: super::InstructionAccountInfo<'a,'b>) -> &mut Self {
61
+ self.instruction.__remaining_accounts.push(account);
62
+ self
63
+ }
64
+ #[inline(always)]
65
+ pub fn add_remaining_accounts(&mut self, accounts: &[super::InstructionAccountInfo<'a, 'b>]) -> &mut Self {
66
+ self.instruction.__remaining_accounts.extend_from_slice(accounts);
67
+ self
68
+ }
69
+ #[inline(always)]
70
+ pub fn invoke(&self) -> solana_program::entrypoint::ProgramResult {
71
+ self.invoke_signed(&[])
72
+ }
46
73
  #[allow(clippy::clone_on_copy)]
47
- pub fn build(&self) -> {{ instruction.name | pascalCase }}Cpi<'a> {
74
+ #[allow(clippy::vec_init_then_push)]
75
+ pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program::entrypoint::ProgramResult {
48
76
  {% if hasArgs %}
49
77
  let args = {{ instruction.name | pascalCase }}InstructionArgs {
50
78
  {% for arg in instructionArgs %}
@@ -62,8 +90,7 @@ impl<'a> {{ instruction.name | pascalCase }}CpiBuilder<'a> {
62
90
  {% endfor %}
63
91
  };
64
92
  {% endif %}
65
-
66
- {{ instruction.name | pascalCase }}Cpi {
93
+ let instruction = {{ instruction.name | pascalCase }}Cpi {
67
94
  __program: self.instruction.__program,
68
95
  {% for account in instruction.accounts %}
69
96
  {{ account.name | snakeCase }}: self.instruction.{{ account.name | snakeCase }}{{ '.expect(\"' + account.name | snakeCase + ' is not set\")' if not account.isOptional }},
@@ -71,22 +98,24 @@ impl<'a> {{ instruction.name | pascalCase }}CpiBuilder<'a> {
71
98
  {% if hasArgs %}
72
99
  __args: args,
73
100
  {% endif %}
74
- }
101
+ };
102
+ instruction.invoke_signed_with_remaining_accounts(signers_seeds, &self.instruction.__remaining_accounts)
75
103
  }
76
104
  }
77
105
 
78
- struct {{ instruction.name | pascalCase }}CpiBuilderInstruction<'a> {
79
- __program: &'a solana_program::account_info::AccountInfo<'a>,
80
- {% for account in instruction.accounts %}
81
- {% if account.isSigner === 'either' %}
82
- {{ account.name | snakeCase }}: Option<(&'a solana_program::account_info::AccountInfo<'a>, bool)>,
83
- {% else %}
84
- {{ account.name | snakeCase }}: Option<&'a solana_program::account_info::AccountInfo<'a>>,
85
- {% endif %}
86
- {% endfor %}
87
- {% for arg in instructionArgs %}
88
- {% if not arg.default %}
89
- {{ arg.name | snakeCase }}: {{ arg.type if arg.innerOptionType else 'Option<' + arg.type + '>' }},
90
- {% endif %}
91
- {% endfor %}
106
+ struct {{ instruction.name | pascalCase }}CpiBuilderInstruction<'a, 'b> {
107
+ __program: &'b solana_program::account_info::AccountInfo<'a>,
108
+ {% for account in instruction.accounts %}
109
+ {% if account.isSigner === 'either' %}
110
+ {{ account.name | snakeCase }}: Option<(&'b solana_program::account_info::AccountInfo<'a>, bool)>,
111
+ {% else %}
112
+ {{ account.name | snakeCase }}: Option<&'b solana_program::account_info::AccountInfo<'a>>,
113
+ {% endif %}
114
+ {% endfor %}
115
+ {% for arg in instructionArgs %}
116
+ {% if not arg.default %}
117
+ {{ arg.name | snakeCase }}: {{ arg.type if arg.innerOptionType else 'Option<' + arg.type + '>' }},
118
+ {% endif %}
119
+ {% endfor %}
120
+ __remaining_accounts: Vec<super::InstructionAccountInfo<'a, 'b>>,
92
121
  }
@@ -3,11 +3,70 @@
3
3
  {% block main %}
4
4
 
5
5
  {% for instruction in instructionsToExport | sort(false, false, 'name') %}
6
- pub mod {{ instruction.name | snakeCase }};
6
+ pub(crate) mod {{ instruction.name | snakeCase }};
7
7
  {% endfor %}
8
8
 
9
9
  {% for instruction in instructionsToExport | sort(false, false, 'name') %}
10
- pub use self::{{ instruction.name | snakeCase }}::*;
10
+ pub use self::{{ instruction.name | snakeCase }}::*;
11
11
  {% endfor %}
12
12
 
13
+ #[derive(Clone, Copy)]
14
+ pub enum InstructionAccount {
15
+ Readonly(solana_program::pubkey::Pubkey),
16
+ ReadonlySigner(solana_program::pubkey::Pubkey),
17
+ Writable(solana_program::pubkey::Pubkey),
18
+ WritableSigner(solana_program::pubkey::Pubkey),
19
+ }
20
+
21
+ impl InstructionAccount {
22
+ pub fn to_account_meta(&self) -> solana_program::instruction::AccountMeta {
23
+ let (pubkey, writable, signer) = match self {
24
+ InstructionAccount::Readonly(pubkey) => (pubkey, false, false),
25
+ InstructionAccount::ReadonlySigner(pubkey) => (pubkey, false, true),
26
+ InstructionAccount::Writable(pubkey) => (pubkey, true, false),
27
+ InstructionAccount::WritableSigner(pubkey) => (pubkey, true, true),
28
+ };
29
+
30
+ if writable {
31
+ solana_program::instruction::AccountMeta::new(*pubkey, signer)
32
+ } else {
33
+ solana_program::instruction::AccountMeta::new_readonly(*pubkey, signer)
34
+ }
35
+ }
36
+ }
37
+
38
+ #[derive(Clone, Copy)]
39
+ pub enum InstructionAccountInfo<'a, 'b> {
40
+ Readonly(&'b solana_program::account_info::AccountInfo<'a>),
41
+ ReadonlySigner(&'b solana_program::account_info::AccountInfo<'a>),
42
+ Writable(&'b solana_program::account_info::AccountInfo<'a>),
43
+ WritableSigner(&'b solana_program::account_info::AccountInfo<'a>),
44
+ }
45
+
46
+ impl<'a, 'b> InstructionAccountInfo<'a, 'b> {
47
+ pub fn to_account_meta(&self) -> solana_program::instruction::AccountMeta {
48
+ let (pubkey, writable, signer) = match self {
49
+ InstructionAccountInfo::Readonly(account_info) => (account_info.key, false, false),
50
+ InstructionAccountInfo::ReadonlySigner(account_info) => (account_info.key, false, true),
51
+ InstructionAccountInfo::Writable(account_info) => (account_info.key, true, false),
52
+ InstructionAccountInfo::WritableSigner(account_info) => (account_info.key, true, true),
53
+ };
54
+
55
+ if writable {
56
+ solana_program::instruction::AccountMeta::new(*pubkey, signer)
57
+ } else {
58
+ solana_program::instruction::AccountMeta::new_readonly(*pubkey, signer)
59
+ }
60
+ }
61
+ pub fn account_info(&self) -> &'b solana_program::account_info::AccountInfo<'a> {
62
+ match self {
63
+ InstructionAccountInfo::Readonly(account_info)
64
+ | InstructionAccountInfo::ReadonlySigner(account_info)
65
+ | InstructionAccountInfo::Writable(account_info)
66
+ | InstructionAccountInfo::WritableSigner(account_info)
67
+ => account_info,
68
+ }
69
+ }
70
+ }
71
+
13
72
  {% endblock %}
@@ -7,29 +7,32 @@
7
7
 
8
8
  /// Accounts.
9
9
  pub struct {{ instruction.name | pascalCase }} {
10
- {% for account in instruction.accounts %}
11
- {% if account.docs.length > 0 %}
12
- {{ macros.docblock(account.docs) }}
13
- {% endif %}
10
+ {% for account in instruction.accounts %}
11
+ {% if account.docs.length > 0 %}
12
+ {{ macros.docblock(account.docs) }}
13
+ {% endif %}
14
14
 
15
- {% if account.isSigner === 'either' %}
16
- {% set type = '(solana_program::pubkey::Pubkey, bool)' %}
17
- {% else %}
18
- {% set type = 'solana_program::pubkey::Pubkey' %}
19
- {% endif %}
15
+ {% if account.isSigner === 'either' %}
16
+ {% set type = '(solana_program::pubkey::Pubkey, bool)' %}
17
+ {% else %}
18
+ {% set type = 'solana_program::pubkey::Pubkey' %}
19
+ {% endif %}
20
20
 
21
- {% if account.isOptional %}
22
- pub {{ account.name | snakeCase }}: Option<{{ type }}>,
23
- {% else %}
24
- pub {{ account.name | snakeCase }}: {{ type }},
25
- {% endif %}
26
- {% endfor %}
21
+ {% if account.isOptional %}
22
+ pub {{ account.name | snakeCase }}: Option<{{ type }}>,
23
+ {% else %}
24
+ pub {{ account.name | snakeCase }}: {{ type }},
25
+ {% endif %}
26
+ {% endfor %}
27
27
  }
28
28
 
29
29
  impl {{ instruction.name | pascalCase }} {
30
- #[allow(clippy::vec_init_then_push)]
31
30
  pub fn instruction(&self{{ ', args: ' + instruction.name | pascalCase + 'InstructionArgs' if hasArgs }}) -> solana_program::instruction::Instruction {
32
- let mut accounts = Vec::with_capacity({{ instruction.accounts.length }});
31
+ self.instruction_with_remaining_accounts({{ 'args, ' if hasArgs }}&[])
32
+ }
33
+ #[allow(clippy::vec_init_then_push)]
34
+ pub fn instruction_with_remaining_accounts(&self{{ ', args: ' + instruction.name | pascalCase + 'InstructionArgs' if hasArgs }}, remaining_accounts: &[super::InstructionAccount]) -> solana_program::instruction::Instruction {
35
+ let mut accounts = Vec::with_capacity({{ instruction.accounts.length }} + remaining_accounts.len());
33
36
  {% for account in instruction.accounts %}
34
37
  {% if account.isSigner === 'either' %}
35
38
  {% if account.isOptional %}
@@ -89,6 +92,7 @@ impl {{ instruction.name | pascalCase }} {
89
92
  {% endif %}
90
93
  {% endif %}
91
94
  {% endfor %}
95
+ remaining_accounts.iter().for_each(|remaining_account| accounts.push(remaining_account.to_account_meta()));
92
96
  let {{ 'mut ' if hasArgs }}data = {{ instruction.name | pascalCase }}InstructionData::new().try_to_vec().unwrap();
93
97
  {% if hasArgs %}
94
98
  let mut args = args.try_to_vec().unwrap();
@@ -125,7 +129,8 @@ impl {{ instruction.name | pascalCase }}InstructionData {
125
129
  }
126
130
 
127
131
  {% if hasArgs %}
128
- #[derive(BorshSerialize, BorshDeserialize, Debug)]
132
+ #[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
133
+ #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
129
134
  pub struct {{ instruction.name | pascalCase }}InstructionArgs {
130
135
  {% for arg in instructionArgs %}
131
136
  {% if not arg.default %}
@@ -137,6 +142,7 @@ pub struct {{ instruction.name | pascalCase }}InstructionArgs {
137
142
 
138
143
  {% for nestedStruct in typeManifest.nestedStructs %}
139
144
  #[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
145
+ #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
140
146
  {{ nestedStruct }}
141
147
  {% endfor %}
142
148