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

目录
相关文章
|
21天前
|
存储 安全 区块链
区块链在房地产交易中的应用:革新房产市场的未来
区块链在房地产交易中的应用:革新房产市场的未来
160 80
|
13天前
|
存储 算法 物联网
区块链在能源交易中的应用:打造去中心化能源市场
区块链在能源交易中的应用:打造去中心化能源市场
85 22
|
23天前
|
存储 供应链 安全
区块链技术在选举中的应用:透明与安全的新时代
区块链技术在选举中的应用:透明与安全的新时代
64 16
|
25天前
|
存储 安全 数据管理
区块链在医疗数据管理中的应用:安全与隐私的新纪元
区块链在医疗数据管理中的应用:安全与隐私的新纪元
119 16
|
24天前
|
缓存 NoSQL JavaScript
Vue.js应用结合Redis数据库:实践与优化
将Vue.js应用与Redis结合,可以实现高效的数据管理和快速响应的用户体验。通过合理的实践步骤和优化策略,可以充分发挥两者的优势,提高应用的性能和可靠性。希望本文能为您在实际开发中提供有价值的参考。
52 11
|
1月前
|
敏捷开发 人工智能 JavaScript
Figma-Low-Code:快速将Figma设计转换为Vue.js应用,支持低代码渲染、数据绑定
Figma-Low-Code 是一个开源项目,能够直接将 Figma 设计转换为 Vue.js 应用程序,减少设计师与开发者之间的交接时间,支持低代码渲染和数据绑定。
100 3
Figma-Low-Code:快速将Figma设计转换为Vue.js应用,支持低代码渲染、数据绑定
|
1月前
|
JavaScript 前端开发
【Vue.js】监听器功能(EventListener)的实际应用【合集】
而此次问题的核心就在于,Vue实例化的时机过早,在其所依赖的DOM结构尚未完整构建完成时就已启动挂载流程,从而导致无法找到对应的DOM元素,最终致使计算器功能出现异常,输出框错误地显示“{{current}}”,并且按钮的交互功能也完全丧失响应。为了让代码结构更为清晰,便于后续的维护与管理工作,我打算把HTML文件中标签内的JavaScript代码迁移到外部的JS文件里,随后在HTML文件中对其进行引用。
49 8
|
2月前
|
供应链 安全 分布式数据库
探索区块链技术在供应链管理中的应用
【10月更文挑战第21天】 本文深入探讨了区块链技术如何在供应链管理中发挥关键作用,通过具体案例分析,揭示了区块链提高透明度、降低成本和增强安全性的潜力。文章首先概述了区块链技术的基本原理及其对传统供应链模式的挑战,接着详细讨论了区块链如何在不同供应链环节中实施,并分析了其带来的变革。最后,文章提出了企业在采纳区块链技术时可能面临的挑战和应对策略,为供应链管理者提供了宝贵的参考。
158 26
|
22天前
|
监控 安全 中间件
Next.js 实战 (十):中间件的魅力,打造更快更安全的应用
这篇文章介绍了什么是Next.js中的中间件以及其应用场景。中间件可以用于处理每个传入请求,比如实现日志记录、身份验证、重定向、CORS配置等功能。文章还提供了一个身份验证中间件的示例代码,以及如何使用限流中间件来限制同一IP地址的请求次数。中间件相当于一个构建模块,能够简化HTTP请求的预处理和后处理,提高代码的可维护性,有助于创建快速、安全和用户友好的Web体验。
|
2月前
|
Web App开发 JavaScript 前端开发
Node.js开发
Node.js开发
75 13

热门文章

最新文章