用JavaScript开发Stellar区块链应用

简介:

Stellar JS SDK封装了Stellar交易的提交,以及与Stellar Horizon API服务器的交互过程,可以运行在Node.js环境或Web浏览器中。js-stellar-sdk主要有两个作用:1、通过HorizonAPI服务器查询Stellar区块链数据 2、构建Stellar交易、签名并提交到Stellar网络中。

相关推荐:汇智网 区块链开发系列教程

1、构造Horizon访问请求

js-stellar-sdk使用Builder模式来创建要发送给Horizon API服务器的请求。从一个server对象开始,你可以通过链式调用来生成最终的查询请求。例如:

var StellarSdk = require('stellar-sdk');
var server = new StellarSdk.Server('https://horizon-testnet.stellar.org');
// get a list of transactions that occurred in ledger 1400
server.transactions()
    .forLedger(1400)
    .call().then(function(r){ console.log(r); });

// get a list of transactions submitted by a particular account
server.transactions()
    .forAccount('GASOCNHNNLYFNMDJYQ3XFMI7BYHIOCFW3GJEOWRPEGK2TDPGTG2E5EDW')
    .call().then(function(r){ console.log(r); });

一旦请求构造好了,就可以调用.call().stream()来提交请求。
.call()将返回一个promise对象,其解析结果为Horizon服务器的响应。

2、发送流式请求

许多请求可以使用.stream()来调用。与.call()返回promise对象不同,.stream()将返回一个EventSource对象。Horizon API服务器会自动推送相关的数据给请求的客户端。

例如,下面的代码显示输出指定的Stellar账户的交易:

var StellarSdk = require('stellar-sdk')
var server = new StellarSdk.Server('https://horizon-testnet.stellar.org');
var lastCursor=0; // or load where you left off

var txHandler = function (txResponse) {
    console.log(txResponse);
};

var es = server.transactions()
    .forAccount(accountAddress)
    .cursor(lastCursor)
    .stream({
        onmessage: txHandler
    })

3、处理Stellar Horizon API服务器的响应

3.1 Stellar XDR格式解码

Horizon API服务器的交易访问端结点会以原始XDR格式返回某些字段。你可以使用.fromXDR()将XDR转换为JSON格式。

例如,下面的代码重写了上面示例中的txHandler来将XDR字段显示为JSON格式:

var txHandler = function (txResponse) {
    console.log( 
      JSON.stringify(StellarSdk.xdr.TransactionEnvelope.fromXDR(txResponse.envelope_xdr, 'base64')) 
    );
    console.log( 
      JSON.stringify(StellarSdk.xdr.TransactionResult.fromXDR(txResponse.result_xdr, 'base64')) 
    );
    console.log( 
      JSON.stringify(StellarSdk.xdr.TransactionMeta.fromXDR(txResponse.result_meta_xdr, 'base64')) 
    );
};

3.2 Horizon响应结果中的链接跟随

在Horizon响应中包含的链接已经被转换为对应的方法调用,这让你可以简单地通过.next()方法来逐页查看结果,同时也让获取额外信息更加轻松。例如:

server.payments()
    .limit(1)
    .call()
    .then(function(response){
        // will follow the transactions link returned by Horizon
        response.records[0].transaction().then(function(txs){
            console.log(txs);
        });
    });

4、Stellar交易构建与广播

4.1 Stellar交易构建

Stellar的交易构建过程稍微复杂一点,我们将在另一篇文章中介绍,你可以先查看英文原文

4.2 Stellar交易提交

一旦创建好了交易,就可以使用Server.submitTransaction()方法将其提交到
Stellar网络中。

const StellarSdk = require('stellar-sdk')
StellarSdk.Network.useTestNetwork();
const server = new StellarSdk.Server('https://horizon-testnet.stellar.org');

(async function main() {
    const account = await server.loadAccount(publicKey);

    /* 
        Right now, we have one function that fetches the base fee.
        In the future, we'll have functions that are smarter about suggesting fees,
        e.g.: `fetchCheapFee`, `fetchAverageFee`, `fetchPriorityFee`, etc.
    */
    const fee = await server.fetchBaseFee();

    const transaction = new StellarSdk.TransactionBuilder(account, { fee })
        .addOperation(
            // this operation funds the new account with XLM
            StellarSdk.Operation.payment({
                destination: "GASOCNHNNLYFNMDJYQ3XFMI7BYHIOCFW3GJEOWRPEGK2TDPGTG2E5EDW",
                asset: StellarSdk.Asset.native(),
                amount: "20000000"
            })
        )
        .setTimeout(30)
        .build();

    // sign the transaction
    transaction.sign(StellarSdk.Keypair.fromSecret(secretString)); 

    try {
        const transactionResult = await server.submitTransaction(transaction);
        console.log(transactionResult);
    } catch (err) {
        console.error(err);
    }
})()

