Flutter插件dartsv的使用_TwoStack WalletSDK 是一个基于Dart语言的比特币库

发布于 1周前 作者 nodeper 最后一次编辑是 5天前 来自 Flutter

Flutter插件dartsv的使用_TwoStack WalletSDK 是一个基于Dart语言的比特币库

引言

TwoStack WalletSDK 是一个基于Dart语言的比特币库,主要用于构建多平台应用(如使用Flutter框架)或服务器端比特币应用(如使用Serverpod框架)。该库遵循BitcoinSV的理念,即大规模链上扩展、协议稳定性和原生比特币协议实现。

版本2.x (2023年8月)

版本2.x是一个重大重构,打破了多个以前库API的后向兼容性。主要更新包括:

  • 新增TransactionBuilder类用于组成交易
  • 去除旧的Builder接口,直接附着在Transaction类上
  • 完全重写了脚本解释器
  • Sighash类现在暴露了SigHash Pre-Image;在创建OP_PUSH_TX支付脚本时非常有用。
  • 新增ScriptBuilder类,使创建自定义锁定/解锁脚本更加容易。
  • 合并贡献代码以提高Flutter Web支持。

支持的功能

  • 自定义脚本构建接口,支持脚本内的新型锁定/支付条件

  • 预制库代码支持标准锁定/解锁脚本

    • P2PKH交易
    • P2SH交易
    • P2MS交易(裸多签)
    • P2PK交易
    • 数据仅交易(锁定于OP_FALSE OP_RETURN
    • 可花数据载体交易(锁定于PUSH_DATA [your_data] OP_DROP [P2PKH锁定代码]
  • HD密钥派生(BIP32)

  • 原始比特币地址格式

  • 比特币签名消息

  • BIP39助记词种子支持

  • 内置比特币脚本解释器

  • ECIES加密/解密(支持Electrum ECIES / BIE1)

交易API示例

var utxo = txWithUTXO.outputs[0]; 
var outpoint = TransactionOutpoint(txWithUTXO.id, 0, utxo.satoshis, utxo.script);
var signer = TransactionSigner(SighashType.SIGHASH_FORKID.value | SighashType.SIGHASH_ALL.value, privateKey);

var unlocker = P2PKHUnlockBuilder(privateKey.publicKey);
    
var transaction = TransactionBuilder()
    .spendFromOutpointWithSigner(signer, outpoint, TransactionInput.MAX_SEQ_NUMBER, unlocker)
    .spendToPKH(recipientAddress, BigInt.from(50000000)) //花费一半的比特币
    .sendChangeToPKH(changeAddress) //将更改发送到不同的地址
    .withFeePerKb(50) //设置每千字节费用为50satoshis
    .build(false); //构建交易,禁用检查

// 此时你已经得到了一个完整的已签名交易,准备广播

try {
  transaction.verify(); //执行预广播合理性检查
} on VerificationException catch (ex){
  print("Transaction failed verification - ${ex.cause}");
}

安装

此库使用Dart SDK版本3.0.7构建(https://dart.dev/tools/sdk)。从版本1.0.0起,此库支持Dart Null Safety。当前所需的最低Dart SDK版本是22.17.0

在项目根目录下运行以下命令来拉取所需的支持Dart库:

pub get

运行测试

在项目根目录下运行以下命令来运行测试:

pub run test

更多关于Flutter插件dartsv的使用_TwoStack WalletSDK 是一个基于Dart语言的比特币库的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter插件dartsv的使用_TwoStack WalletSDK 是一个基于Dart语言的比特币库的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


关于Flutter中的未知功能插件dartsv(假设这是一个实际存在的插件,尽管在Flutter社区中它可能并不广为人知),探索和使用的具体方法通常需要参考该插件的官方文档或源代码。由于我无法直接访问外部资源或实时查询特定插件的详细信息,我将提供一个通用的探索和使用Flutter插件的代码框架,你可以根据dartsv插件的实际API进行调整。

1. 添加依赖

首先,你需要在pubspec.yaml文件中添加dartsv插件的依赖项(假设它已经在pub.dev上发布):

dependencies:
  flutter:
    sdk: flutter
  dartsv: ^x.y.z  # 替换为实际版本号

然后运行flutter pub get来安装依赖。

2. 导入插件

在你的Dart文件中导入dartsv插件:

import 'package:dartsv/dartsv.dart';

3. 使用插件功能

由于dartsv的具体功能未知,我将提供一个假设性的使用案例。假设dartsv提供了处理某种数据结构(比如SV数据)的功能,你可以这样使用它:

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('DartSV Example'),
        ),
        body: Center(
          child: FutureBuilder<String>(
            future: fetchAndProcessSVData(),
            builder: (context, snapshot) {
              if (snapshot.connectionState == ConnectionState.done) {
                if (snapshot.hasError) {
                  return Text('Error: ${snapshot.error}');
                } else {
                  return Text('Processed Data: ${snapshot.data}');
                }
              } else {
                return CircularProgressIndicator();
              }
            },
          ),
        ),
      ),
    );
  }

  Future<String> fetchAndProcessSVData() async {
    // 假设fetchSVData是一个从网络或其他来源获取SV数据的函数
    String rawSVData = await fetchSVData();

    // 使用dartsv插件处理数据
    var processedData = processSVData(rawSVData);

    // 返回处理后的数据(这里假设处理后的数据是一个字符串)
    return processedData.toString();
  }

  // 假设函数,需要根据实际情况实现
  Future<String> fetchSVData() async {
    // 模拟网络请求
    await Future.delayed(Duration(seconds: 2));
    return '{"key": "value"}'; // 示例数据
  }

  // 使用dartsv插件处理SV数据的假设函数
  dynamic processSVData(String rawData) {
    // 这里应该使用dartsv插件提供的API来处理数据
    // 由于不知道dartsv的具体API,这里只是一个占位符
    // 假设dartsv有一个parse方法可以将JSON字符串解析为SV对象
    var svObject = Dartsv.parse(rawData);
    // 假设我们可以从svObject中获取某个值
    return svObject['key'];
  }
}

注意事项

  1. 查阅文档:务必查阅dartsv插件的官方文档,了解它的具体API和使用方法。
  2. 错误处理:在实际应用中,添加适当的错误处理逻辑,以处理可能出现的异常情况。
  3. 更新依赖:定期检查并更新dartsv插件,以确保你使用的是最新版本,并修复任何已知问题。

由于dartsv是一个假设的插件,上述代码中的函数和方法名(如Dartsv.parse)需要根据实际情况进行调整。如果dartsv插件在pub.dev上有文档或示例代码,请务必参考官方资源。

回到顶部