Added p2sh address to output script.
M committed
Dec 8, 2020 at 23:47 UTC
43e602b71ec17eb833405a4494f5768419e17a56
3 files changed
+28
-2
lib/bitcoin/address_to_output_script.dart
new
+25
@@ -0,0 +1,25 @@
1
+import 'dart:typed_data';
2
+import 'package:bs58check/bs58check.dart' as bs58check;
3
+import 'package:bitcoin_flutter/src/utils/constants/op.dart';
4
+import 'package:bitcoin_flutter/src/utils/script.dart' as bscript;
5
+import 'package:bitcoin_flutter/src/address.dart';
6
+
7
+
8
+Uint8List p2shAddressToOutputScript(String address) {
9
+ final decodeBase58 = bs58check.decode(address);
10
+ final hash = decodeBase58.sublist(1);
11
+ return bscript.compile(<dynamic>[OPS['OP_HASH160'], hash, OPS['OP_EQUAL']]);
12
+}
13
+
14
+Uint8List addressToOutputScript(String address) {
15
+ try {
16
+ // FIXME: improve validation for p2sh addresses
17
+ if (address.startsWith('3')) {
18
+ return p2shAddressToOutputScript(address);
19
+ }
20
+
21
+ return Address.addressToOutputScript(address);
22
+ } catch (_) {
23
+ return Uint8List(0);
24
+ }
25
+}
\ No newline at end of file
lib/bitcoin/bitcoin_wallet.dart
+3
-1
@@ -1,5 +1,6 @@
1
import 'dart:async';
2
import 'dart:convert';
3
+import 'package:cake_wallet/bitcoin/address_to_output_script.dart';
4
import 'package:cake_wallet/bitcoin/bitcoin_mnemonic.dart';
5
import 'package:mobx/mobx.dart';
6
import 'package:flutter/foundation.dart';
@@ -302,7 +303,8 @@ abstract class BitcoinWalletBase extends WalletBase<BitcoinBalance> with Store {
303
}
304
});
305
305
- txb.addOutput(transactionCredentials.address, amount);
306
+ txb.addOutput(
307
+ addressToOutputScript(transactionCredentials.address), amount);
308
309
if (changeValue > 0) {
310
txb.addOutput(changeAddress, changeValue);
lib/main.dart
-1
@@ -1,4 +1,3 @@
1
-import 'package:cake_wallet/bitcoin/bitcoin_mnemonic.dart';
1
import 'package:flutter/material.dart';
2
import 'package:flutter/services.dart';
3
import 'package:hive/hive.dart';