• 手动计算UTXO


    const TX_TYPE_IN = 1;
    const TX_TYPE_OUT = 2;
    
    export const CreateUtxos = async (address: string, data: any) => {
        let mapData = new Map();
        let temp = new Map();
        for (const iter of data) {
            mapData.set(iter.hash, iter);
            // console.log(iter.hash);
            let type = TX_TYPE_IN;
            for (const input of iter.inputs) {
                if (input.coin.coinbase) continue;
                if (address == input.coin.address) {
                    type = TX_TYPE_OUT;
                }
            }
            let out = -1;
            let balance = 0;
            for (const output of iter.outputs) {
                out++;
                if (address == output.address) {
                    balance = output.value;
                    break;
                }
            }
            temp.set(iter.hash, { type, out, balance, spentTxid: null, spentHeight: 0 });
        }
    
        for (const [key, value] of mapData) {
            for (const input of value.inputs) {
                if (input.coinbase) continue;
                if (temp.has(input.prevout.hash)) {
                    const pre = temp.get(input.prevout.hash);
                    const local = temp.get(key);
                    if (pre.spentHeight <= 0 && (pre.type != local.type || local.type == TX_TYPE_OUT)) {
                        pre.spentTxid = value.hash;
                        pre.spentHeight = value.height;
                    }
                }
            }
        }
        let balance = 0;
        let unspentList: Array<any> = [];
        for (const [key, value] of temp) {
            if (value.spentHeight === 0) {
                balance += value.balance;
                // console.info(key, value.out);
                unspentList.push(value);
            } /*else {
                temp.delete(key);
            }*/
        }
    
        // return {balance, unspentList: Array.from(temp.values())}
        return { balance, unspentList };
    }
    
    
  • 相关阅读:
    ReadOnly TextEdit输入问题
    关于正太分布单侧区间上下限的定义
    关于Devexpress richEditControl
    CentOS7 升级 cmake
    极客时间实战目录
    kafka安装
    查找连续相同值的算法,并给出连续相同值的个数以及位置
    解决若依linux启动ERROR
    supervisor配置进程
    python做上位机
  • 原文地址:https://www.cnblogs.com/flying_bat/p/11691103.html
Copyright © 2020-2023  润新知