Skip to content

Commit 5aab919

Browse files
committed
Add DLCStatefulBuilder to create CETs and RT
1 parent c9559ec commit 5aab919

File tree

12 files changed

+1024
-93
lines changed

12 files changed

+1024
-93
lines changed

coinlib/lib/src/coinlib_base.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,11 @@ export 'package:coinlib/src/crypto/random.dart';
1717
export 'package:coinlib/src/crypto/schnorr_adaptor_signature.dart';
1818
export 'package:coinlib/src/crypto/schnorr_signature.dart';
1919

20+
export 'package:coinlib/src/dlc/builder.dart';
21+
export 'package:coinlib/src/dlc/create_apo_transaction.dart';
2022
export 'package:coinlib/src/dlc/errors.dart';
2123
export 'package:coinlib/src/dlc/outcome.dart';
24+
export 'package:coinlib/src/dlc/ready.dart';
2225
export 'package:coinlib/src/dlc/terms.dart';
2326

2427
export 'package:coinlib/src/encode/base58.dart';

coinlib/lib/src/common/serial.dart

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
import 'dart:typed_data';
2+
import 'package:coinlib/src/common/bytes.dart';
23
import 'package:coinlib/src/common/hex.dart';
4+
import 'package:coinlib/src/crypto/ec_public_key.dart';
35
import 'package:coinlib/src/tx/locktime.dart';
6+
import 'package:collection/collection.dart';
47
import 'checks.dart';
58

69
/// Thrown when attempting to read or write beyond the boundary of data
@@ -96,6 +99,17 @@ class BytesReader extends _ReadWriteBase {
9699

97100
Locktime readLocktime() => Locktime(readUInt32());
98101

102+
Map<ECPublicKey, T> readXPubKeyMap<T>(T Function() readValue)
103+
=> Map.fromEntries(
104+
Iterable.generate(
105+
readVarInt().toInt(),
106+
(_) => MapEntry(
107+
ECPublicKey.fromXOnly(readSlice(32)),
108+
readValue(),
109+
),
110+
),
111+
);
112+
99113
}
100114

101115
/// Methods to handle the writing of data
@@ -144,6 +158,24 @@ mixin Writer {
144158

145159
void writeLocktime(Locktime locktime) => writeUInt32(locktime.value);
146160

161+
void writeOrderedXPubkeyMap<T>(
162+
Map<ECPublicKey, T> map,
163+
void Function(T) writeValue,
164+
) {
165+
166+
writeVarInt(BigInt.from(map.length));
167+
168+
final orderedEntries = map.entries
169+
.map((entry) => MapEntry(entry.key.x, entry.value))
170+
.sortedByCompare((entry) => entry.key, compareBytes);
171+
172+
for (final entry in orderedEntries) {
173+
writeSlice(entry.key);
174+
writeValue(entry.value);
175+
}
176+
177+
}
178+
147179
}
148180

149181
/// Writes serialized data to a Uint8List. Throws an [OutOfData] exception if

0 commit comments

Comments
 (0)