手动计算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 };
}
posted @   至尊王者  阅读(257)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决
点击右上角即可分享
微信分享提示