Solana
This article describes the process of completing a Solana transaction through the SDK.
Support List
Support most SOL-series cryptocurrencies and their tokens.
- Solana
GsWalletSolSDK
The GsWalletSolSDK class mainly implements the following functions:
- Construct SOL transactions.
- Parse signature information.
class GsWalletSolSDK {
static UR generateSignRequest({
String? uuid,
required String signData,
required SignType signType,
required String path,
required String xfp,
String? outputAddress,
String? contractAddress,
String? origin,
int? fee,
});
static Map<String, dynamic> parseSignature(UR ur);
}
generateSignRequest
static UR generateSignRequest({
String? uuid,
required String signData,
required SignType signType,
required String path,
required String xfp,
String? outputAddress,
String? contractAddress,
String? origin,
int? fee,
});
Input parameters
-
uuid:
StringoptionalRepresenting the unique ID of a transaction -
signData:
StringrequiredUnsigned-transaction data, it's serialized hex for a SOL transaction -
signType:
SignTyperequiredUnsigned-message type -
path:
StringrequiredBIP32 derivation path for from-address of the transaction -
xfp:
StringrequiredMasterFingerprint, used as a unique wallet ID -
outputAddress:
StringoptionalReceiving address, it is required if it is a token transaction -
contractAddress:
StringoptionalContract address, it is required if it is a token transaction -
origin:
StringoptionalNotes for transaction, usually source of the request -
fee:
intoptionalTransaction fee, minimum unit.
parseSignature
static Map<String, dynamic> parseSignature(UR ur);
Returns
-
uuid:
Uint8Listtransaction ID. -
signature:
Stringsignature of transaction. -
origin:
Stringusually "GsWallet".
Example
Construct transaction
import 'package:gs_ur_dart/gs_ur_dart.dart';
UR ur = GsWalletSolSDK.generateSignRequest(
uuid: "65781260-8d2c-11ef-806b-cf7f7ddae54a",
signData:
"01000203d9aa0cde2dd59caa4e04fe703439abba02d81391adb78dd1e67130e93684951200000000000000000000000000000000000000000000000000000000000000000306466fe5211732ffecadba72c39be7bc8ce5bbc5f7126b2c439b3a40000000d88b1bb92a7e915051f7287e53d1c6a2bd97a7a6c169a6ee00a912f793936e0c03010200000c02000000158d0b020000000002000502400d030002000903801a060000000000",
signType: SignType.transaction,
path: "m/44'/501'/0'/0'",
xfp: "27c3831f",
outputAddress: null,
contractAddress: null,
origin: null,
fee: 100000);
final UREncoder urEncoder = UREncoder(ur);
String _currentQR = urEncoder.nextPart();
emit(_AnimatedQRDataState(_currentQR));
timer = Timer.periodic(const Duration(milliseconds: 250), (_) {
_currentQR = urEncoder.nextPart();
emit(_AnimatedQRDataState(_currentQR));
});
Parse signature
import 'package:gs_ur_dart/gs_ur_dart.dart';
typedef SuccessCallback = void Function(UR);
final SuccessCallback onSuccess;
final QRViewController controller;
controller.scannedDataStream.listen((event) {
URDecoder urDecoder = URDecoder();
urDecoder.receivePart(event.code);
double progress = urDecoder.getProgress();
if (urDecoder.isComplete()) {
final UR result = urDecoder.resultUR();
if (!succeed) {
onSuccess(result);
succeed = true;
}
}
});
onSuccess(UR ur){
final solSigned = GsWalletSolSDK.parseSignature(ur);
}
// solSigned: {
// "uuid": [101,120,18,96,141,44,17,239,128,107,207,127,125,218,229,74],
// "signature":"1cd95cbd3df72efe043ff50da43f03e6fed76a133a62f1b897de9ecc0ecd50e5d9a35ebf0340eb4368ee681b2387db3c053d69e09927e642ef8aa70b3502320b",
// "origin":"GSWALLET",
// };