Документация по @vipcoingold/js-client-v4
Установка
npm install --save @vipcoingold/js-client-v4
yarn add @vipcoingold/js-client-v4
Использование
import * as vcg from '@vipcoingold/js-client-v4';
vcg.createClient({...});
import { createClient } from '@vipcoingold/js-client-v4';
Создание и конфигурация экземпляра @vipcoingold/js-client-v4:
Клиент инкапсулирует переданные параметры для дальнейшего использования в производимых им сущностях/данных
import { createClient } from '@vipcoingold/js-client-v4';
const client = createClient({
BASE_BIP44_PATH: "m/44'/118'/0'/0",
BLOCKCHAIN_URL: 'http://localhost:26657',
BECH32_PREFIX: 'vcg',
ASSET: 'vcg',
});
Создание сессии из мнемоники:
const session = await client.Session.fromMnemonic(mnemonic);
Создание сессии из пары ключей:
const session = await client.Session.fromKeyStore(password, keystoreData);
Создание сессии с новой мнемоникой:
const session = await client.Session.fromRandomMnemonic();
Создание сообщения из реестра встроенных:
const message = session.message.MsgCreateWallet(accountAddress, walletAddress, [
{ kind: ExtraKind.EXTRA_KIND_NAME, data: name },
]);
Отправка protobuff сообщений в сеть blockchain:
Отдельно подпись и отправка
const signature = session.signingClient.sign([message]);
const response = await session.signingClient.broadcast(signature);
Подпись и отправка сообщения одним методом
const response = await session.signingClient.signAndBroadcast([message]);
Проверит успех транзакции, бросит исключение в случае ошибки
TBD: дописать возможные ошибки и их формат
import { assertIsBroadcastTxSuccess } from '@vipcoingold/js-client-v4';
try {
...
assertIsBroadcastTxSuccess(response);
} catch (error) {
console.log(error);
}
Типичные сценарии использования встроенных сообщений можно посмотреть в папке src/examples
Работа с KeyStore:
import { generateKeyStoreFile, recoverKeys } from '@vipcoingold/js-client-v4';
Утилиты облегчающие работу с криптографией
Поставляется из-под экземпляра клиента client.crypto
, но так же возможно создать отдельно,
передавая необходимые аргументы в конструктор:
import { Crypro } from '@vipcoingold/js-client-v4';
const crypto = new Crypto(
'BASE_BIP44_PATH',
'BECH32_PREFIX'
);
const path = crypto.getPathForIndex('mnemonic', 0);
const address = crypto.mnemonicToAddress('mnemonic', 0);
const keyPair = crypto.mnemonicToKeyPair('mnemonic', 0);
Так же доступны статические методы, в которых не инкапсулированы параметры BASE_BIP44_PATH
и BECH32_PREFIX
что позволяет их использовать в частных случаях
- Crypto.mnemonicToAddress
- Crypto.signData
- Crypto.mnemonicToKeyPair
- Crypto.getPathForIndex
- Crypto.generateMnemonic
- Crypto.entropyToMnemonic
- Crypto.mnemonicToEntropy
Отправка других сообщений
Чтобы отправить сообщение, не встроенное в клиент, необходимо добавить его модель в реестр и передать как аргумент при создании экземпляра клиента:
import { MessageRegistryItem, createClient } from '@vipcoingold/js-client-v4';
const myRegistry: MessageRegistryItem[] = ['/my.api.path', MyCustomProtobufMessage];
const client = createClient({
BASE_BIP44_PATH: '...',
BLOCKCHAIN_URL: '...',
BECH32_PREFIX: '...',
ASSET: '...',
}, myRegistry);
const session = client.createSession('mnemonic');
const myMessageInstance = MyCustomProtobufMessage.fromJSON(...);
const response = await session.signingClient.signAndBroadcast([myMessageInstance]);
ContractSession
Создать сессию для работты с контрактами
Создать используя существующую сессию
RPC клиент
import { WalletKind } from '@vipcoingold/js-client-v4/codec/wallets/enums';
import * as Wallet from '@vipcoingold/js-client-v4/codec/wallets/query';
try {
const rpc = await client.createRpcClient();
const walletQueryClient = new Wallet.QueryClientImpl(rpc);
const result = await walletQueryClient.WalletAll({
accountAddress: session.signer.address,
accountHash: '',
default: false,
kind: WalletKind.WALLET_KIND_HOLDER,
});
console.log(result.wallets[0]);
} catch (err) {
console.log(err)
}