Skip to content

add stellar client #15

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 76 commits into from
Aug 21, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
76 commits
Select commit Hold shift + click to select a range
9e7e24b
add stellar client
AlaaElattar Apr 16, 2024
f4906ee
use switch on network type instead of if condition
AlaaElattar Apr 17, 2024
e042b14
Merge branch 'main' of https://github.com/codescalers/tfgrid-sdk-dart…
AlaaElattar Aug 6, 2024
34f4610
fix workflow
AlaaElattar Aug 6, 2024
9efdb8a
fix coverage workflow
AlaaElattar Aug 6, 2024
aeedf47
fix sdk version
AlaaElattar Aug 6, 2024
0265a5b
specify dart version in workflow
AlaaElattar Aug 6, 2024
557570a
return version to stable
AlaaElattar Aug 6, 2024
2df5c8b
change version to 3.4.4
AlaaElattar Aug 6, 2024
775dbc7
change version to 3.4.4.
AlaaElattar Aug 6, 2024
e1c664d
undo changes of coverage workflow
AlaaElattar Aug 6, 2024
65cf67d
update client && support listing transactions && loading from secretSeed
AlaaElattar Aug 11, 2024
100c485
update listing transaction && apply dart format
AlaaElattar Aug 12, 2024
f75f46d
update sendTransaction function
AlaaElattar Aug 12, 2024
87a4655
specify dart version to fix workflow
AlaaElattar Aug 13, 2024
0a192ec
comment setup dart sdk part
AlaaElattar Aug 13, 2024
aa4808e
Merge branch 'main' of https://github.com/codescalers/tfgrid-sdk-dart…
AlaaElattar Aug 13, 2024
ff97ddd
undo coverage changes
AlaaElattar Aug 13, 2024
4a34f3d
add readme && fix workflow
AlaaElattar Aug 15, 2024
4444c57
clear cache
AlaaElattar Aug 15, 2024
bd790cc
verify dart version
AlaaElattar Aug 15, 2024
3263fe5
debug what's wrong with versions
AlaaElattar Aug 15, 2024
826999d
debug what's wrong with versions
AlaaElattar Aug 15, 2024
3ddae2f
update sdk version of stellar
AlaaElattar Aug 15, 2024
48c663e
run melos with specific sdk
AlaaElattar Aug 15, 2024
d7a0f73
debug version of melos
AlaaElattar Aug 15, 2024
77c20cd
separate dependencies of dart from flutter ones
AlaaElattar Aug 15, 2024
f83fb7a
exclude stellar client from melos unit tests7
AlaaElattar Aug 15, 2024
aa68935
exclude stellar client from melos unit tests
AlaaElattar Aug 15, 2024
8eecd65
fix excluding stellar client
AlaaElattar Aug 15, 2024
757f285
remove test dir from stellar
AlaaElattar Aug 15, 2024
99a00d8
add flutter setup in coverage
AlaaElattar Aug 15, 2024
fa7b4c6
add flutter setup in coverage
AlaaElattar Aug 15, 2024
b78f06c
setting flutter after dart version
AlaaElattar Aug 15, 2024
359a3d6
remove verify melos
AlaaElattar Aug 15, 2024
e96e39a
export dart path
AlaaElattar Aug 15, 2024
cca5bc3
update flutter version
AlaaElattar Aug 15, 2024
511768c
Delete .vscode/settings.json
AlaaElattar Aug 15, 2024
c87f951
Delete melos_tfgrid_sdk_dart_monorepo.iml
AlaaElattar Aug 15, 2024
37cbb21
Delete packages/tfchain_client/pubspec_overrides.yaml
AlaaElattar Aug 15, 2024
eec522b
Delete packages/signer/coverage/lcov.info
AlaaElattar Aug 15, 2024
c61be1f
Delete packages/tfchain_client/coverage/filtered.lcov.info
AlaaElattar Aug 15, 2024
51709ba
Delete packages/tfchain_client/coverage/result.txt
AlaaElattar Aug 15, 2024
701bdda
Delete packages/tfchain_client/coverage/lcov.info
AlaaElattar Aug 15, 2024
94fc0d7
remove models && rename the file && prepare main file with example
AlaaElattar Aug 15, 2024
4495b2c
Delete packages/tfchain_client/.dart_tool/package_config.json
AlaaElattar Aug 15, 2024
f9a52d4
Delete packages/zos/.dart_tool/package_config.json
AlaaElattar Aug 15, 2024
758be0f
Delete packages/zos/pubspec.lock
AlaaElattar Aug 15, 2024
204485f
Delete packages/rmb_client/.dart_tool/package_config.json
AlaaElattar Aug 15, 2024
4debc34
Delete packages/rmb_client/pubspec.lock
AlaaElattar Aug 15, 2024
4a4ca4f
remove bin files
AlaaElattar Aug 15, 2024
a550724
return .dart_tool in gitignore
AlaaElattar Aug 15, 2024
d5403f3
Delete .dart_tool/package_config.json
AlaaElattar Aug 15, 2024
ea50510
remove tfchain files
AlaaElattar Aug 15, 2024
e1a8fdc
return .dart_tool in gitignore
AlaaElattar Aug 15, 2024
62da5c0
fix dart version
AlaaElattar Aug 18, 2024
7a738fc
fix dart version
AlaaElattar Aug 18, 2024
aaf5e67
change dart version to 3.2.0
AlaaElattar Aug 18, 2024
8d401b1
update dart version in tfchian
AlaaElattar Aug 18, 2024
c6cdf86
add listing files in coverage workflow
AlaaElattar Aug 18, 2024
4c7627c
run flutter pub get in stellar directory
AlaaElattar Aug 18, 2024
df32829
change flutter version to 3.16
AlaaElattar Aug 18, 2024
e3a0274
change flutter, dart versions && update client constructors && fix wo…
AlaaElattar Aug 19, 2024
c9932eb
update analyze command
AlaaElattar Aug 19, 2024
43aec2a
fix renaming of activation functions
AlaaElattar Aug 19, 2024
bd3b287
remove network coditions and add it as param
AlaaElattar Aug 20, 2024
36446a4
change createAccountFromSecret to be activation only
AlaaElattar Aug 20, 2024
d20acde
check workflow
AlaaElattar Aug 20, 2024
eac5ee7
add setup flutter in analyze workflow
AlaaElattar Aug 20, 2024
53bd1b1
remove unnecessary null assertion
AlaaElattar Aug 20, 2024
ed83a3c
remove spaces
AlaaElattar Aug 20, 2024
90e955e
fix bug
AlaaElattar Aug 20, 2024
b3637b0
apply comments
AlaaElattar Aug 21, 2024
282b488
update readme file and bin file
AlaaElattar Aug 21, 2024
fd4129f
modify 2 sentences in readme
AlaaElattar Aug 21, 2024
2c3f378
modify example
AlaaElattar Aug 21, 2024
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
6 changes: 5 additions & 1 deletion .github/workflows/analyze.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,11 @@ jobs:
- name: Setup Dart SDK
uses: dart-lang/setup-dart@v1.6.0
with:
sdk: "stable"
sdk: "3.2.3"
- name: Setup Flutter
uses: subosito/flutter-action@v2
with:
flutter-version: "3.16.4"
- name: Install Melos
run: dart pub global activate melos

