【问题标题】:Sawtooth transaction processor not working锯齿交易处理器不工作
【发布时间】:2019-06-22 15:29:26
【问题描述】:

我正在开发一个简单的钱包,用于在超级账本锯齿上存钱 webapp。我希望在特定时间间隔后存入金额。为此,我使用setInterval()。我写了一个承诺,在成功setInteval() 后解决。但我在这里面临一个问题。我的 TP 工作不正常。正在添加块,但未创建状态。

class SimpleWalletHandler extends TransactionHandler {
    constructor(){
        super(SW_FAMILY,['1.0'],[SW_NAMESPACE]);
    }
    apply(transactionProcessRequest, context){
        let payload = transactionProcessRequest.payload;
        payload = payload.toString().split(',');
        var action, amount;
        action = payload[0];
        amount = payload[1];
        let header = transactionProcessRequest.header;
        let userPublicKey = header.signerPublicKey;
        let endMinutes = 40; //Hard-coded value. Later I am going to get this from front-end
        if(action === 'deposit'){
        //I think the issue is getting raised from now on
            let p = new Promise((resolve,reject) => {
                let timer = setInterval(()=>{
                    let startMinutes = new Date().getMinutes();
                    if(startMinutes >= endMinutes){
                        console.log('From: Alice\nTo: Bob\nAmount: $99');
                        clearInterval(timer);
                        resolve(99);
                    }
                },1000);
            })
            p.then((flag) => {
                if(flag == 99){
                    let senderAddress = SW_NAMESPACE + _hash(userPublicKey).slice(-64);
                    let strAmount = amount.toString();
                    let dataBytes = encoder.encode(strAmount);
                    let entries = {
                        [senderAddress]: dataBytes
                    }
                    return context.setState(entries)
                        .then((result) => console.log(`Success${result}`))
                        .catch((error) => console.error(`Error!${error}`));
                }
            });
            return p;
        }
    }
}

我是 javascript 的初学者。请帮我解决这个问题。如果可能,请提供完整更正的 sn-p。 在此先感谢:)

【问题讨论】:

    标签: javascript node.js promise es6-promise hyperledger-sawtooth


    【解决方案1】:

    我不是 JavaScript 专家,但事务处理器必须是确定性的——包括时间无关的。也就是说,当处理事务时,总是会出现相同的结果。这是因为一个事务通常在提交时、发布时以及由每个节点处理多次。

    更好的解决方案是让守护程序或单独的客户端处理时间敏感交易的时间安排和提交(我想,比如利息和费用)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-23
      • 1970-01-01
      • 2014-02-18
      • 2011-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多