+1

Sui Blockchain Wallet Account

Mayfest2023

Bộ code snippets để tạo wallet/signer tương tác với Sui blockchain một cách nhanh chóng.

Chuẩn bị mnemonic

Bạn có thể tạo 1 mnemonic mới từ package @scure/bip39:

import * as bip39 from "@scure/bip39";
import { wordlist } from "@scure/bip39/wordlists/english.js";

const mnemonic = bip39.generateMnemonic(wordlist);

hoặc sử dụng mnemonic hiện đã có của bạn.

Lấy keypair

Lấy keypair từ mnemonic

Chuẩn bị sui js sdk

yarn add @mysten/sui.js
# hoặc
pnpm add @mysten/sui.js

Lấy key pair từ mnemonic

Sui blockchain sử dụng 2 cơ chế: Ed25519, Secp256k1. Code snippets trong bài viết này mình sẽ sử dụng cơ chế mặc định của Sui là Ed25519.

import { DEFAULT_ED25519_DERIVATION_PATH, Ed25519Keypair } from "@mysten/sui.js";

const keypair = Ed25519Keypair.deriveKeypair(mnemonic, DEFAULT_ED25519_DERIVATION_PATH);

Lấy private key từ keypair

const privateKey = HexString.fromUint8Array(fromB64(keypair.export().privateKey)).toString();

Public key và Sui address

const publicKey = keypair.getPublicKey();
const address = publicKey.toSuiAddress();

Lấy keypair từ private key

private key của bạn từ Sui Wallet hoặc bất kỳ wallet nào.

// cắt bỏ 0x ở đầu private key
const privateKeyBytes = Uint8Array.from(Buffer.from(privateKey.slice(2), "hex")); 

const keypair = fromExportedKeypair({
    schema: "ED25519",
    privateKey: toB64(privateKeyBytes),
});

const publicKey = keypair.getPublicKey();

const address = publicKey.toSuiAddress();
// có thể thử so sánh địa chỉ ví với địa chỉ trong sui wallet xem có chính xác không nhé!

Provider và signer

Để tương tác với Sui Blockchain, chúng ta cần có 1 provider:

Sui Blockchain provider

Tạo 1 provider tương tác với Sui blockchain mainnet

import { Connection, JsonRpcProvider } from "@mysten/sui.js";

export const connection = new Connection({
    fullnode: "https://fullnode.mainnet.sui.io",
});
export const provider = new JsonRpcProvider(mainnetConnection);

Sử dụng các functions của provider

provider.getTransactionBlock
provider.queryEvents
provider.queryTransactionBlocks
provider.waitForTransactionBlock
provider.getAllBalances
provider.getOwnedObjects
// ...

Tạo signer từ keypair và provider

Để ký 1 transaction bất kỳ trong sui, ta cần tạo 1 signer:

const signer = new RawSigner(keypair, provider);

Sử dụng các functions của signer vừa được tạo ra

signer.signAndExecuteTransactionBlock
signer.signMessage
signer.signTransactionBlock
// ...

All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí