# Accounts

### Dartez init

The function init the sodium libs used in mnemonic and private key functions

```dart
await Dartez().init();
```

### Get Balance

This function returns the balance of tezos account on a particular tezos network.&#x20;

```dart
String balance = await Dartez.getBalance('tz1c....ozGGs', 'your rpc server');
```

### Generate Mnemonics

This function will return a new set of mnemonic phrases as a space separated words, which is used for generating key pairs for tezos account.&#x20;

The mnemonic must encode entropy in a multiple of 32 bits. With more entropy security is improved but the sentence length increases. We refer to the initial entropy length as strength. The allowed size of strength is 128-256 bits. (The default value of strength is 256)

The generateMnemonic function follows implementations of [BIP-0039](https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki).&#x20;

```dart
String mnemonic = Dartez.generateMnemonic(); 
// mnemonic = sustain laugh capital ..... hundred same brave

String mnemonic = Dartez.generateMnemonic(strength: 128);
// mnemonic = sustain laugh capital ….. hundred same brave
```

### Generate Keys From Mnemonics

This function will generate a new set of keys using mnemonic & passphrase, which can be used for interacting with tezos blockchain.

```dart
KeyStoreModel keys = Dartez.getKeysFromMnemonic(mnemonic: "Your Mnemonic");
```

```dart
KeyStoreModel identityWithMnemonic = Dartez.getKeysFromMnemonic(
      mnemonic: "your mnemonic",
      passphrase: "pa$\$w0rd",
);
```

### Reveal An Account

This function reveal an account's publicKey, which is required before performing any transaction on tezos blockchain.

```dart
var server = '';

var keyStore = KeyStoreModel(
      publicKeyHash: 'tz1U.....W5MHgi',
      secretKey: 'edskRp......bL2B6g',
      publicKey: 'edpktt.....U1gYJu2',
    );

var signer = await Dartez.createSigner(
        Dartez.writeKeyWithHint(keyStore.secretKey, 'edsk'));

var result =
        await Dartez.sendKeyRevealOperation(server, signer, keyStore);

print('${result['operationGroupID']}');
```

### Unlock Fundraiser Identity

This function will generate a new set of keys using mnemonic, email & passphrase, which can be used for interacting with tezos blockchain.

```dart
KeyStoreModel identityFundraiser = await Dartez.unlockFundraiserIdentity(
    mnemonic: "your mnemonic",
    email: "test@example.com",
    passphrase: "5tj...imq");
```

### Restore Identity From Derivation Path

This function will recovers a set of keys using mnemonic & derivation path, which can be used for interacting with tezos blockchain.

```dart
var derivationPath = 'your derivation path';
var mnemonic = 'your mnemonic';

KeyStoreModel keyStore = await Dartez.restoreIdentityFromDerivationPath(derivationPath, mnemonic);
```

### Get Keys From Secret Key

This function will recovers a set of keys using secret key, which can be used for interacting with tezos blockchain.

<pre class="language-dart"><code class="lang-dart"><strong>KeyStoreModel keys = Dartez.getKeysFromSecretKey("edsk.....vdC");
</strong></code></pre>

### Delegate An Account

This function delegate the account to the baker account address, This is a means for non-"baker" (non-validator) accounts to participate in the on-chain governance process and receive staking rewards.

```dart
var server = '';

var keyStore = KeyStoreModel(
      publicKey: 'edpk.....rrj',
      secretKey: 'edsk.....yHH',
      publicKeyHash: 'tz1.....hxy',
    );

var signer = await Dartez.createSigner(
        Dartez.writeKeyWithHint(keyStore.secretKey, 'edsk'));

var result = await Dartez.sendDelegationOperation(
      server,
      signer,
      keyStore,
      'tz1.....Lnc',
      10000,
    );

print("Applied operation ===> $result['appliedOp']");
print("Operation groupID ===> $result['operationGroupID']");

```

### Transfer Balance

This function used for transfer of value between two accounts, In this example we have the account: `tz1.....hxy` and some random testnet address to test with: `tz1.....Lnc`. Note all amounts are in µtz, as in micro-tez, hence 0.5tz is represented as `500000`. The fee of `1500` was chosen arbitrarily, but some operations have minimum fee requirements.

```dart
var server = '';

var keyStore = KeyStoreModel(
      publicKey: 'edpk.....rrj',
      secretKey: 'edsk.....yHH',
      publicKeyHash: 'tz1.....hxy',
    );

var signer = await Dartez.createSigner(
    Dartez.writeKeyWithHint(keyStore.secretKey, 'edsk'));
    
var result = await Dartez.sendTransactionOperation(
      server,
      signer,
      keyStore,
      'tz1.....Lnc',
      500000,
      1500,
    );

print("Applied operation ===> $result['appliedOp']");
print("Operation groupID ===> $result['operationGroupID']");
```
