123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223 |
- import 'dart:typed_data';
- import 'package:flutter_bitcoin/flutter_bitcoin.dart' as btcWallet;
- import 'package:flutter_wallet/tools/YSNetWork.dart';
- import 'package:flutter_wallet/tools/YSSqflite.dart';
- import 'package:hex/hex.dart';
- import 'YSAes.dart';
- import 'YSTools.dart';
- import 'package:bip39/bip39.dart' as bip39;
- import 'package:bip32/bip32.dart' as bip32;
- import 'package:web3dart/crypto.dart';
- import 'package:web3dart/web3dart.dart';
- import 'package:wallet/wallet.dart' as ysWallet;
- class YSBipManager {
- static setKeystore(String keystore,String password,{bool isInto = false}) async{
- try{
- Wallet wallet = Wallet.fromJson(keystore, password);
- String privateKey = bytesToHex(wallet.privateKey.privateKey);
- YSData data = YSData();
- String word = getMnemonic();
- YSSharedPreferences.setStringValue('word', 'word');
- YSSqflite sqflite = YSSqflite().init();
- int id = 0;
- if(YSData().typeId=='TRON-HD'){
- Map tronMap = getTronCode2(privateKey);
- id = await sqflite.rawInsert(YSWalletDbData(data.name, data.password, tronMap['word'], tronMap['privateKey'], tronMap['pubicKey'],0));
- }else if(YSData().typeId=='BTC-HD'){
- Map btcMap = await getBtcCode2(privateKey);
- id = await sqflite.rawInsert(YSWalletDbData(data.name, data.password, btcMap['word'], btcMap['privateKey'], btcMap['pubicKey'],0));
- }else{
- EthereumAddress pubicKey = await getPublicAddress(privateKey);
- id = await sqflite.rawInsert(YSWalletDbData(data.name, data.password, word, privateKey, pubicKey.hexEip55,0));
- }
- return id!=0;
- }catch(e){
- ysFlutterToast('$e');
- return false;
- }
- }
- static setObserve(String address,{bool isInto = false}) async{
- try{
- String privateKey = '';
- YSData data = YSData();
- String word = getMnemonic();
- YSSharedPreferences.setStringValue('word', 'word');
- YSSqflite sqflite = YSSqflite().init();
- int id = 0;
- id = await sqflite.rawInsert(YSWalletDbData(data.name, data.password, word, privateKey, address,0));
- return id!=0;
- }catch(e){
- ysFlutterToast('$e');
- return false;
- }
- }
- static setPrivate(String privateKey,{bool isInto = false}) async{
- YSData data = YSData();
- try{
- String word = getMnemonic();
- YSSharedPreferences.setStringValue('word', 'word');
- YSSqflite sqflite = YSSqflite().init();
- int id = 0;
- if(YSData().typeId=='TRON-HD'){
- Map tronMap = getTronCode2(privateKey);
- id = await sqflite.rawInsert(YSWalletDbData(data.name, data.password, tronMap['word'], tronMap['privateKey'], tronMap['pubicKey'],0));
- }else if(YSData().typeId=='BTC-HD'){
- Map btcMap = await getBtcCode2(privateKey);
- id = await sqflite.rawInsert(YSWalletDbData(data.name, data.password, btcMap['word'], btcMap['privateKey'], btcMap['pubicKey'],0));
- }else{
- EthereumAddress pubicKey = await getPublicAddress(privateKey);
- id = await sqflite.rawInsert(YSWalletDbData(data.name, data.password, word, privateKey, pubicKey.hexEip55,0));
- }
- return id!=0;
- }catch(e){
- LogUtil.d(e);
- return false;
- }
- }
- static Future<bool> setMnemonic(String word,{bool isInto = false}) async{
- YSData data = YSData();
- try{
- YSSharedPreferences.setStringValue('word', word);
- bool isFirst = await YSSharedPreferences.getBoolValue('isFirst')??true;
- int id = 0;
- if(isFirst&&isInto==false){
- // id = 1;
- for (var element in YSData().typeArray) {
- String name = '${element['name']}'.replaceAll('-', '').replaceAll(' ', '');
- LogUtil.d(name);
- YSSqflite sqflite = YSSqflite().init(name: name);
- if(element['id']=='TRON-HD'){
- Map tronMap = getTronCode(word);
- if(tronMap.isNotEmpty)sqflite.rawInsert(YSWalletDbData(data.name, data.password, tronMap['word'], tronMap['privateKey'], tronMap['pubicKey'],0),name: name);
- }else if(element['id']=='BTC-HD'){
- Map btcMap = await getBtcCode(word);
- if(btcMap.isNotEmpty)sqflite.rawInsert(YSWalletDbData(data.name, data.password, btcMap['word'], btcMap['privateKey'], btcMap['pubicKey'],0),name: name);
- }else{
- String privateKey = getPrivateKey(word);
- EthereumAddress pubicKey = await getPublicAddress(privateKey);
- id = await sqflite.rawInsert(YSWalletDbData(data.name, data.password, word, privateKey, pubicKey.hexEip55,0),name: name);
- }
- }
- YSSharedPreferences.setBoolValue('isFirst', false);
- }else{
- LogUtil.d('obj2');
- YSSqflite sqflite = YSSqflite().init();
- if(YSData().typeId=='TRON-HD'){
- Map tronMap = getTronCode(word);
- id = await sqflite.rawInsert(YSWalletDbData(data.name, data.password, tronMap['word'], tronMap['privateKey'], tronMap['pubicKey'],0));
- }else if(YSData().typeId=='BTC-HD'){
- Map btcMap = await getBtcCode(word);
- sqflite.rawInsert(YSWalletDbData(data.name, data.password, btcMap['word'], btcMap['privateKey'], btcMap['pubicKey'],0));
- }else{
- String privateKey = getPrivateKey(word);
- EthereumAddress pubicKey = await getPublicAddress(privateKey);
- id = await sqflite.rawInsert(YSWalletDbData(data.name, data.password, word, privateKey, pubicKey.hexEip55,0));
- }
- }
- return id!=0;
- }catch(e){
- LogUtil.d(e);
- return false;
- }
- }
- static String getMnemonic() {
- String randomMnemonic = bip39.generateMnemonic();
- LogUtil.d(randomMnemonic);
- return randomMnemonic;
- }
- static bool checkMnemonic(String mnemonic) {
- return bip39.validateMnemonic(mnemonic);
- }
- static String getPrivateKey(String mnemonic) {
- final seed = bip39.mnemonicToSeed(mnemonic);
- final root = bip32.BIP32.fromSeed(seed);
- final child1 = root.derivePath("m/44'/60'/0'/0/0");
- String hex = bytesToHex(child1.privateKey!.toList());
- LogUtil.d(hex);
- return hex;
- }
- static Future<EthereumAddress> getPublicAddress(String privateKey) async {
- final private = EthPrivateKey.fromHex(privateKey);
- final address = private.address;
- LogUtil.d(address);
- return address;
- }
- static Map getTronCode(String mnemonic) {
- const passphrase = '';
- final seed = ysWallet.mnemonicToSeed(mnemonic.split(' '), passphrase: passphrase);
- final master = ysWallet.ExtendedPrivateKey.master(seed, ysWallet.xprv);
- final root = master.forPath("m/44'/195'/0'/0/0");
- final privateKey = ysWallet.PrivateKey((root as ysWallet.ExtendedPrivateKey).key);
- final publicKey = ysWallet.tron.createPublicKey(privateKey);
- final address = ysWallet.tron.createAddress(publicKey);
- return {'word':mnemonic,'privateKey':privateKey.value.toRadixString(16),'pubicKey':address};
- }
- static Map getTronCode2(String private16) {
- String word = getMnemonic();
- word = '$word ysssss';
- final privateKey = ysWallet.PrivateKey(BigInt.parse(private16, radix: 16));
- final publicKey = ysWallet.tron.createPublicKey(privateKey);
- final address = ysWallet.tron.createAddress(publicKey);
- return {'word':word,'privateKey':private16,'pubicKey':address};
- }
- // static Future<Map> getBtcCode(String mnemonic) async{
- // String seed = bip39.mnemonicToSeedHex(mnemonic);
- // bip32.BIP32 root = bip32.BIP32.fromSeed(Uint8List.fromList(HEX.decode(seed)));
- //
- // btcWallet.ECPair keyPair = btcWallet.ECPair.fromPrivateKey(root.privateKey!);
- // String private = keyPair.toWIF();
- // String privateS = YSAes.aesEncode3('${private}_${DateTime.now().microsecond}');
- // Map dict = await YSNetWork.httpNetwork(api: 'bitconinp2sh', request: {'prikey':privateS});
- // if(dict.isNotEmpty){
- // String address = dict['data']??'';
- // return {'word':mnemonic,'privateKey':private,'pubicKey':address};
- // }else{
- // return {};
- // }
- // }
- static Future<Map> getBtcCode(String mnemonic) async{
- const passphrase = '';
- final seed = ysWallet.mnemonicToSeed(mnemonic.split(' '), passphrase: passphrase);
- final master = ysWallet.ExtendedPrivateKey.master(seed, ysWallet.xprv);
- final root = master.forPath("m/49'/0'/0'/0/0");
- btcWallet.ECPair keyPair = btcWallet.ECPair.fromPrivateKey(HEX.decode((root as ysWallet.ExtendedPrivateKey).key.toRadixString(16)) as Uint8List);
- String private = keyPair.toWIF();
- String privateS = YSAes.aesEncode3('${private}_${DateTime.now().microsecond}');
- Map dict = await YSNetWork.httpNetwork(api: 'bitconinp2sh', request: {'prikey':privateS});
- if(dict.isNotEmpty){
- String address = dict['data']??'';
- // LogUtil.d('getBtcCode=======$dict');
- // return {};
- return {'word':mnemonic,'privateKey':private,'pubicKey':address};
- }else{
- return {};
- }
- }
- static Future<Map> getBtcCode2(String private) async{
- String word = getMnemonic();
- word = '$word ysssss';
- String privateS = YSAes.aesEncode3('${private}_${DateTime.now().microsecond}');
- Map dict = await YSNetWork.httpNetwork(api: 'bitconinp2sh', request: {'prikey':privateS});
- if(dict.isNotEmpty){
- String address = dict['data']??'';
- return {'word':word,'privateKey':private,'pubicKey':address};
- }else{
- return {};
- }
- }
- }
|