用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简明教程 - 汇智网

目录
相关文章
|
3天前
|
JavaScript 前端开发 测试技术
探索现代JavaScript开发的最佳实践
本文探讨了现代JavaScript开发中的最佳实践,涵盖ES6+特性、现代框架使用、模块化与代码分割、测试驱动开发、代码质量与性能优化、异步编程、SPA与MPA架构选择、服务端渲染和静态站点生成等内容,旨在帮助开发者提升代码质量和开发效率。
|
5天前
|
供应链 物联网 区块链
新技术趋势与应用:探索区块链、物联网和虚拟现实的未来
【10月更文挑战第37天】本文将探讨新兴技术如区块链、物联网和虚拟现实的发展趋势和应用场景。我们将从这些技术的基本原理出发,分析它们在当前社会中的应用,并预测未来的发展方向。同时,我们还将提供一些代码示例,以帮助读者更好地理解这些技术。
|
5天前
|
供应链 算法 区块链
深入浅出区块链技术:从原理到应用
【10月更文挑战第21天】 本文旨在为读者提供一个关于区块链技术的全面概述,包括其工作原理、关键技术特点以及在现实世界中的应用案例。通过本文,您将能够理解区块链如何在不依赖中心化机构的情况下确保数据的安全性和不可篡改性,并探讨这项技术如何被应用于金融、供应链管理等多个领域,以提高效率和透明度。
14 1
|
6天前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端开发
【10月更文挑战第36天】本文将引导您探索Node.js的世界,通过实际案例揭示其背后的原理和实践方法。从基础的安装到高级的异步处理,我们将一起构建一个简单的后端服务,并讨论如何优化性能。无论您是新手还是有经验的开发者,这篇文章都将为您提供新的视角和深入的理解。
|
7天前
|
运维 监控 JavaScript
鸿蒙next版开发:分析JS Crash(进程崩溃)
在HarmonyOS 5.0中,JS Crash指未处理的JavaScript异常导致应用意外退出。本文详细介绍如何分析JS Crash,包括异常捕获、日志分析和典型案例,帮助开发者定位问题、修复错误,提升应用稳定性。通过DevEco Studio收集日志,结合HiChecker工具,有效解决JS Crash问题。
24 4
|
8天前
|
供应链 安全 中间件
深度探索区块链技术在供应链管理中的应用与挑战###
本文聚焦于区块链技术在现代供应链管理中的创新应用及其面临的挑战。通过分析区块链的去中心化、透明性和不可篡改性如何重塑供应链结构,提升效率与信任度,本文进一步探讨了实施过程中的技术融合难题、数据隐私保护、标准化缺失及成本控制等关键问题,为相关企业和技术开发者提供策略指导与未来趋势洞察。 ###
|
8天前
|
供应链 区块链
探索区块链技术在供应链管理中的应用与挑战
本文深入探讨了区块链技术在现代供应链管理中的创新应用及其面临的挑战。通过分析区块链的去中心化特性、不可篡改性以及透明度,阐述了如何利用这一技术优化供应链流程,提高数据共享的安全性与效率。同时,文章也指出了实施过程中的技术难题、成本考量及法规限制等挑战,为读者提供了对区块链技术在供应链领域应用前景的全面认识。
|
8天前
|
供应链 物联网 区块链
未来已来:探索区块链、物联网与虚拟现实技术的融合趋势与实践应用
【10月更文挑战第34天】随着科技的迅猛发展,新兴技术如区块链、物联网(IoT)和虚拟现实(VR)正逐步渗透到我们的生活中,不仅改变着我们的生活方式,还在重塑全球的经济结构。本文将深入探讨这些技术的发展现状、相互之间的融合趋势以及在实际应用中的创新场景。我们将通过具体案例分析,揭示这些技术如何共同作用,推动社会向更加智能、互联的方向发展。
23 3
|
9天前
|
供应链 区块链
深入探索区块链技术在供应链管理中的应用
本文通过分析区块链的基本概念、技术特性及其在供应链管理中的创新应用,探讨了区块链技术如何提高供应链的透明度、效率和安全性。文章首先介绍了区块链的定义及工作原理,随后详细阐述了区块链在供应链中的具体应用场景,包括数据共享、货物追踪、合同执行等方面。最后,文章讨论了区块链技术面临的挑战和未来发展趋势,为供应链管理领域提供了新的视角和技术解决方案。
|
9天前
|
供应链 分布式数据库 区块链
深度探索:区块链技术在供应链管理中的应用与优化####
【10月更文挑战第29天】 本文深入剖析了区块链技术如何革新供应链管理,通过构建去中心化的信任机制,显著提升透明度、效率及安全性。我们将探讨区块链在追踪产品来源、简化交易流程、增强数据安全等方面的具体应用实例,并分析其面临的挑战与未来发展趋势,为相关领域提供有价值的参考与启示。 ####
31 2