Expand Down
8 changes: 3 additions & 5 deletions .github/workflows/coverage.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,18 +15,17 @@ jobs:
steps:
- name: Set up Repository
uses: actions/checkout@v2

- name: List Files
run: ls -R

- name: Setup Dart SDK
uses: dart-lang/setup-dart@v1.6.0
with:
sdk: "stable"
sdk: "3.2.3"
- name: Setup Flutter
uses: subosito/flutter-action@v2
with:
flutter-version: "3.16.0"
flutter-version: "3.16.4"

- name: Install Melos
run: dart pub global activate melos
Expand All @@ -37,13 +36,12 @@ jobs:
- name: Start TFChain Docker Container
run: |
sudo docker run -d --network host ghcr.io/threefoldtech/tfchain --dev --rpc-cors all --rpc-external --rpc-methods=safe

- name: Wait for TFChain to be ready
run: |
while ! nc -z localhost 9944; do
echo "Waiting for TFChain to be ready..."
sleep 5
done
done

- name: Run unit tests and generate coverage
run: |
Expand Down
18 changes: 9 additions & 9 deletions packages/signer/pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -133,10 +133,10 @@ packages:
dependency: transitive
description:
name: ffi
sha256: "493f37e7df1804778ff3a53bd691d8692ddf69702cf4c1c1096a2e41b4779e21"
sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878"
url: "https://pub.dev"
source: hosted
version: "2.1.2"
version: "2.1.0"
file:
dependency: transitive
description:
Expand Down Expand Up @@ -517,10 +517,10 @@ packages:
dependency: transitive
description:
name: vm_service
sha256: a75f83f14ad81d5fe4b3319710b90dec37da0e22612326b696c9e1b8f34bbf48
sha256: a2662fb1f114f4296cf3f5a50786a2d888268d7776cf681aa17d660ffa23b246
url: "https://pub.dev"
source: hosted
version: "14.2.0"
version: "14.0.0"
watcher:
dependency: transitive
description:
Expand All @@ -533,18 +533,18 @@ packages:
dependency: transitive
description:
name: web
sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27"
sha256: "4188706108906f002b3a293509234588823c8c979dc83304e229ff400c996b05"
url: "https://pub.dev"
source: hosted
version: "0.5.1"
version: "0.4.2"
web_socket_channel:
dependency: transitive
description:
name: web_socket_channel
sha256: "58c6666b342a38816b2e7e50ed0f1e261959630becd4c879c4f26bfa14aa5a42"
sha256: "939ab60734a4f8fa95feacb55804fa278de28bdeef38e616dc08e44a84adea23"
url: "https://pub.dev"
source: hosted
version: "2.4.5"
version: "2.4.3"
webkit_inspection_protocol:
dependency: transitive
description:
Expand All @@ -562,4 +562,4 @@ packages:
source: hosted
version: "3.1.2"
sdks:
dart: ">=3.3.0 <4.0.0"
dart: ">=3.2.3 <4.0.0"
2 changes: 1 addition & 1 deletion packages/signer/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ description: A signer to sign and verify raw data
version: 0.1.0

