• 手动计算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 };
    }
    
    
  • 相关阅读:
    Ubuntu 14 如何解压 .zip、.rar 文件
    python 自定义异常
    python 简单的自定义异常类模版
    python 获取文件目录位置
    python获取当前文件路径以及父文件路径
    python tar 打包
    python requests 上传文件
    android:ems="10"是什么意思
    django 应用中获取访问者ip地址
    curl: (6) Could not resolve host: www.baidu.com;
  • 原文地址:https://www.cnblogs.com/flying_bat/p/11691103.html
Copyright © 2020-2023  润新知