美文网首页Dapp开发
转载—DAPP实战:从0到1全过程(8)

转载—DAPP实战:从0到1全过程(8)

作者: 03e9c48218c1 | 来源:发表于2018-08-16 10:32 被阅读13次

    转载微信订阅号(区块链之录)文章:

    DAPP实战:从0到1全过程(8)

    上篇文章为大家讲解了如何在前端通过web3j来调用合约方法,我们知道以太坊的平均出块时间是15s(设计细节可以参考:

    https://github.com/ethereum/wiki/wiki/Design-Rationale),那么当用户在页面上进行操作调用了合约方法后,DAPP需要很快做出响应,而不是等15s后才提示用户操作完成与否,此时就需要用到上篇文章里提到的调用合约方法后返回的交易hash,下面会讲解该hash该怎么使用。

    通常来说我们需要把该交易hash传递到后台,在前端给出提示信息,告诉用户该操作正在确认中,然后给出一个查看结果的页面或者在交易结束后给出推送信息。

    此时在后台,我们可以简单采用轮询的方式来验证该交易是否已经完成。

    以上篇文章里的sendCoin方法为例,当在前端调用该方法后,首先把产生的hash值传到后台保持到数据库中,然后通过轮询该hash的状态来验证,代码如下:

    letWeb3 =require('web3');

    letmysql =require('mysql');

    //初始化数据库连接

    varconnection = mysql.createConnection({    host     :'127.0.0.1',    user     :'root',    password :'123456',    database :'test'

    });connection.connect();

    letweb3;

    //连接到私链

    web3 =newWeb3(newWeb3.providers.HttpProvider('http://127.0.0.1:8545'));

    varcontractInstance = web3.eth.contract(ABI).at(contractHash);

    varquerySql ='select hash from tbl_txn  where status = 0';

    while(true){    connection.query(querySql, (err,rows) => {

    if

    (!err){

    for

    (vari =0; i < rows.length; i++) {

    var

    receipt = rows[i].hash;                web3.eth.getTransactionReceipt(receipt,(err,result) => {//从event中读取数据

    if

    (result.logs[0]){

    var

    data = result.logs[0].data;

    var

    address_from = data.substring(0,66);

    var

    address_to = data.substring(66,130);

    var

    value = data.substring(130,194);

    //输出或者存库,update db status}

    //调用合约方法

    contractInstance.getBalance.call(account, (err,res) => {

    console

    .log(res);                    });                });             }        }    });}

    主要有以下几个步骤:

    1) 从数据库中获取保持的未确定状态的交易hash;

    2)调用web3j库的getTransactionReceipt方法,如果有结果返回则表示该交易是存在的,此时如果该合约方法有创建event的话,还可以从该event中获取到写入的数据,里面的每个字段都是64位的16进制数据;

    3)拿到数据后确认交易完成后,可以更新下db里交易状态;

    4)此时还可以和前端一样调用合约里的方法。

    相关文章

      网友评论

        本文标题:转载—DAPP实战:从0到1全过程(8)

        本文链接:https://www.haomeiwen.com/subject/iisnbftx.html