Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 69 additions & 2 deletions packages/transaction_signing_gateway/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,70 @@
## [0.0.1] - TODO: Add release date.
## Breaking changes after 2.0.3

* TODO: Describe initial release.
### The following classes & properties have been refactored (`OldClassName` -> `NewClassName`)
#### `Alan` related classes
* `AlanWalletDerivationInfo` -> `AlanAccountDerivationInfo`
* `walletAlias` property refactored to `accountAlias`
* `AlanWalletDerivator` -> `AlanAccountDerivator`
* `AlanPrivateWalletCredentials` -> `AlanPrivateAccountCredentials`

#### Models
* `WalletDerivationFailure` -> `AccountDerivationFailure`
* `WalletLookupKey` -> `AccountLookupKey`
* `walletId` property refactored to `accountId`
* `WalletPublicInfo` -> `AccountPublicInfo`
* `walletId` property refactored to `accountId`
* `WalletPublicInfoSerializer` -> `AccountPublicInfoSerializer`

#### Abstractions
* `WalletDerivator` -> `AccountDerivator`
* `WalletDerivationInfo` -> `AccountDerivationInfo`
* `PrivateWalletCredentials` -> `PrivateAccountCredentials`
* `PrivateWalletCredentialsSerializer` -> `PrivateAccountCredentialsSerializer`

## 2.0.3 - 2021-01-27

### Fixed
* Paste button not enabling the continue button on asset transfer page
* Fees token denom is always AKT
* Ruby setup for deployment scripts in Github Actions

## 2.0.2 - 2022-01-25

### Added
* Security screen to enable app lock and biometrics
### Fixed
* Bug fixes and minor improvements

## [2.0.1](https://github.com/tendermint/flutter/compare/v2.0.0...v2.0.1) - 2021-12-17

### Fixed
* Library references in Ignite template

## 2.0.0 - 2021-12-17

### Changed
* Major design revamp for Ignite template

## 1.0.2 - 2021-09-20

### Fixed
* Fix go proxy cache

## 1.0.1 - 2021-08-21

### Added
* Support for dark theme
### Changed
* Minimum Android SDK version to 18

### Fixed
* Minor bug fixes

## 1.0.0 - 2021-08-17

* Initial version of Ignite template

## 0.1.0 - 2021-08-03

* Export ignite template as a Go module
* TODO: Add more from the first release
23 changes: 23 additions & 0 deletions packages/transaction_signing_gateway/lib/account_derivator.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import 'package:dartz/dartz.dart';
import 'package:transaction_signing_gateway/model/account_derivation_failure.dart';
import 'package:transaction_signing_gateway/model/account_derivation_info.dart';
import 'package:transaction_signing_gateway/model/private_account_credentials.dart';

abstract class AccountDerivator {
Future<Either<AccountDerivationFailure, PrivateAccountCredentials>> derive({
required AccountDerivationInfo accountDerivationInfo,
});

bool canDerive(AccountDerivationInfo accountDerivationInfo);
}

