6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【symbol-sdk】Flutterでのあれこれ

Last updated at Posted at 2024-10-09

はじめに

Flutterでのsymbol-sdkのあれこれです。
実装していて気づいたことをメモしていきます。

symbol-sdk(Dart)

publicKeyからアドレスを取得する

facadeを通して取得

import 'package:symbol_sdk/index.dart';
import 'package:symbol_sdk/symbol/index.dart';
import 'package:symbol_sdk/CryptoTypes.dart' as ct;

final keyPair = KeyPair(ct.PrivateKey(privateKey));
final facade = SymbolFacade(networkType);
final address = facade.network.publicKeyToAddress(keyPair.publicKey);
// addressToStringを使うにはpackage:symbol_sdk/index.dartのインポートが必要
final _address = addressToString(address);
print(_address);

以下のように公開鍵を渡すでもOK

final publicKey = ct.PublicKey('863C13B856A8A3012C8DD63C1F151A2F3D7Axxxxxx');
final testaddress = facade.network.publicKeyToAddress(publicKey);
final _address = addressToString(address);
print(_address);

受け取り用のQRを生成する

こんな感じのQRコード(QRコードの中身)ができる。
実際にSymbolのモバイルウォレットで読み取ることが可能。
(読み込んでも勝手に送信などしないので安心してください)

FA38F1C4-3E35-48C7-B10D-F9BB0D22D5EC_1_201_a.jpeg

実装

import 'package:symbol_sdk/index.dart';
import 'package:symbol_sdk/symbol/index.dart';
import 'package:symbol_sdk/CryptoTypes.dart' as ct;

var tx = TransferTransactionV1(
    network: networkType,
    deadline: Timestamp(facade.network.fromDatetime(DateTime.now().toUtc()).addHours(2).timestamp),
    recipientAddress: UnresolvedAddress(_address),
    mosaics: [UnresolvedMosaic(mosaicId: UnresolvedMosaicId(0x72C0212E67A08BCE), amount: Amount(1000000))],
    message: MessageEncorder.toPlainMessage(decodedData['data']['message']),
);

Uint8List bytes = tx.serialize();
// String payload = bytes.map((byte) => byte.toRadixString(16).padLeft(2, '0')).join('');
String payload = bytesToHex(bytes);
final qrCodeData = {
      "v": 3,
      "type": 3,
      "network_id": 152,
      "chain_id": "57F7DA205008026C776CB6AED843393F04CD458E0AA2D9F1D5F31A402072B2D6",
      "data": { 
        "payload": payload
      }
    };

※モザイク数量を計算する際にはモザイクの情報を取得して過分性を考慮する必要がある。

処理の流れ

TransferTransactionを作成する際にsignerPublicKeyを入れずに作成。
その後、serializeメソッドでUint8Listを受け取る。
byte.toRadixString(16)Uint8Listを16進数の文字列に変換。(もっと他に良いやり方があるかも)
symbol-qr-libraryのGenerate QRCode for a Transaction RequestのTransactionQRで生成される形式に成形。

あとは好みのQRコード生成ライブラリを使ってqrCodeDataをよしなに描画する。

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?