WIP mint serial context serialization

This commit is contained in:
julian
2023-12-16 14:28:58 -06:00
parent 1574ed2e29
commit a618beb697
8 changed files with 460 additions and 0 deletions

View File

@@ -160,6 +160,28 @@ abstract final class LibSpark {
return ret;
}
static Uint8List serializeMintContext({required List<(String, int)> inputs}) {
final inputsPtr =
malloc.allocate<DartInputData>(sizeOf<DartInputData>() * inputs.length);
for (int i = 0; i < inputs.length; i++) {
final hash =
Uint8List.fromList(inputs[i].$1.to32BytesFromHex().reversed.toList());
inputsPtr[i].txHashLength = hash.length;
inputsPtr[i].txHash = hash.unsignedCharPointer();
inputsPtr[i].vout = inputs[i].$2;
}
final result = _bindings.serializeMintContext(inputsPtr, inputs.length);
final serialized = result.ref.context.toUint8List(result.ref.contextLength);
// TODO frees
return serialized;
}
///
/// Create spark mint recipients
///

View File

@@ -229,6 +229,24 @@ class FlutterLibsparkmobileBindings {
late final _selectSparkCoins = _selectSparkCoinsPtr.asFunction<
ffi.Pointer<SelectSparkCoinsResult> Function(
int, int, ffi.Pointer<CCSparkMintMeta>, int, int)>();
ffi.Pointer<SerializedMintContextResult> serializeMintContext(
ffi.Pointer<DartInputData> inputs,
int inputsLength,
) {
return _serializeMintContext(
inputs,
inputsLength,
);
}
late final _serializeMintContextPtr = _lookup<
ffi.NativeFunction<
ffi.Pointer<SerializedMintContextResult> Function(
ffi.Pointer<DartInputData>, ffi.Int)>>('serializeMintContext');
late final _serializeMintContext = _serializeMintContextPtr.asFunction<
ffi.Pointer<SerializedMintContextResult> Function(
ffi.Pointer<DartInputData>, int)>();
}
/// FFI-friendly wrapper for a spark::Coin.
@@ -539,3 +557,20 @@ final class SparkSpendTransactionResult extends ffi.Struct {
@ffi.Int()
external int isError;
}
final class DartInputData extends ffi.Struct {
external ffi.Pointer<ffi.UnsignedChar> txHash;
@ffi.Int()
external int txHashLength;
@ffi.Int()
external int vout;
}
final class SerializedMintContextResult extends ffi.Struct {
external ffi.Pointer<ffi.UnsignedChar> context;
@ffi.Int()
external int contextLength;
}