environment:
sdk: ^3.2.0
sdk: ^3.2.3

dependencies:
hex: ^0.2.0
Expand Down
3 changes: 3 additions & 0 deletions packages/stellar_client/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
## 1.0.0

- Initial version.
68 changes: 68 additions & 0 deletions packages/stellar_client/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# Stellar Client

This Dart client allows you to communicate with the Stellar network, enabling the creation or loading of existing Stellar accounts. It supports interactions with both the testnet and public network, and the assets currently supported are TFT (Threefold Token) and XLM (Stellar Lumens).

## Installation

To install the necessary dependencies, run:

```bash
dart pub get
```

## Usage

This client enables you to create new Stellar accounts or load existing ones on the testnet or public network. Once an account is created or loaded, you can manage assets such as TFT and XLM.

### TESTNET

Create new testnet account:

- Use `Client.create(NetworkType.TESTNET)` to create a new client.
- Use `Client.createFromMnemonic(NetworkType.TESTNET, "mnemonic")` to create a client from an existing mnemonic.
- Account can be activated through friendbot (only for testnet).
- After activation, trustlines can be added to the account.

```dart
import 'package:stellar_client/stellar_client.dart';
final stellarClient = Client.create(NetworkType.TESTNET);
// final stellarClient = await Client.createFromMnemonic(NetworkType.TESTNET, "mnemonic");
await stellarClient.activateThroughFriendBot(accountId: stellarClient.accountId);
await stellarClient.addTrustLine();
final balance = await stellarClient.getBalance();
print(balance);
```

Load previously created account:

- Accounts can be loaded from secret seed.

```dart
import 'package:stellar_client/stellar_client.dart';
final stellarClient = Client(NetworkType.TESTNET, secretSeed);
final transactions = await stellarClient.getTransactions();
print(transactions);
```

