pass serialized coins into spark send

This commit is contained in:
julian
2023-12-18 14:07:06 -06:00
parent a618beb697
commit 2a17a7ba8c
4 changed files with 44 additions and 22 deletions

View File

@@ -276,7 +276,7 @@ abstract final class LibSpark {
String memo
})>
privateRecipients,
required List<Uint8List> serializedMintMetas,
required List<(String, String)> serializedCoins,
required List<
({
int setId,
@@ -315,12 +315,21 @@ abstract final class LibSpark {
privateRecipients[i].sparkAddress.toNativeUtf8().cast<Char>();
}
final serializedMintMetasPtr = malloc.allocate<CCDataStream>(
sizeOf<CCDataStream>() * serializedMintMetas.length);
for (int i = 0; i < serializedMintMetas.length; i++) {
serializedMintMetasPtr[i].data =
serializedMintMetas[i].unsignedCharPointer();
serializedMintMetasPtr[i].length = serializedMintMetas[i].length;
final serializedCoinsPtr = malloc.allocate<CCDataStream>(
sizeOf<CCDataStream>() * serializedCoins.length);
final serializedCoinContextsPtr = malloc.allocate<CCDataStream>(
sizeOf<CCDataStream>() * serializedCoins.length);
for (int i = 0; i < serializedCoins.length; i++) {
// take sublist as tx hash is also appended here for some reason
final b64CoinDecoded =
base64Decode(serializedCoins[i].$1).sublist(0, 244);
serializedCoinsPtr[i].data = b64CoinDecoded.unsignedCharPointer();
serializedCoinsPtr[i].length = b64CoinDecoded.length;
final b64ContextDecoded = base64Decode(serializedCoins[i].$2);
serializedCoinContextsPtr[i].data =
b64ContextDecoded.unsignedCharPointer();
serializedCoinContextsPtr[i].length = b64ContextDecoded.length;
}
final coverSetDataAllPtr = malloc.allocate<CCoverSetData>(
@@ -353,8 +362,9 @@ abstract final class LibSpark {
recipients.length,
privateRecipientsPtr,
privateRecipients.length,
serializedMintMetasPtr,
serializedMintMetas.length,
serializedCoinsPtr,
serializedCoins.length,
serializedCoinContextsPtr,
coverSetDataAllPtr,
allAnonymitySets.length,
);
@@ -363,7 +373,8 @@ abstract final class LibSpark {
malloc.free(privateKeyPtr);
malloc.free(recipientsPtr);
malloc.free(privateRecipientsPtr);
malloc.free(serializedMintMetasPtr);
malloc.free(serializedCoinsPtr);
malloc.free(serializedCoinContextsPtr);
malloc.free(coverSetDataAllPtr);
if (result.address == nullptr.address) {

View File

@@ -136,8 +136,9 @@ class FlutterLibsparkmobileBindings {
int recipientsLength,
ffi.Pointer<COutputRecipient> privateRecipients,
int privateRecipientsLength,
ffi.Pointer<CCDataStream> serializedMintMetas,
int serializedMintMetasLength,
ffi.Pointer<CCDataStream> serializedCoins,
int serializedCoinsLength,
ffi.Pointer<CCDataStream> serializedCoinContexts,
ffi.Pointer<CCoverSetData> cover_set_data_all,
int cover_set_data_allLength,
) {
@@ -148,8 +149,9 @@ class FlutterLibsparkmobileBindings {
recipientsLength,
privateRecipients,
privateRecipientsLength,
serializedMintMetas,
serializedMintMetasLength,
serializedCoins,
serializedCoinsLength,
serializedCoinContexts,
cover_set_data_all,
cover_set_data_allLength,
);
@@ -166,6 +168,7 @@ class FlutterLibsparkmobileBindings {
ffi.Int,
ffi.Pointer<CCDataStream>,
ffi.Int,
ffi.Pointer<CCDataStream>,
ffi.Pointer<CCoverSetData>,
ffi.Int)>>('cCreateSparkSpendTransaction');
late final _cCreateSparkSpendTransaction =
@@ -179,6 +182,7 @@ class FlutterLibsparkmobileBindings {
int,
ffi.Pointer<CCDataStream>,
int,
ffi.Pointer<CCDataStream>,
ffi.Pointer<CCoverSetData>,
int)>();