星云 NasDapp 开发3

这次通过一个例子学习 rpc 交互

代码地址

nebjs

插件

rpc 文档

运行代码

SuperDictionary 的使用过程可参见以下视频:
https://www.bilibili.com/video/av23217213/

不能直接通过 file://来访问网页
配置一个 nginx,通过localhost来访问,nginx配置好之后可能会有403权限问题我是通过 https://blog.csdn.net/litoujkl/article/details/52250782 解决的

源码中的 lib 里面有所有的依赖不用去下载源码编译,再给浏览器装上插件就可以用了

调用nebulas

查看index.html代码

<script src=lib/nebulas.js></script>
   var dappAddress = "n1zXt64A4q3M5LKyyHY3EqtEUpQYcPqo3Bo";

    var nebulas = require("nebulas"),
        Account = nebulas.Account,
        neb = new nebulas.Neb();
    neb.setRequest(new nebulas.HttpRequest("https://testnet.nebulas.io"));
 // 搜索功能: 查找Super-Dictionary 中有没有该词条
    $("#search").click(function(){
        // $("#search_value").val() 搜索框内的值

        var from = Account.NewAccount().getAddressString();

        var value = "0";
        var nonce = "0"
        var gas_price = "1000000"
        var gas_limit = "2000000"
        var callFunction = "get";
        var callArgs = "[\"" + $("#search_value").val() + "\"]"; //in the form of ["args"]
        var contract = {
            "function": callFunction,
            "args": callArgs
        }

        neb.api.call(from,dappAddress,value,nonce,gas_price,gas_limit,contract).then(function (resp) {
            cbSearch(resp)
        }).catch(function (err) {
            //cbSearch(err)
            console.log("error:" + err.message)
        })

    })

通过 call 调用智能合约

from: 用户的账户地址
to: 智能合约地址
value: 要存入智能合约代币数量
nonce: 比创建者当前的nonce多1,可以通过GetAccountState获取创建前当前nonce
gasPrice:部署智能合约用到的gasPrice,可以通过GetGasPrice获取,或者使用默认值:"1000000"gasLimit: 部署合约的gasLimit,通过EstimateGas可以获取部署合约的gas消耗,不能使用默认值,也可以设置一个较大值,执行时以实际使用计算。
contract: 合约信息,部署合约时传入的参数
function: 调用合约方法
args: 合约方法参数,无参数为空字符串,有参数时为JSON数组

使用 nebPay

  var NebPay = require("nebpay");     //https://github.com/nebulasio/nebPay
    var nebPay = new NebPay();
    var serialNumber

    $("#push").click(function() {

        var to = dappAddress;
        var value = "0";
        var callFunction = "save"
        var callArgs = "[\"" + $("#search_value").val() + "\",\"" + $("#add_value").val() + "\"]"

        serialNumber = nebPay.call(to, value, callFunction, callArgs, {    //使用nebpay的call接口去调用合约,
            listener: cbPush        //设置listener, 处理交易返回信息
        });

        intervalQuery = setInterval(function () {
            funcIntervalQuery();
        }, 5000);
    });

    var intervalQuery

    function funcIntervalQuery() {
        nebPay.queryPayInfo(serialNumber)   //search transaction result from server (result upload to server by app)
            .then(function (resp) {
                console.log("tx result: " + resp)   //resp is a JSON string
                var respObject = JSON.parse(resp)
                if(respObject.code === 0){
                    alert(`set ${$("#search_value").val()} succeed!`)
                    clearInterval(intervalQuery)
                }
            })
            .catch(function (err) {
                console.log(err);
            });
    }

nebPay 共有5个方法

方法简介
pay用于账户间的NAS转账
nrc20pay用于NRC20代币的转账,仅接口实现,app不支持
deploy用于部署智能合约,仅接口实现(目前尚不支持该API)
call用于调用智能合约
queryPayInfo用于查询支付结果

1. 用户发起交易,Dapp 调用NebPay 发送交易信息到App,此时NebPay返回交易序列号给Dapp。
3. 用户通过App将交易发送到星云链, 并得到交易的TxHash
4. App 将交易序列号和TxHash 发送到由callback指定的交易查询服务器。
Dapp调用queryPayInfo 到交易查询服务器查询交易结果.

可以看到nebulas需要设置HttpRequest(“https://testnet.nebulas.io“));但是NebPay 并不关心当前使用的是主网或测试网只是把交易信息发给浏览器插件或手机app,由后者决定将交易发送到哪个网络。callback参数也只是决定使用哪个服务器查询交易结果,并不会影响交易发送的网络。

星云 NasDapp 开发2

星云Dapp学习记录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值