原文链接:Stellar JS SDK简明教程 - 汇智网

目录
相关文章
|
14天前
|
前端开发 机器人 API
前端大模型入门(一):用 js+langchain 构建基于 LLM 的应用
本文介绍了大语言模型(LLM)的HTTP API流式调用机制及其在前端的实现方法。通过流式调用,服务器可以逐步发送生成的文本内容,前端则实时处理并展示这些数据块,从而提升用户体验和实时性。文章详细讲解了如何使用`fetch`发起流式请求、处理响应流数据、逐步更新界面、处理中断和错误,以及优化用户交互。流式调用特别适用于聊天机器人、搜索建议等应用场景,能够显著减少用户的等待时间,增强交互性。
108 2
|
3天前
|
存储 安全 分布式数据库
探索区块链技术在数据安全中的应用
【10月更文挑战第21天】 本文深入探讨了区块链技术在增强数据安全性方面的应用。通过对区块链基本原理的解释,结合其在数据存储、传输和访问控制中的具体实现方式,本文揭示了区块链技术如何有效防止数据篡改和未授权访问。此外,文章还讨论了区块链技术面临的挑战及其未来发展趋势,为读者提供了一个全面了解区块链技术在数据安全领域应用的视角。
16 4
|
13天前
|
小程序 JavaScript 前端开发
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
238 1
|
2天前
|
人工智能 供应链 安全
探索区块链技术的奥秘与应用
在数字化浪潮中,区块链技术以其独特的去中心化、不可篡改和透明性特点,正逐渐改变着我们的世界。本文旨在深入浅出地解析区块链技术的基本原理,探讨其在金融、供应链管理、版权保护等领域的创新应用,并展望未来发展趋势,为读者揭开这一神秘面纱背后的真实面貌。
|
4天前
|
开发框架 JavaScript 前端开发
HarmonyOS UI开发:掌握ArkUI(包括Java UI和JS UI)进行界面开发
【10月更文挑战第22天】随着科技发展,操作系统呈现多元化趋势。华为推出的HarmonyOS以其全场景、多设备特性备受关注。本文介绍HarmonyOS的UI开发框架ArkUI,探讨Java UI和JS UI两种开发方式。Java UI适合复杂界面开发,性能较高;JS UI适合快速开发简单界面,跨平台性好。掌握ArkUI可高效打造符合用户需求的界面。
21 8
|
2天前
|
JavaScript 前端开发
javascript开发的简单的弹幕插件
这是一个原生javascript开发的简单的弹幕插件,具有美观、易用,占用的资源较低等特点,可以给弹幕设置内容、颜色、头像、链接地址等属性,鼠标悬停等,简单实用,欢迎下载!
18 5
|
5天前
|
安全 物联网 区块链
探索未来:区块链技术在物联网和虚拟现实中的融合应用
【10月更文挑战第21天】本文深入探讨了区块链、物联网(IoT)和虚拟现实(VR)这三项前沿技术的发展趋势,并分析了它们如何相互作用以推动创新。我们将通过具体案例来揭示这些技术如何改变我们的工作和生活方式,同时提供对未来发展的一些预测。
|
8天前
|
存储 供应链 监控
如何在供应链行业中应用区块链
【10月更文挑战第26天】区块链在供应链行业的应用包括提高透明度、优化流程、增强安全性和改善金融服务。具体表现为全流程信息记录与追溯、智能合约自动化执行、数据安全与隐私保护、应收账款融资及信用评估等,促进供应链的高效协同与信任建设。
|
4天前
|
JavaScript 前端开发 开发者
探索JavaScript原型链:深入理解与实战应用
【10月更文挑战第21天】探索JavaScript原型链:深入理解与实战应用
12 1
|
5天前
|
供应链 物联网 区块链
未来技术浪潮之巅:区块链、物联网与虚拟现实的应用探索
【10月更文挑战第20天】随着技术的飞速发展,新兴技术如区块链、物联网和虚拟现实正在重塑我们的工作和生活方式。本文将深入探讨这些技术的发展趋势和应用场景,并展示如何通过代码示例实现它们在现实世界中的应用。让我们一起揭开这些技术神秘面纱,探索它们在未来的无限可能!

热门文章

最新文章