Sawtooth процессор транзакций не работает - PullRequest
0 голосов
/ 22 июня 2019

Я разрабатываю простой кошелек для веб-приложения для внесения депозита на гиперпереводной пиле. Я хочу, чтобы сумма была внесена после определенного промежутка времени. Для этого я использую 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. Пожалуйста, помогите мне решить эту проблему. Если возможно, предоставьте полный исправленный фрагмент. Заранее спасибо:)

1 Ответ

1 голос
/ 25 июня 2019

Я не эксперт по JavaScript, но обработчик транзакций должен быть детерминированным, в том числе независимым от времени.То есть, когда транзакция обрабатывается, всегда будет происходить один и тот же результат.Это связано с тем, что транзакция обычно обрабатывается несколько раз, когда она отправляется, когда публикуется, и каждым узлом.

Лучшее решение состоит в том, чтобы демон или отдельный клиент обрабатывал синхронизацию и отправку чувствительных ко времени транзакций (например,в качестве процентов и сборов, я полагаю).

...