Skip to content

Commit 2b775e8

Browse files
authored
Merge pull request #539 from Emurgo/evgenii/multiple_script_inputs
Multiple script input support
2 parents fc0a55b + 3c1bae8 commit 2b775e8

File tree

3 files changed

+312
-105
lines changed

3 files changed

+312
-105
lines changed

rust/pkg/cardano_serialization_lib.js.flow

Lines changed: 128 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,42 @@
55
* @flow
66
*/
77

8+
/**
9+
* @param {Uint8Array} bytes
10+
* @returns {TransactionMetadatum}
11+
*/
12+
declare export function encode_arbitrary_bytes_as_metadatum(
13+
bytes: Uint8Array
14+
): TransactionMetadatum;
15+
16+
/**
17+
* @param {TransactionMetadatum} metadata
18+
* @returns {Uint8Array}
19+
*/
20+
declare export function decode_arbitrary_bytes_from_metadatum(
21+
metadata: TransactionMetadatum
22+
): Uint8Array;
23+
24+
/**
25+
* @param {string} json
26+
* @param {number} schema
27+
* @returns {TransactionMetadatum}
28+
*/
29+
declare export function encode_json_str_to_metadatum(
30+
json: string,
31+
schema: number
32+
): TransactionMetadatum;
33+
34+
/**
35+
* @param {TransactionMetadatum} metadatum
36+
* @param {number} schema
37+
* @returns {string}
38+
*/
39+
declare export function decode_metadatum_to_json_str(
40+
metadatum: TransactionMetadatum,
41+
schema: number
42+
): string;
43+
844
/**
945
* @param {Transaction} tx
1046
* @param {LinearFee} linear_fee
@@ -194,42 +230,6 @@ declare export function encode_json_str_to_native_script(
194230
schema: number
195231
): NativeScript;
196232

197-
/**
198-
* @param {Uint8Array} bytes
199-
* @returns {TransactionMetadatum}
200-
*/
201-
declare export function encode_arbitrary_bytes_as_metadatum(
202-
bytes: Uint8Array
203-
): TransactionMetadatum;
204-
205-
/**
206-
* @param {TransactionMetadatum} metadata
207-
* @returns {Uint8Array}
208-
*/
209-
declare export function decode_arbitrary_bytes_from_metadatum(
210-
metadata: TransactionMetadatum
211-
): Uint8Array;
212-
213-
/**
214-
* @param {string} json
215-
* @param {number} schema
216-
* @returns {TransactionMetadatum}
217-
*/
218-
declare export function encode_json_str_to_metadatum(
219-
json: string,
220-
schema: number
221-
): TransactionMetadatum;
222-
223-
/**
224-
* @param {TransactionMetadatum} metadatum
225-
* @param {number} schema
226-
* @returns {string}
227-
*/
228-
declare export function decode_metadatum_to_json_str(
229-
metadatum: TransactionMetadatum,
230-
schema: number
231-
): string;
232-
233233
/**
234234
* @param {string} json
235235
* @param {number} schema
@@ -321,6 +321,26 @@ declare export var NetworkIdKind: {|
321321
+Mainnet: 1, // 1
322322
|};
323323

324+
/**
325+
*/
326+
327+
declare export var TransactionMetadatumKind: {|
328+
+MetadataMap: 0, // 0
329+
+MetadataList: 1, // 1
330+
+Int: 2, // 2
331+
+Bytes: 3, // 3
332+
+Text: 4, // 4
333+
|};
334+
335+
/**
336+
*/
337+
338+
declare export var MetadataJsonSchema: {|
339+
+NoConversions: 0, // 0
340+
+BasicConversions: 1, // 1
341+
+DetailedSchema: 2, // 2
342+
|};
343+
324344
/**
325345
*/
326346

@@ -348,26 +368,6 @@ declare export var ScriptSchema: {|
348368
+Node: 1, // 1
349369
|};
350370

351-
/**
352-
*/
353-
354-
declare export var TransactionMetadatumKind: {|
355-
+MetadataMap: 0, // 0
356-
+MetadataList: 1, // 1
357-
+Int: 2, // 2
358-
+Bytes: 3, // 3
359-
+Text: 4, // 4
360-
|};
361-
362-
/**
363-
*/
364-
365-
declare export var MetadataJsonSchema: {|
366-
+NoConversions: 0, // 0
367-
+BasicConversions: 1, // 1
368-
+DetailedSchema: 2, // 2
369-
|};
370-
371371
/**
372372
*/
373373

