Stellar SDK for Flutter

Soneso 开源 Stellar SDK for Flutter 使用 Dart 构建,并提供构建和签名交易、连接和查询 Horizon 的 API。

安装

来自pub.dev

  1. 将依赖添加到您的pubspec.yaml文件中
dependencies:
  stellar_flutter_sdk: ^1.2.3
  1. 安装它(命令行或IDE)
flutter pub get
  1. 在您的源文件中导入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插件。这是我们推荐的分步操作指南

  1. 克隆此仓库。
  2. 在您的IDE(例如Android Studio)中打开项目。
  3. 打开pubspec.yaml文件,然后在IDE中按Pub get
  4. 转到项目的test目录,从那里运行一个测试,您就可以开始了!

添加到您的应用

  1. 在您的Flutter应用中,将本地依赖添加到pubspec.yaml,然后运行pub get
dependencies:
   flutter:
     sdk: flutter
   stellar_flutter_sdk:
     path: ../stellar_flutter_sdk
  1. 在您的源文件中导入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}");
    }
  }
}

您可以使用:limitordercursor来定制查询。获取账户、账本和交易的最新付款。

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 检查其他

就像付款一样,您可以检查assetstransactionseffectsoffersoperationsledgers等。

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

许可证

Stellar Sdk for Flutter 在MIT许可下获得许可。有关详细信息,请参阅LICENSE文件。

GitHub

https://github.com/Soneso/stellar_flutter_sdk