Skip to content

Commit d85bbf7

Browse files
authored
Merge pull request #480 from Emurgo/evgenii/tx-batch-builder
Send all batching
2 parents 3b19010 + c954842 commit d85bbf7

File tree

17 files changed

+2505
-131
lines changed

17 files changed

+2505
-131
lines changed

rust/pkg/cardano_serialization_lib.js.flow

Lines changed: 161 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,62 @@
55
* @flow
66
*/
77

8+
/**
9+
* @param {string} json
10+
* @param {number} schema
11+
* @returns {PlutusData}
12+
*/
13+
declare export function encode_json_str_to_plutus_datum(
14+
json: string,
15+
schema: number
16+
): PlutusData;
17+
18+
/**
19+
* @param {PlutusData} datum
20+
* @param {number} schema
21+
* @returns {string}
22+
*/
23+
declare export function decode_plutus_datum_to_json_str(
24+
datum: PlutusData,
25+
schema: number
26+
): string;
27+
28+
/**
29+
* @param {Uint8Array} bytes
30+
* @returns {TransactionMetadatum}
31+
*/
32+
declare export function encode_arbitrary_bytes_as_metadatum(
33+
bytes: Uint8Array
34+
): TransactionMetadatum;
35+
36+
/**
37+
* @param {TransactionMetadatum} metadata
38+
* @returns {Uint8Array}
39+
*/
40+
declare export function decode_arbitrary_bytes_from_metadatum(
41+
metadata: TransactionMetadatum
42+
): Uint8Array;
43+
44+
/**
45+
* @param {string} json
46+
* @param {number} schema
47+
* @returns {TransactionMetadatum}
48+
*/
49+
declare export function encode_json_str_to_metadatum(
50+
json: string,
51+
schema: number
52+
): TransactionMetadatum;
53+
54+
/**
55+
* @param {TransactionMetadatum} metadatum
56+
* @param {number} schema
57+
* @returns {string}
58+
*/
59+
declare export function decode_metadatum_to_json_str(
60+
metadatum: TransactionMetadatum,
61+
schema: number
62+
): string;
63+
864
/**
965
* @param {Transaction} tx
1066
* @param {LinearFee} linear_fee
@@ -32,30 +88,6 @@ declare export function min_script_fee(
3288
ex_unit_prices: ExUnitPrices
3389
): BigNum;
3490

35-
/**
36-
* @param {string} password
37-
* @param {string} salt
38-
* @param {string} nonce
39-
* @param {string} data
40-
* @returns {string}
41-
*/
42-
declare export function encrypt_with_password(
43-
password: string,
44-
salt: string,
45-
nonce: string,
46-
data: string
47-
): string;
48-
49-
/**
50-
* @param {string} password
51-
* @param {string} data
52-
* @returns {string}
53-
*/
54-
declare export function decrypt_with_password(
55-
password: string,
56-
data: string
57-
): string;
58-
5991
/**
6092
* @param {TransactionHash} tx_body_hash
6193
* @param {ByronAddress} addr
@@ -195,60 +227,40 @@ declare export function encode_json_str_to_native_script(
195227
): NativeScript;
196228

197229
/**
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
230+
* @param {string} password
231+
* @param {string} salt
232+
* @param {string} nonce
233+
* @param {string} data
226234
* @returns {string}
227235
*/
228-
declare export function decode_metadatum_to_json_str(
229-
metadatum: TransactionMetadatum,
230-
schema: number
236+
declare export function encrypt_with_password(
237+
password: string,
238+
salt: string,
239+
nonce: string,
240+
data: string
231241
): string;
232242

233243
/**
234-
* @param {string} json
235-
* @param {number} schema
236-
* @returns {PlutusData}
244+
* @param {string} password
245+
* @param {string} data
246+
* @returns {string}
237247
*/
238-
declare export function encode_json_str_to_plutus_datum(
239-
json: string,
240-
schema: number
241-
): PlutusData;
248+
declare export function decrypt_with_password(
249+
password: string,
250+
data: string
251+
): string;
242252

243253
/**
244-
* @param {PlutusData} datum
245-
* @param {number} schema
246-
* @returns {string}
254+
* @param {Address} address
255+
* @param {TransactionUnspentOutputs} utxos
256+
* @param {TransactionBuilderConfig} config
257+
* @returns {TransactionBatchList}
247258
*/
248-
declare export function decode_plutus_datum_to_json_str(
249-
datum: PlutusData,
250-
schema: number
251-
): string;
259+
declare export function create_send_all(
260+
address: Address,
261+
utxos: TransactionUnspentOutputs,
262+
config: TransactionBuilderConfig
263+
): TransactionBatchList;
252264

253265
/**
254266
*/
@@ -324,28 +336,47 @@ declare export var NetworkIdKind: {|
324336
/**
325337
*/
326338

327-
declare export var CoinSelectionStrategyCIP2: {|
328-
+LargestFirst: 0, // 0
329-
+RandomImprove: 1, // 1
330-
+LargestFirstMultiAsset: 2, // 2
331-
+RandomImproveMultiAsset: 3, // 3
339+
declare export var LanguageKind: {|
340+
+PlutusV1: 0, // 0
341+
+PlutusV2: 1, // 1
332342
|};
333343

334344
/**
335345
*/
336346

337-
declare export var StakeCredKind: {|
338-
+Key: 0, // 0
339-
+Script: 1, // 1
347+
declare export var PlutusDataKind: {|
348+
+ConstrPlutusData: 0, // 0
349+
+Map: 1, // 1
350+
+List: 2, // 2
351+
+Integer: 3, // 3
352+
+Bytes: 4, // 4
340353
|};
341354

342355
/**
343-
* Used to choosed the schema for a script JSON string
344356
*/
345357

346-
declare export var ScriptSchema: {|
347-
+Wallet: 0, // 0
348-
+Node: 1, // 1
358+
declare export var RedeemerTagKind: {|
359+
+Spend: 0, // 0
360+
+Mint: 1, // 1
361+
+Cert: 2, // 2
362+
+Reward: 3, // 3
363+
|};
364+
365+
/**
366+
* JSON <-> PlutusData conversion schemas.
367+
* Follows ScriptDataJsonSchema in cardano-cli defined at:
368+
* https://github.com/input-output-hk/cardano-node/blob/master/cardano-api/src/Cardano/Api/ScriptData.hs#L254
369+
*
370+
* All methods here have the following restrictions due to limitations on dependencies:
371+
* * JSON numbers above u64::MAX (positive) or below i64::MIN (negative) will throw errors
372+
* * Hex strings for bytes don't accept odd-length (half-byte) strings.
373+
* cardano-cli seems to support these however but it seems to be different than just 0-padding
374+
* on either side when tested so proceed with caution
375+
*/
376+
377+
declare export var PlutusDatumSchema: {|
378+
+BasicConversions: 0, // 0
379+
+DetailedSchema: 1, // 1
349380
|};
350381

351382
/**
@@ -371,47 +402,28 @@ declare export var MetadataJsonSchema: {|
371402
/**
372403
*/
373404

374-
declare export var LanguageKind: {|
375-
+PlutusV1: 0, // 0
376-
+PlutusV2: 1, // 1
377-
|};
378-
379-
/**
380-
*/
381-
382-
declare export var PlutusDataKind: {|
383-
+ConstrPlutusData: 0, // 0
384-
+Map: 1, // 1
385-
+List: 2, // 2
386-
+Integer: 3, // 3
387-
+Bytes: 4, // 4
405+
declare export var CoinSelectionStrategyCIP2: {|
406+
+LargestFirst: 0, // 0
407+
+RandomImprove: 1, // 1
408+
+LargestFirstMultiAsset: 2, // 2
409+
+RandomImproveMultiAsset: 3, // 3
388410
|};
389411

390412
/**
391413
*/
392414

393-
declare export var RedeemerTagKind: {|
394-
+Spend: 0, // 0
395-
+Mint: 1, // 1
396-
+Cert: 2, // 2
397-
+Reward: 3, // 3
415+
declare export var StakeCredKind: {|
416+
+Key: 0, // 0
417+
+Script: 1, // 1
398418
|};
399419

400420
/**
401-
* JSON <-> PlutusData conversion schemas.
402-
* Follows ScriptDataJsonSchema in cardano-cli defined at:
403-
* https://github.com/input-output-hk/cardano-node/blob/master/cardano-api/src/Cardano/Api/ScriptData.hs#L254
404-
*
405-
* All methods here have the following restrictions due to limitations on dependencies:
406-
* * JSON numbers above u64::MAX (positive) or below i64::MIN (negative) will throw errors
407-
* * Hex strings for bytes don't accept odd-length (half-byte) strings.
408-
* cardano-cli seems to support these however but it seems to be different than just 0-padding
409-
* on either side when tested so proceed with caution
421+
* Used to choosed the schema for a script JSON string
410422
*/
411423

412-
declare export var PlutusDatumSchema: {|
413-
+BasicConversions: 0, // 0
414-
+DetailedSchema: 1, // 1
424+
declare export var ScriptSchema: {|
425+
+Wallet: 0, // 0
426+
+Node: 1, // 1
415427
|};
416428

417429
/**
@@ -1060,6 +1072,11 @@ declare export class BigNum {
10601072
*/
10611073
less_than(rhs_value: BigNum): boolean;
10621074

1075+
/**
1076+
* @returns {BigNum}
1077+
*/
1078+
static max_value(): BigNum;
1079+
10631080
/**
10641081
* @param {BigNum} a
10651082
* @param {BigNum} b
@@ -7484,6 +7501,38 @@ declare export class Transaction {
74847501
auxiliary_data?: AuxiliaryData
74857502
): Transaction;
74867503
}
7504+
/**
7505+
*/
7506+
declare export class TransactionBatch {
7507+
free(): void;
7508+
7509+
/**
7510+
* @returns {number}
7511+
*/
7512+
len(): number;
7513+
7514+
/**
7515+
* @param {number} index
7516+
* @returns {Transaction}
7517+
*/
7518+
get(index: number): Transaction;
7519+
}
7520+
/**
7521+
*/
7522+
declare export class TransactionBatchList {
7523+
free(): void;
7524+
7525+
/**
7526+
* @returns {number}
7527+
*/
7528+
len(): number;
7529+
7530+
/**
7531+
* @param {number} index
7532+
* @returns {TransactionBatch}
7533+
*/
7534+
get(index: number): TransactionBatch;
7535+
}
74877536
/**
74887537
*/
74897538
declare export class TransactionBodies {

rust/src/fees.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,11 @@ impl LinearFee {
2828

2929
#[wasm_bindgen]
3030
pub fn min_fee(tx: &Transaction, linear_fee: &LinearFee) -> Result<Coin, JsError> {
31-
to_bignum(tx.to_bytes().len() as u64)
31+
min_fee_for_size(tx.to_bytes().len(), linear_fee)
32+
}
33+
34+
pub fn min_fee_for_size(size: usize, linear_fee: &LinearFee) -> Result<Coin, JsError> {
35+
BigNum::from(size)
3236
.checked_mul(&linear_fee.coefficient())?
3337
.checked_add(&linear_fee.constant())
3438
}

rust/src/lib.rs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ pub mod typed_bytes;
5656
pub mod utils;
5757
mod fakes;
5858
mod serialization_macros;
59+
mod serialization_tools;
5960

6061
use crate::traits::NoneOrEmpty;
6162
use address::*;
@@ -219,6 +220,15 @@ impl TransactionOutputs {
219220
}
220221
}
221222

223+
impl<'a> IntoIterator for &'a TransactionOutputs {
224+
type Item = &'a TransactionOutput;
225+
type IntoIter = std::slice::Iter<'a, TransactionOutput>;
226+
227+
fn into_iter(self) -> std::slice::Iter<'a, TransactionOutput> {
228+
self.0.iter()
229+
}
230+
}
231+
222232
#[derive(Clone, Debug, Eq, Ord, PartialEq, PartialOrd)]
223233
enum DataCostEnum {
224234
CoinsPerWord(Coin),
@@ -3141,7 +3151,7 @@ impl HeaderBody {
31413151
}
31423152

31433153
#[wasm_bindgen]
3144-
#[derive(Clone, Debug, Eq, PartialEq)]
3154+
#[derive(Clone, Debug, Eq, PartialEq, Hash)]
31453155
pub struct AssetName(Vec<u8>);
31463156

31473157
impl Display for AssetName {

0 commit comments

Comments
 (0)