class NotFoundDerivator implements AccountDerivator {
@override
bool canDerive(AccountDerivationInfo accountDerivationInfo) => true;

@override
Future<Either<AccountDerivationFailure, PrivateAccountCredentials>> derive({
required AccountDerivationInfo accountDerivationInfo,
}) async =>
left(const DerivatorNotFoundFailure());
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import 'package:alan/wallet/network_info.dart';
import 'package:transaction_signing_gateway/model/account_derivation_info.dart';

class AlanAccountDerivationInfo implements AccountDerivationInfo {
AlanAccountDerivationInfo({
required this.chainId,
required this.accountAlias,
required this.networkInfo,
required this.mnemonic,
});

final String mnemonic;
final String chainId;
final String accountAlias;

final NetworkInfo networkInfo;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import 'package:alan/alan.dart' as alan;
import 'package:dartz/dartz.dart';
import 'package:flutter/foundation.dart';
import 'package:transaction_signing_gateway/account_derivator.dart';
import 'package:transaction_signing_gateway/alan/alan_account_derivation_info.dart';
import 'package:transaction_signing_gateway/alan/alan_private_account_credentials.dart';
import 'package:transaction_signing_gateway/model/account_derivation_failure.dart';
import 'package:transaction_signing_gateway/model/account_derivation_info.dart';
import 'package:transaction_signing_gateway/model/account_public_info.dart';
import 'package:transaction_signing_gateway/model/private_account_credentials.dart';
import 'package:uuid/uuid.dart';

class AlanAccountDerivator implements AccountDerivator {
@override
Future<Either<AccountDerivationFailure, PrivateAccountCredentials>> derive({
required AccountDerivationInfo accountDerivationInfo,
}) async {
try {
final alanAccountDerivationInfo = accountDerivationInfo as AlanAccountDerivationInfo;
final account = await compute(_deriveAccountSync, alanAccountDerivationInfo);
return right(
AlanPrivateAccountCredentials(
publicInfo: AccountPublicInfo(
chainId: alanAccountDerivationInfo.chainId,
accountId: const Uuid().v4(),
name: alanAccountDerivationInfo.accountAlias,
publicAddress: account.bech32Address,
),
mnemonic: alanAccountDerivationInfo.mnemonic,
),
);
} catch (ex) {
return left(InvalidMnemonicFailure(ex.toString()));
}
}

@override
bool canDerive(AccountDerivationInfo accountDerivationInfo) => accountDerivationInfo is AlanAccountDerivationInfo;
}

alan.Wallet _deriveAccountSync(AlanAccountDerivationInfo derivationInfo) => alan.Wallet.derive(
derivationInfo.mnemonic.split(' '),
derivationInfo.networkInfo,
);
Original file line number Diff line number Diff line change
@@ -1,56 +1,56 @@
import 'package:cosmos_utils/cosmos_utils.dart';
import 'package:dartz/dartz.dart';
import 'package:flutter/foundation.dart';
import 'package:transaction_signing_gateway/alan/alan_private_wallet_credentials.dart';
import 'package:transaction_signing_gateway/model/private_wallet_credentials.dart';
import 'package:transaction_signing_gateway/model/private_wallet_credentials_serializer.dart';
import 'package:transaction_signing_gateway/model/wallet_public_info.dart';
import 'package:transaction_signing_gateway/alan/alan_private_account_credentials.dart';
import 'package:transaction_signing_gateway/model/account_public_info.dart';
import 'package:transaction_signing_gateway/model/private_account_credentials.dart';
import 'package:transaction_signing_gateway/model/private_account_credentials_serializer.dart';

class AlanCredentialsSerializer implements PrivateWalletCredentialsSerializer {
class AlanCredentialsSerializer implements PrivateAccountCredentialsSerializer {
static const id = 'AlanCredentialsSerializer';

static const _chainIdKey = 'chain_id';
static const _mnemonicKey = 'mnemonic';
static const _walletIdKey = 'walletId';
static const _accountIdKey = 'accountId';

static const _nameKey = 'name';
static const _publicAddressKey = 'publicAddress';

@override
Either<CredentialsStorageFailure, PrivateWalletCredentials> fromJson(Map<String, dynamic> json) {
Either<CredentialsStorageFailure, PrivateAccountCredentials> fromJson(Map<String, dynamic> json) {
try {
return right(
AlanPrivateWalletCredentials(
AlanPrivateAccountCredentials(
mnemonic: json[_mnemonicKey] as String? ?? '',
publicInfo: WalletPublicInfo(
publicInfo: AccountPublicInfo(
name: json[_nameKey] as String? ?? '',
publicAddress: json[_publicAddressKey] as String? ?? '',
walletId: json[_walletIdKey] as String? ?? '',
accountId: json[_accountIdKey] as String? ?? '',
chainId: json[_chainIdKey] as String? ?? '',
),
),
);
} catch (e, stack) {
debugPrint('$e\n$stack');
return left(CredentialsStorageFailure('Could not parse wallet credentials: $e'));
return left(CredentialsStorageFailure('Could not parse account credentials: $e'));
}
}

@override
String get identifier => id;

@override
Either<CredentialsStorageFailure, Map<String, dynamic>> toJson(PrivateWalletCredentials credentials) {
if (credentials is! AlanPrivateWalletCredentials) {
Either<CredentialsStorageFailure, Map<String, dynamic>> toJson(PrivateAccountCredentials credentials) {
if (credentials is! AlanPrivateAccountCredentials) {
return left(
CredentialsStorageFailure(
'Passed credentials are not of type $AlanPrivateWalletCredentials. actual: $credentials',
'Passed credentials are not of type $AlanPrivateAccountCredentials. actual: $credentials',
),
);
}
return right({
_chainIdKey: credentials.publicInfo.chainId,
_walletIdKey: credentials.publicInfo.walletId,
_accountIdKey: credentials.publicInfo.accountId,
_publicAddressKey: credentials.publicInfo.publicAddress,
_nameKey: credentials.publicInfo.name,
_mnemonicKey: credentials.mnemonic,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import 'package:alan/alan.dart' as alan;
import 'package:equatable/equatable.dart';
import 'package:transaction_signing_gateway/alan/alan_credentials_serializer.dart';
import 'package:transaction_signing_gateway/model/private_wallet_credentials.dart';
import 'package:transaction_signing_gateway/model/wallet_public_info.dart';
import 'package:transaction_signing_gateway/model/account_public_info.dart';
import 'package:transaction_signing_gateway/model/private_account_credentials.dart';

class AlanPrivateWalletCredentials extends Equatable implements PrivateWalletCredentials {
const AlanPrivateWalletCredentials({
class AlanPrivateAccountCredentials extends Equatable implements PrivateAccountCredentials {
const AlanPrivateAccountCredentials({
required this.mnemonic,
required this.publicInfo,
});
Expand All @@ -14,9 +14,9 @@ class AlanPrivateWalletCredentials extends Equatable implements PrivateWalletCre
final String mnemonic;

@override
final WalletPublicInfo publicInfo;
final AccountPublicInfo publicInfo;

alan.Wallet alanWallet(alan.NetworkInfo networkInfo) => alan.Wallet.derive(
alan.Wallet alanAccount(alan.NetworkInfo networkInfo) => alan.Wallet.derive(
mnemonic.split(' '),
networkInfo,
);
Expand All @@ -30,11 +30,11 @@ class AlanPrivateWalletCredentials extends Equatable implements PrivateWalletCre
mnemonic,
];

AlanPrivateWalletCredentials copyWith({
AlanPrivateAccountCredentials copyWith({
String? mnemonic,
WalletPublicInfo? publicInfo,
AccountPublicInfo? publicInfo,
}) {
return AlanPrivateWalletCredentials(
return AlanPrivateAccountCredentials(
mnemonic: mnemonic ?? this.mnemonic,
publicInfo: publicInfo ?? this.publicInfo,
);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import 'package:alan/alan.dart';
import 'package:dartz/dartz.dart';
import 'package:transaction_signing_gateway/alan/alan_private_wallet_credentials.dart';
import 'package:transaction_signing_gateway/alan/alan_private_account_credentials.dart';
import 'package:transaction_signing_gateway/alan/alan_transaction.dart';
import 'package:transaction_signing_gateway/model/private_wallet_credentials.dart';
import 'package:transaction_signing_gateway/model/private_account_credentials.dart';
import 'package:transaction_signing_gateway/model/signed_transaction.dart';
import 'package:transaction_signing_gateway/model/transaction_broadcasting_failure.dart';
import 'package:transaction_signing_gateway/model/transaction_hash.dart';
Expand All @@ -16,13 +16,15 @@ class AlanTransactionBroadcaster implements TransactionBroadcaster {
@override
Future<Either<TransactionBroadcastingFailure, TransactionHash>> broadcast({
required SignedTransaction transaction,
required PrivateWalletCredentials privateWalletCredentials,
required PrivateAccountCredentials privateAccountCredentials,
}) async {
if (transaction is! SignedAlanTransaction) {
return left(AlanTransactionBroadcastingFailure('passed transaction is not $SignedAlanTransaction'));
}
if (privateWalletCredentials is! AlanPrivateWalletCredentials) {
return left(AlanTransactionBroadcastingFailure('passed privateCredentials is not $AlanPrivateWalletCredentials'));
if (privateAccountCredentials is! AlanPrivateAccountCredentials) {
return left(
AlanTransactionBroadcastingFailure('passed privateCredentials is not $AlanPrivateAccountCredentials'),
);
}
final txSender = TxSender.fromNetworkInfo(_networkInfo);
final response =
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import 'package:alan/alan.dart';
import 'package:dartz/dartz.dart';
import 'package:flutter/foundation.dart';
import 'package:transaction_signing_gateway/alan/alan_private_wallet_credentials.dart';
import 'package:transaction_signing_gateway/alan/alan_private_account_credentials.dart';
import 'package:transaction_signing_gateway/alan/alan_transaction.dart';
import 'package:transaction_signing_gateway/model/private_wallet_credentials.dart';
import 'package:transaction_signing_gateway/model/private_account_credentials.dart';
import 'package:transaction_signing_gateway/model/signed_transaction.dart';
import 'package:transaction_signing_gateway/model/transaction_signing_failure.dart';
import 'package:transaction_signing_gateway/model/unsigned_transaction.dart';
Expand All @@ -19,20 +19,20 @@ class AlanTransactionSigner implements TransactionSigner {

@override
Future<Either<TransactionSigningFailure, SignedTransaction>> sign({
required PrivateWalletCredentials privateCredentials,
required PrivateAccountCredentials privateCredentials,
required UnsignedTransaction transaction,
}) async {
if (transaction is! UnsignedAlanTransaction) {
return left(AlanTransactionSigningFailure('passed transaction is not $UnsignedAlanTransaction'));
}
if (privateCredentials is! AlanPrivateWalletCredentials) {
return left(AlanTransactionSigningFailure('passed privateCredentials is not $AlanPrivateWalletCredentials'));
if (privateCredentials is! AlanPrivateAccountCredentials) {
return left(AlanTransactionSigningFailure('passed privateCredentials is not $AlanPrivateAccountCredentials'));
}

try {
final signer = TxSigner.fromNetworkInfo(_networkInfo);
final signedTrans = await signer.createAndSign(
privateCredentials.alanWallet(_networkInfo),
privateCredentials.alanAccount(_networkInfo),
transaction.messages,
memo: transaction.memo,
fee: transaction.fee,
Expand Down

This file was deleted.

Loading