Skip to content

Commit

Permalink
add query contracts class
Browse files Browse the repository at this point in the history
  • Loading branch information
AlaaElattar committed Nov 28, 2023
1 parent 84d4e25 commit e93fcc2
Show file tree
Hide file tree
Showing 6 changed files with 125 additions and 11 deletions.
3 changes: 3 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"cSpell.words": ["polkadot"]
}
9 changes: 5 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@

[![melos](https://img.shields.io/badge/maintained%20with-melos-f700ff.svg?style=flat-square)](https://github.com/invertase/melos) [![codecov](https://codecov.io/gh/codescalers/tfgrid-sdk-dart/graph/badge.svg?token=O34UDTMW5O)](https://codecov.io/gh/codescalers/tfgrid-sdk-dart)

This repo contains the dart clients for Threefold grid.
## Packages

- [signer](./packages/signer/README.md)
- [tfchain_client](./packages/tfchain_client/README.md)
## Prerequisites

Make sure you have the following tools installed:
Expand All @@ -10,10 +15,6 @@ Make sure you have the following tools installed:
- [Melos](https://pub.dev/packages/melos)
- [Coverde](https://pub.dev/packages/coverde)

## Packages

- [signer](./packages/signer/README.md)
- [tfchain_client](./packages/tfchain_client/README.md)

## Initialize Workspace

Expand Down
14 changes: 13 additions & 1 deletion packages/tfchain_client/bin/tfchain_client.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,17 @@
import 'package:tfchain_client/tfchain_client.dart';

void main() {
void main() async {
final client = QueryClient("wss://tfchain.dev.grid.tf/ws");
client.connect();
// final id = await client.contracts.get(contractId: BigInt.from(49130));
// print(id!.twinId);

// await client.contracts.getDeletionTime(id: BigInt.from(49130));

// final id =
// await client.contracts.getContractIdByActiveRentForNode(nodeId: 11);
// print(id);

final fee = await client.contracts.getDedicatedNodeExtraFee(nodeId: 86);
print("Fee $fee");
}
24 changes: 19 additions & 5 deletions packages/tfchain_client/lib/src/client.dart
Original file line number Diff line number Diff line change
@@ -1,15 +1,29 @@
part of '../tfchain_client.dart';
// TODO: Disconnect

class QueryClient {
final String url;
late final Provider api;
late final Provider provider;
late final polkadot.Dev api;
late QueryContracts contracts;

QueryClient(this.url) {
api = newProvider();
newProvider();
contracts = QueryContracts(this);
}

Provider newProvider() {
return Provider.fromUri(Uri.parse(url));
// TODO: Disconnect
void newProvider() {
final provider = Provider.fromUri(Uri.parse(url));
api = polkadot.Dev(provider);
}

void checkInputs() {
if (url.isEmpty) {
throw Exception("url should be provided");
}
}

void connect() async {
checkInputs();
}
}
82 changes: 82 additions & 0 deletions packages/tfchain_client/lib/src/contracts.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
import 'package:tfchain_client/generated/dev/types/pallet_smart_contract/grid_contract/name_contract_name.dart';
import 'package:tfchain_client/generated/dev/types/pallet_smart_contract/types/contract.dart';
import 'package:tfchain_client/generated/dev/types/pallet_smart_contract/types/contract_lock.dart';
import 'package:tfchain_client/generated/dev/types/pallet_smart_contract/types/service_contract.dart';
import 'package:tfchain_client/tfchain_client.dart';

const twoWeeks = 1209600000;

class QueryContracts {
final QueryClient client;
QueryContracts(this.client);

Future<Contract?> get({required BigInt contractId}) async {
final res =
await client.api.query.smartContractModule.contracts(contractId);
return res as Contract;
}

Future<BigInt?> getContractIdByActiveRentForNode(
{required int nodeId}) async {
final res = await client.api.query.smartContractModule
.activeRentContractForNode(nodeId);
return res;
}

Future<List<int>> getActiveContracts({required int nodeId}) async {
final res =
await client.api.query.smartContractModule.activeNodeContracts(nodeId);
return res;
}

Future<BigInt?> getContractIdByName({required String name}) async {
final res = await client.api.query.smartContractModule
.contractIDByNameRegistration(name as NameContractName);
return res;
}

Future<BigInt?> getContractIdByNodeIdAndHash(
{required int nodeId, required String hash}) async {
final res = await client.api.query.smartContractModule
.contractIDByNodeIDAndHash(nodeId, hash as List<int>);
return res;
}

Future<ContractLock?> contractLock({required BigInt id}) async {
final res = await client.api.query.smartContractModule.contractLock(id);
return res;
}

Future<num> getDeletionTime({required BigInt id}) async {
final contract = await get(contractId: id);
if (contract != null && contract.state.toJson()["Created"] == null) {
return 0;
}

//TODO: double check that GracePeriod typed like that.
final blockNumber = contract!.state.toJson()["GracePeriod"];
try {
final currentBlockNumber = await client.api.query.system.number();

// each block takes 6 seconds
final gracePeriodStartTime = DateTime.now().millisecondsSinceEpoch -
(currentBlockNumber - blockNumber) * 6000;
return gracePeriodStartTime + twoWeeks;
} catch (e) {
throw Exception(
"Error getting current block number for contract $id deletion: $e");
}
}

Future<ServiceContract?> getService({required BigInt serviceId}) async {
final res =
await client.api.query.smartContractModule.serviceContracts(serviceId);
return res;
}

Future<BigInt?> getDedicatedNodeExtraFee({required int nodeId}) async {
final res = await client.api.query.smartContractModule
.dedicatedNodesExtraFee(nodeId);
return res;
}
}
4 changes: 3 additions & 1 deletion packages/tfchain_client/lib/tfchain_client.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
library Client;
library client;

import 'package:polkadart/polkadart.dart' show Provider;
import 'package:tfchain_client/src/contracts.dart';
import 'package:tfchain_client/generated/dev/dev.dart' as polkadot;

part 'src/client.dart';

0 comments on commit e93fcc2

Please sign in to comment.