### PUBLIC

- Activation through Threefold service will add assets automatically.

```dart
import 'package:stellar_client/stellar_client.dart';
final stellarClient = Client.create(NetworkType.PUBLIC);
await stellarClient.activateThroughThreefoldService();
await stellarClient.transfer(
destinationAddress: "destination-public-key",
amount: "20",
currency: "TFT",
memoText: "Memo Text");
await stellarClient.getTransactions();
```
14 changes: 14 additions & 0 deletions packages/stellar_client/bin/stellar_client.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import 'package:stellar_client/stellar_client.dart';

void main() async {
final stellarClient = Client.create(NetworkType.PUBLIC);
await stellarClient.activateThroughThreefoldService();

await stellarClient.transfer(
destinationAddress: "destination-public-key",
amount: "20",
currency: "TFT",
memoText: "Memo Text");

await stellarClient.getTransactions();
}
18 changes: 18 additions & 0 deletions packages/stellar_client/lib/models/balance.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
abstract class BalanceInfo {
String get assetCode;
String get balance;
}

class BalanceData implements BalanceInfo {
@override
final String assetCode;
@override
final String balance;

BalanceData({required this.assetCode, required this.balance});

@override
String toString() {
return 'BalanceData(assetCode: $assetCode, balance: $balance)';
}
}
27 changes: 27 additions & 0 deletions packages/stellar_client/lib/models/currency.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
class Currency {
final String assetCode;
final String issuer;

Currency({required this.assetCode, required this.issuer});

Map<String, dynamic> toJson() {
return {
'asset_code': assetCode,
'issuer': issuer,
};
}
}

class Currencies {
late final Map<String, Currency> currencies;

Currencies(this.currencies);

Map<String, dynamic> toJson() {
Map<String, dynamic> jsonMap = {};
currencies.forEach((key, value) {
jsonMap[key] = value.toJson();
});
return jsonMap;
}
}
24 changes: 24 additions & 0 deletions packages/stellar_client/lib/models/transaction_data.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
class TransactionData {
final String asset;
final String feeAccountId;
final String feeFixed;

TransactionData({
required this.asset,
required this.feeAccountId,
required this.feeFixed,
});

factory TransactionData.fromJson(Map<String, dynamic> json) {
return TransactionData(
asset: json['asset'],
feeAccountId: json['fee_account_id'],
feeFixed: json['fee_fixed'],
);
}

@override
String toString() {
return 'TransactionData{asset: $asset, feeAccountId: $feeAccountId, feeFixed: $feeFixed}';
}
}
58 changes: 58 additions & 0 deletions packages/stellar_client/lib/models/transactions.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
class PaymentOperationDetails {
final String from;
final String to;
final double amount;
final String assetCode;
final bool isSuccessful;

PaymentOperationDetails({
required this.from,
required this.to,
required this.amount,
required this.assetCode,
required this.isSuccessful,
});

@override
String toString() {
return 'PaymentOperationDetails(from: $from, to: $to, amount: $amount, assetCode: $assetCode, isSuccessful: $isSuccessful)';
}
}

class CreateAccountOperationDetails {
final String account;
final double startingBalance;

CreateAccountOperationDetails({
required this.account,
required this.startingBalance,
});

@override
String toString() {
return 'CreateAccountOperationDetails(account: $account, startingBalance: $startingBalance)';
}
}

class PathPaymentStrictReceiveOperationDetails {
final String from;
final String to;
final double sourceAmount;
final String sourceAssetCode;
final double destinationAmount;
final String destinationAssetCode;

PathPaymentStrictReceiveOperationDetails({
required this.from,
required this.to,
required this.sourceAmount,
required this.sourceAssetCode,
required this.destinationAmount,
required this.destinationAssetCode,
});

@override
String toString() {
return 'PathPaymentStrictReceiveOperationDetails(from: $from, to: $to, sourceAmount: $sourceAmount, sourceAssetCode: $sourceAssetCode, destinationAmount: $destinationAmount, destinationAssetCode: $destinationAssetCode)';
}
}
Loading
Loading