Line data Source code
1 : import 'dart:typed_data';
2 : import 'package:walletkit_dart/src/crypto/utxo/utils/pubkey_to_address.dart';
3 : import 'package:walletkit_dart/src/crypto/utxo/utils/ecurve.dart';
4 : import 'package:walletkit_dart/src/utils/base58.dart';
5 : import 'package:walletkit_dart/src/utils/keccak.dart';
6 : import 'package:walletkit_dart/walletkit_dart.dart';
7 :
8 : extension BIP32Extension on BipNode {
9 3 : Uint8List get publicKeyUncompressed {
10 3 : if (privateKey == null) {
11 0 : throw UnsupportedError("privateKey is null");
12 : }
13 6 : return pointFromScalar(privateKey!, false)!;
14 : }
15 : }
16 :
17 1 : String uncompressedPublicKeyToAddress(Uint8List publicKey, int prefix) {
18 1 : final addressInput = publicKey.sublist(1);
19 1 : final publicKeyHash = keccak256(addressInput);
20 1 : final addressBuffer = publicKeyHash.sublist(12);
21 1 : final addressBase58 = base58CheckEncode(prefix, addressBuffer);
22 : return addressBase58;
23 : }
24 :
25 1 : AddressError? validateTronAddress({required String address}) {
26 4 : if (address.trim().length != address.length) return AddressError.WHITESPACE;
27 :
28 2 : if (address.length != 34) return AddressError.INVALID;
29 1 : if (!address.startsWith("T")) return AddressError.INVALID;
30 :
31 : try {
32 1 : final bytes = base58CheckDecodeWithVersion(address);
33 2 : if (bytes.length != 21) return AddressError.INVALID;
34 : return null;
35 : } catch (e) {
36 : return AddressError.INVALID_CHECKSUM;
37 : }
38 : }
39 :
40 2 : String base58ToEVM(String base58, [bool withPrefix = true]) {
41 2 : final bytes = base58CheckDecode(base58);
42 6 : return "${withPrefix ? "0x" : ""}${bytes.toHex.toLowerCase()}";
43 : }
44 :
45 1 : String base58FromEVM(String evmAddress) {
46 1 : final bytes = evmAddress.hexToBytesWithPrefix;
47 1 : return base58CheckEncode(TRON_ADDRESS_PREFIX, bytes);
48 : }
49 :
50 : // String base58CheckToHex(String base58) {
51 : // final bytes = base58CheckDecode(base58);
52 :
53 : // return bytes.sublist(0, bytes.length - 4).toHex;
54 : // }
55 :
56 3 : Uint8List base58ToHex(String base58) {
57 3 : final bytes = base58Decode(base58);
58 :
59 : return bytes;
60 : }
61 :
62 3 : String base58CheckFromHex(Uint8List input) {
63 3 : final hash0 = sha256Hash(input);
64 3 : final hash1 = sha256Hash(hash0);
65 :
66 3 : final checksum = hash1.sublist(0, 4);
67 9 : final bytesWithChecksum = Uint8List.fromList([...input, ...checksum]);
68 :
69 3 : return base58Encode(bytesWithChecksum);
70 : }
|