cómo usar el filtro de web3.js correctamente

Quiero obtener el número de bloque basado en el hash de transacción del filtro, sin embargo, cuando agrego los siguientes códigos a mi proyecto, me pareció extraño porque a veces transfiere automáticamente el dinero dos veces y a veces tengo que transferir una segunda vez para poder verlo devolviendo el hash de la transacción.

además, no puedo recuperar el número de bloque en el filtro. Qué ocurre ?

function TransferTest() {
    alert("START TO TRANSFER")
    var Web3 = require('web3');
    var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
    var abiArray=[
        {"constant":true,"inputs":[],"name":"minter","outputs":
            [{"name":"","type":"address"}],"payable":false,"type":"function"},
        {"constant":true,"inputs":[{"name":"","type":"address"}],"name":"balances","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},
        {"constant":false,"inputs":[{"name":"receiver","type":"address"},{"name":"amount","type":"uint256"}],"name":"mint","outputs":[],"payable":false,"type":"function"},
        {"constant":false,"inputs":[{"name":"receiver","type":"address"},{"name":"amount","type":"uint256"}],"name":"send","outputs":[],"payable":false,"type":"function"},{"inputs":[],"payable":false,"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"from","type":"address"},{"indexed":false,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Sent","type":"event"}
    ];
    var object=web3.eth.getTransactionReceipt("0x327fa3ecb7f9312119201995714c6c94a92accfa1643810b2bd3ee6c4f3a038e");
    var conAddress=object.contractAddress;
    var Mycontract=web3.eth.contract(abiArray);
    var MyConIns=Mycontract.at(conAddress);
    var uAddress=document.getElementById("uAddress").value;
    var tarAddress=document.getElementById("tarAddress").value;
    var AKamount=document.getElementById("AKamount").value;
    var success=web3.personal.unlockAccount(uAddress,"carochan123");
    alert(success);
    MyConIns.send(tarAddress,AKamount,{from:uAddress});var filter=web3.eth.filter("pending");
    filter.watch(function(error, result){
        if (!error)
            alert("monitor");
            alert(result);
        var block = web3.eth.getBlock(result, true);
        alert(block.number);
    });

    alert(MyConIns.balances(tarAddress));//50,150,170,260,270,300,320,330,360,370,380,390,410,420
    alert(MyConIns.balances(uAddress));
}
¿Qué es alert()? ¿Es esa la contraseña correcta de la cuenta?

Respuestas (2)

Respuesta parcial: puede ser que no puedas obtener un número de bloque con

var block = web3.eth.getBlock(result, true);
alert(block.number);

porque el bloque está "pendiente", en cuyo caso number lo estaránull (consulte web3.eth.getBlockla descripción del valor de retorno).

útil conocer la función getBlock. Tengo una pregunta propia con respecto a los filtros y la función .get(), ¿sabrías la respuesta? ethereum.stackexchange.com/questions/22954/…

Primero, para evitar perder su transacción, es mejor iniciar su filtro de vigilancia antes de ejecutar la transacción.

Además, getBlock()es posible que desee hacerlo asincrónico, para asegurarse de que se devuelva un valor.

Espero que esto ayude.