## Gear 智能合约 -- Vara Network
### 使用 `GearKeyring` API
本 PPT 链接: https://hackmd.io/@btwiuse/keyring
参考文档: https://wiki.gear-tech.io/docs/api/keyring
---
# `GearKeyring`
Keyring enables you to manage your key pair (account) to perform a wide range of operations, including signing, verifying and encrypting/decrypting. The SecretKey is never exposed to the outside.
- https://wiki.gear-tech.io/docs/api/keyring/
- https://github.com/gear-tech/gear-js/tree/main/api#keyring
```
import { GearKeyring } from '@gear-js/api';
```
👉 https://gear.sh
---
## Create keyring
Creating a new keyring
```javascript
const { keyring, json } = await GearKeyring.create('keyringName', 'passphrase');
```
Getting a keyring from JSON
```javascript
const jsonKeyring = fs.readFileSync('path/to/keyring.json').toString();
const keyring = GearKeyring.fromJson(jsonKeyring, 'passphrase');
```
Getting JSON for keyring
```javascript
const json = GearKeyring.toJson(keyring, 'passphrase');
```
---
Getting a keyring from seed
```javascript
const seed = '0x496f9222372eca011351630ad276c7d44768a593cecea73685299e06acef8c0a';
const keyring = await GearKeyring.fromSeed(seed, 'name');
```
Getting a keyring from mnemonic
```javascript
const mnemonic = 'slim potato consider exchange shiver bitter drop carpet helmet unfair cotton eagle';
const keyring = GearKeyring.fromMnemonic(mnemonic, 'name');
```
Generate mnemonic and seed
```javascript
const { mnemonic, seed } = GearKeyring.generateMnemonic();
// Getting a seed from mnemonic
const { seed } = GearKeyring.generateSeed(mnemonic);
```
---
## Default Accounts
In most cases on development chains, Substrate has a number of standard accounts that are pre-funded. Generally when operating on development chains, you will be introduced to characters such as `Alice`, `Bob`, `Charlie`, `Dave`, `Eve` and `Ferdie`. To create keyring from pre-installed accounts use:
```javascript
const keyring = await GearKeyring.fromSuri('//Alice');
```
---
### Sign data
<details>
<summary>Example</summary>
1. Create signature
```javascript
import { GearKeyring } from '@gear-js/api';
const message = 'your message';
const signature = GearKeyring.sign(keyring, message);
```
2. Validate signature
```javascript
import { signatureIsValid } from '@gear-js/api';
const publicKey = keyring.address;
const verified = signatureIsValid(publicKey, signature, message);
```
</details>
### Convert public keys into ss58 format and back
Use `encodeAddress` and `decodeAddress` functions to convert the public key into ss58 format and back.
<details>
<summary>Example</summary>
1. Convert to raw format
```javascript
import { decodeAddress } from '@gear-js/api';
console.log(decodeAddress('5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY'));
```
2. Convert to ss58 format
```javascript
import { encodeAddress } from '@gear-js/api';
console.log(encodeAddress('0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d'));
```
</details>
---
总结
- create keyring from mnemonics / seed
- sign messages & verify signature
- sign transactions
课后作业:使用 Keyring API 创建命令行工具,生成地址,并实现验证签名的功能
```
./cli create --uri=... > keyring.json
./cli verify --keyring=keyring.json "message to verify"
```
---
# Questions
<img src="https://hackmd.io/_uploads/SyK8P72d2.jpg" width="240" alt="GEAR">
<img src="https://hackmd.io/_uploads/By_kgE3_2.png" width="240" alt="VARA">
课后答疑频道: https://t.me/Gear_CN
{"title":"GearKeyring API","slideOptions":"{\"theme\":\"solarized\",\"spotlight\":{\"enabled\":false}}","contributors":"[{\"id\":\"94262fbf-81ae-4ed7-933c-561a41bd977a\",\"add\":4743,\"del\":1228}]","description":"gear keyring"}