@@ -2952,6 +2952,62 @@ declare export class HeaderBody {
29522952
protocol_version: ProtocolVersion
29532953
): HeaderBody;
29542954
}
2955+
/**
2956+
*/
2957+
declare export class InputWithScriptWitness {
2958+
free(): void;
2959+
2960+
/**
2961+
* @param {TransactionInput} input
2962+
* @param {NativeScript} witness
2963+
* @returns {InputWithScriptWitness}
2964+
*/
2965+
static new_with_native_script_witness(
2966+
input: TransactionInput,
2967+
witness: NativeScript
2968+
): InputWithScriptWitness;
2969+
2970+
/**
2971+
* @param {TransactionInput} input
2972+
* @param {PlutusWitness} witness
2973+
* @returns {InputWithScriptWitness}
2974+
*/
2975+
static new_with_plutus_witness(
2976+
input: TransactionInput,
2977+
witness: PlutusWitness
2978+
): InputWithScriptWitness;
2979+
2980+
/**
2981+
* @returns {TransactionInput}
2982+
*/
2983+
input(): TransactionInput;
2984+
}
2985+
/**
2986+
*/
2987+
declare export class InputsWithScriptWitness {
2988+
free(): void;
2989+
2990+
/**
2991+
* @returns {InputsWithScriptWitness}
2992+
*/
2993+
static new(): InputsWithScriptWitness;
2994+
2995+
/**
2996+
* @param {InputWithScriptWitness} input
2997+
*/
2998+
add(input: InputWithScriptWitness): void;
2999+
3000+
/**
3001+
* @param {number} index
3002+
* @returns {InputWithScriptWitness}
3003+
*/
3004+
get(index: number): InputWithScriptWitness;
3005+
3006+
/**
3007+
* @returns {number}
3008+
*/
3009+
len(): number;
3010+
}
29553011
/**
29563012
*/
29573013
declare export class Int {
@@ -9223,6 +9279,8 @@ declare export class TxInputsBuilder {
92239279
): void;
92249280

92259281
/**
9282+
* !!! DEPRECATED !!!
9283+
* This function can make a mistake in choosing right input index. Use `.add_native_script_input` or `.add_plutus_script_input` instead.
92269284
* This method adds the input to the builder BUT leaves a missing spot for the witness native script
92279285
*
92289286
* After adding the input with this method, use `.add_required_native_input_scripts`
@@ -9303,6 +9361,8 @@ declare export class TxInputsBuilder {
93039361
add_required_native_input_scripts(scripts: NativeScripts): number;
93049362

93059363
/**
9364+
* !!! DEPRECATED !!!
9365+
* This function can make a mistake in choosing right input index. Use `.add_required_script_input_witnesses` instead.
93069366
* Try adding the specified scripts as witnesses for ALREADY ADDED script inputs
93079367
* Any scripts that don't match any of the previously added inputs will be ignored
93089368
* Returns the number of remaining required missing witness scripts
@@ -9312,6 +9372,18 @@ declare export class TxInputsBuilder {
93129372
*/
93139373
add_required_plutus_input_scripts(scripts: PlutusWitnesses): number;
93149374

9375+
/**
9376+
* Try adding the specified scripts as witnesses for ALREADY ADDED script inputs
9377+
* Any scripts that don't match any of the previously added inputs will be ignored
9378+
* Returns the number of remaining required missing witness scripts
9379+
* Use `.count_missing_input_scripts` to find the number of still missing scripts
9380+
* @param {InputsWithScriptWitness} inputs_with_wit
9381+
* @returns {number}
9382+
*/
9383+
add_required_script_input_witnesses(
9384+
inputs_with_wit: InputsWithScriptWitness
9385+
): number;
9386+
93159387
/**
93169388
* @returns {TransactionInputs}
93179389
*/

rust/src/tx_builder.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ fn fake_full_tx(
124124
let (plutus_scripts, plutus_data, redeemers) = {
125125
if let Some(s) = tx_builder.get_combined_plutus_scripts() {
126126
let (s, d, r) = s.collect();
127-
(Some(s), Some(d), Some(r))
127+
(Some(s), d, Some(r))
128128
} else {
129129
(None, None, None)
130130
}
@@ -1676,7 +1676,7 @@ impl TransactionBuilder {
16761676
self.script_data_hash = Some(hash_script_data(
16771677
&redeemers,
16781678
&retained_cost_models,
1679-
Some(datums),
1679+
datums,
16801680
));
16811681
}
16821682
Ok(())
@@ -1809,7 +1809,9 @@ impl TransactionBuilder {
18091809
if let Some(pw) = self.get_combined_plutus_scripts() {
18101810
let (scripts, datums, redeemers) = pw.collect();
18111811
wit.set_plutus_scripts(&scripts);
1812-
wit.set_plutus_data(&datums);
1812+
if let Some(datums) = &datums {
1813+
wit.set_plutus_data(datums);
1814+
}
18131815
wit.set_redeemers(&redeemers);
18141816
}
18151817
wit

0 commit comments

Comments
 (0)