星雲 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學習記錄

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章