/nkn-sdk-flutter

Primary LanguageKotlinApache License 2.0Apache-2.0

nkn-sdk-flutter

Usage

install

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  Wallet.install();
  Client.install();
  runApp(MyApp());
}

Wallet

Create wallet:

Wallet wallet = await Wallet.create(null, config: WalletConfig(password: '123'));
print(wallet.address);
print(wallet.seed);
print(wallet.publicKey);

Export wallet to JSON string, where sensitive contents are encrypted by password provided in config:

wallet.keystore;

By default the wallet will use RPC server provided by nkn.org. Any NKN full node can serve as a RPC server. To create a wallet using customized RPC server:

Wallet wallet = await Wallet.create(null, config: WalletConfig(password: '123', seedRPCServerAddr: ['http://seed.nkn.org:30003']));
print(wallet.address);
print(wallet.seed);
print(wallet.publicKey);

Load wallet from JSON string, note that the password needs to be the same as the one provided when creating wallet:

Wallet wallet = await Wallet.restore(w.keystore,
    config: WalletConfig(password: '123'));
print(wallet.address);
print(wallet.seed);
print(wallet.publicKey);
                      

Query asset balance for this wallet:

double balance = await wallet.getBalance();

Transfer asset to some address:

String txHash = await wallet.transfer(NKN_ADDRESS, '1.23');

Client

NKN Client provides low level p2p messaging through NKN network.

Create a client with a generated key pair:

var client = await Client.create(WALLET_SEED);

Listen for connection established:

client.onConnect.listen((event) {
    print(event.node);
});

Receive data from other clients

client.onMessage.listen((event) {
    print(event.type);
    print(event.encrypted);
    print(event.messageId);
    print(event.data);
    print(event.src);
});

Send text message to other clients

await client.sendText([CLIENT_ADDRESS], jsonEncode({'contentType': 'text', 'content': 'Hello'}));

publish a message to a specified topic (see wallet section for subscribing to topics):

await client.publishText(TOPIC, jsonEncode({'contentType': 'text', 'content': 'Hello'}));

Pub/Sub

var res = await client.subscribe(topic: TOPIC);
var res = await client.unsubscribe(topic: TOPIC);
var res = await client.getSubscribersCount(topic: TOPIC);
var res = await client.getSubscription(topic: TOPIC, subscriber: CLIENT_ADDRESS);