Stellar SDK for Flutter
Soneso 开源 Stellar SDK for Flutter 使用 Dart 构建,并提供构建和签名交易、连接和查询 Horizon 的 API。
安装
来自pub.dev
- 将依赖添加到您的pubspec.yaml文件中
dependencies:
stellar_flutter_sdk: ^1.2.3
- 安装它(命令行或IDE)
flutter pub get
- 在您的源文件中导入SDK,初始化并使用它
import 'package:stellar_flutter_sdk/stellar_flutter_sdk.dart';
final StellarSDK sdk = StellarSDK.TESTNET;
String accountId = "GASYKQXV47TPTB6HKXWZNB6IRVPMTQ6M6B27IM5L2LYMNYBX2O53YJAL";
AccountResponse account = await sdk.accounts.account(accountId);
print("sequence number: ${account.sequenceNumber}");
手动
SDK是一个Flutter Dart插件。这是我们推荐的分步操作指南
- 克隆此仓库。
- 在您的IDE(例如Android Studio)中打开项目。
- 打开
pubspec.yaml文件,然后在IDE中按Pub get。 - 转到项目的
test目录,从那里运行一个测试,您就可以开始了!
添加到您的应用
- 在您的Flutter应用中,将本地依赖添加到
pubspec.yaml,然后运行pub get。
dependencies:
flutter:
sdk: flutter
stellar_flutter_sdk:
path: ../stellar_flutter_sdk
- 在您的源文件中导入SDK,初始化并使用它
import 'package:stellar_flutter_sdk/stellar_flutter_sdk.dart';
final StellarSDK sdk = StellarSDK.TESTNET;
String accountId = "GASYKQXV47TPTB6HKXWZNB6IRVPMTQ6M6B27IM5L2LYMNYBX2O53YJAL";
AccountResponse account = await sdk.accounts.account(accountId);
print("sequence number: ${account.sequenceNumber}");
快速入门
1. 创建Stellar密钥对
随机生成
// create a completely new and unique pair of keys.
KeyPair keyPair = KeyPair.random();
print("${keyPair.accountId}");
// GCFXHS4GXL6BVUCXBWXGTITROWLVYXQKQLF4YH5O5JT3YZXCYPAFBJZB
print("${keyPair.secretSeed}");
// SAV76USXIJOBMEQXPANUOQM6F5LIOTLPDIDVRJBFFE2MDJXG24TAPUU7
确定性生成
Stellar生态系统提案SEP-0005描述了Stellar账户的密钥派生方法。这改进了密钥存储和钱包与应用之间的密钥迁移。
生成助记词
String mnemonic = await Wallet.generate24WordsMnemonic();
print(mnemonic);
// mango debris lumber vivid bar risk prosper verify photo put ridge sell range pet indoor lava sister around panther brush twice cattle sauce romance
生成密钥对
Wallet wallet = await Wallet.from("mango debris lumber vivid bar risk prosper verify photo put ridge sell range pet indoor lava sister around panther brush twice cattle sauce romance");
KeyPair keyPair0 = await wallet.getKeyPair(index: 0);
print("${keyPair0.accountId} : ${keyPair0.secretSeed}");
// GBYTVBTOVXBIT23X4YUEE32QBAAA537OAF553FWABUAZHT3FNPN3FUGG : SBEQZ4XGS434POXNQYUXQYFV6JYUHV56U2MNMUZBBBLBGR5X6PUUCYO5
KeyPair keyPair1 = await wallet.getKeyPair(index: 1);
print("${keyPair1.accountId} : ${keyPair1.secretSeed}");
// GD5JFZ6U4TBKLWOVGAJQZ4CWRHNVXIFF65BBXZG6UEQE74RUXWAKQVQN : SD3IXULYMZKB6ML7AJW4OLAXKN6U3BYDUMOZLKUZTCCGZXUFXAS7NKIO
支持的语言有:英语、法语、西班牙语、意大利语、韩语、日语、简体中文和繁体中文。在我们的SEP-0005示例中查找更多详细信息。
2. 创建账户
在密钥对生成后,您已经获得了地址,但它没有激活,除非有人向其中转入至少1个Lumen。
2.1 测试网
如果您想在Stellar测试网络中进行操作,SDK可以请求Friendbot为您创建一个账户,如下所示。
bool funded = await FriendBot.fundTestAccount(keyPair.accountId);
print ("funded: ${funded}");
2.2 公共网络
另一方面,如果您想在公共网络中创建账户,您应该从交易所购买一些Stellar Lumens (XLM)。当您将Lumens提取到您的新账户时,交易所会自动为您创建账户。但是,如果您想从您自己的另一个账户创建账户,您可以运行以下代码。
/// Create a key pair for your existing account.
KeyPair keyA = KeyPair.fromSecretSeed("SAPS66IJDXUSFDSDKIHR4LN6YPXIGCM5FBZ7GE66FDKFJRYJGFW7ZHYF");
/// Load the data of your account from the stellar network.
AccountResponse accA = await sdk.accounts.account(keyA.accountId);
/// Create a keypair for a new account.
KeyPair keyB = KeyPair.random();
/// Create the operation builder.
CreateAccountOperationBuilder createAccBuilder = CreateAccountOperationBuilder(keyB.accountId, "3"); // send 3 XLM (lumen)
// Create the transaction.
Transaction transaction = new TransactionBuilder(accA)
.addOperation(createAccBuilder.build())
.build();
/// Sign the transaction with the key pair of your existing account.
transaction.sign(keyA, Network.PUBLIC);
/// Submit the transaction to the stellar network.
SubmitTransactionResponse response = await sdk.submitTransaction(transaction);
if (response.success) {
print ("account ${keyB.accountId} created");
}
3. 检查账户
3.1 基本信息
在创建账户后,我们可以检查账户的基本信息。
String accountId = "GASYKQXV47TPTB6HKXWZNB6IRVPMTQ6M6B27IM5L2LYMNYBX2O53YJAL";
// Request the account data.
AccountResponse account = await sdk.accounts.account(accountId);
// You can check the `balance`, `sequence`, `flags`, `signers`, `data` etc.
for (Balance balance in account.balances) {
switch (balance.assetType) {
case Asset.TYPE_NATIVE:
print("Balance: ${balance.balance} XLM");
break;
default:
print("Balance: ${balance.balance} ${balance
.assetCode} Issuer: ${balance.assetIssuer}");
}
}
print("Sequence number: ${account.sequenceNumber}");
for (Signer signer in account.signers) {
print("Signer public key: ${signer.accountId}");
}
for (String key in account.data.keys) {
print("Data key: ${key} value: ${account.data[key]}");
}
3.2 检查付款
您可以检查与账户相关的付款。
Page<OperationResponse> payments = await sdk.payments.forAccount(accountAId).order(RequestBuilderOrder.DESC).execute();
for (OperationResponse response in payments.records) {
if (response is PaymentOperationResponse) {
PaymentOperationResponse por = response as PaymentOperationResponse;
if (por.transactionSuccessful) {
print("Transaction hash: ${por.transactionHash}");
}
}
}
您可以使用:limit、order和cursor来定制查询。获取账户、账本和交易的最新付款。
Horizon支持SSE用于推送数据。您可以这样使用它:
String accountId = "GDXPJR65A6EXW7ZIWWIQPO6RKTPG3T2VWFBS3EAHJZNFW6ZXG3VWTTSK";
sdk.payments.forAccount(accountId).cursor("now").stream().listen((response) {
if (response is PaymentOperationResponse) {
switch (response.assetType) {
case Asset.TYPE_NATIVE:
print("Payment of ${response.amount} XLM from ${response.sourceAccount} received.");
break;
default:
print("Payment of ${response.amount} ${response.assetCode} from ${response.sourceAccount} received.");
}
}
});
3.3 检查其他
就像付款一样,您可以检查assets、transactions、effects、offers、operations、ledgers等。
sdk.assets.
sdk.transactions.
sdk.effects.
sdk.offers.
sdk.operations.
sdk.orderBook.
sdk.trades.
// add so on ...
4. 构建和提交交易
示例“发送原生付款”
KeyPair senderKeyPair = KeyPair.fromSecretSeed("SAPS66IJDXUSFDSDKIHR4LN6YPXIGCM5FBZ7GE66FDKFJRYJGFW7ZHYF");
String destination = "GDXPJR65A6EXW7ZIWWIQPO6RKTPG3T2VWFBS3EAHJZNFW6ZXG3VWTTSK";
// Load sender account data from the stellar network.
AccountResponse sender = await sdk.accounts.account(senderKeyPair.accountId);
// Build the transaction to send 100 XLM native payment from sender to destination
Transaction transaction = new TransactionBuilder(sender)
.addOperation(PaymentOperationBuilder(destination,Asset.NATIVE, "100").build())
.build();
// Sign the transaction with the sender's key pair.
transaction.sign(senderKeyPair, Network.TESTNET);
// Submit the transaction to the stellar network.
SubmitTransactionResponse response = await sdk.submitTransaction(transaction);
if (response.success) {
print("Payment sent");
}
5. 使用Federation解析Stellar地址
FederationResponse response = await Federation.resolveStellarAddress("bob*soneso.com");
print(response.stellarAddress);
// bob*soneso.com
print(response.accountId);
// GBVPKXWMAB3FIUJB6T7LF66DABKKA2ZHRHDOQZ25GBAEFZVHTBPJNOJI
print(response.memoType);
// text
print(response.memo);
// hello memo text
文档和示例
示例
| 示例 | 描述 | 文档 |
|---|---|---|
| 创建新账户 | 新账户由另一个账户创建。在测试网中,我们也可以使用Friendbot。 | 创建账户 |
| 发送原生付款 | 发送方向接收方发送100 XLM(Stellar Lumens)原生付款。 | 付款 |
| 创建信任线 | 一个信任方账户信任一个发行方账户来获取特定的自定义代币。发行方账户现在可以向信任方账户发送代币。 | 资产与信任线和更改信任 |
| 发送代币 - 非原生付款 | 两个账户信任同一个发行方账户和自定义代币。现在他们可以互相发送这些自定义代币了。 | 资产与信任线和更改信任和付款 |
| 路径付款 | 两个账户信任不同的自定义代币。发送方想发送代币“IOM”,但接收方想接收代币“ECO”。 | 路径付款严格发送和路径付款严格接收 |
| 合并账户 | 将一个账户合并到另一个账户。第一个账户被删除,第二个账户接收资金。 | 账户合并 |
| 增加序列号 | 在此示例中,我们将账户的序列号增加到一个更高的数字。 | 增加序列号 |
| 管理数据 | 设置、修改或删除附加到特定账户的数据条目(名称/值对)。 | 管理数据 |
| 管理买入挂单 | 创建、更新或删除一个以另一种资产购买一种资产的挂单,也称为传统订单簿上的“买入”订单。 | 管理买入挂单 |
| 管理卖出挂单 | 创建、更新或删除一个以另一种资产出售一种资产的挂单,也称为传统订单簿上的“卖出”订单或“挂单”。 | 管理卖出挂单 |
| 创建被动卖出挂单 | 创建、更新和删除一个以另一种资产出售一种资产的挂单,也称为传统订单簿上的“卖出”订单或“挂单”,不接受价格相等的反向挂单。 | 创建被动卖出挂单 |
| 更改信任 | 创建、更新和删除信任线。 | 更改信任和资产文档 |
| 允许信任 | 更新现有信任线的授权标志。 | 允许信任和资产文档 |
| 流式传输付款 | 监听给定账户接收的付款。 | 流式传输 |
| 费用增长交易 | 费用增长交易允许任意账户支付交易费用。 | 费用增长交易 |
| 混合账户 | 在此示例中,我们将了解如何在付款操作中使用混合账户。 | 一流的混合账户 |
| SEP-0001:stellar.toml | 在此示例中,您可以找到有关组织Stellar集成的信息。 | SEP-0001 |
| SEP-0002:Federation | 本示例展示了如何通过联合协议解析Stellar地址、Stellar账户ID、交易ID和转发。 | SEP-0002 |
| SEP-0005:密钥派生 | 在这些示例中,您可以看到如何使用Flutter SDK为不同语言生成12或24个单词的助记词,如何从助记词(带或不带BIP 39密码短语)生成密钥对,以及如何从BIP 39种子生成密钥对。 | SEP-0005 |
| SEP-0006:存款和提款API | 在这些示例中,您可以看到如何使用SDK与Anchor进行通信。 | SEP-0006 |
| SEP-0010:Stellar Web身份验证 | 本示例展示了如何与任何需要Stellar账户所有权验证的Web服务进行身份验证。 | SEP-0010 |
| SEP-0011:Txrep | 本示例展示了如何从交易生成Txrep(Stellar交易的人类可读的低级表示),以及如何从Txrep字符串创建交易对象。 | SEP-0011 |
| SEP-0012:KYC API | 在这些示例中,您可以看到如何使用SDK将KYC数据发送到Anchor和其他服务。 | SEP-0012 |
其他示例可在测试中找到。
已实现的SEP
- SEP-0001 (stellar.toml)
- SEP-0002 (Federation)
- SEP-0005 (Key derivation)
- SEP-0010 (Stellar Web Authentication)
- SEP-0011 (Txrep)
许可证
Stellar Sdk for Flutter 在MIT许可下获得许可。有关详细信息,请参阅LICENSE文件。