gpt4 book ai didi

javascript - 椭圆形 : TypeError : Converting circular structure to JSON

转载 作者:行者123 更新时间:2023-11-29 15:58:51 30 4
gpt4 key购买 nike

开始之前的相关信息:我已经搜索了 stackoverflow,并发现了类似的标题问题,但我不认为它们是我的重复项,因为它们有一个关键的区别,它们似乎有包含引用的对象给自己,造成圈子。我没有那个。 <-- 请阅读此内容而不是立即将其标记为受骗者 - 我需要这方面的真正帮助。

编辑:我找到了答案,但是 stackoverflow 几天后都不让我发布答案,事实证明 elliptic 只能接受十六进制值——这意味着你必须这样调用它:

this.keyPair.sign(dataHash).toHex();

在下面为可能遇到此问题的其他人留下问题。

我有这个 javascript 对象:

Transaction {
id: '2ec34280-567d-11e9-9685-4903db7a1a5b',
type: 'TRANSACTION',
input:
{ timestamp: 1554343126696,
from:
'6db64cd01c27a723395a833d72b3cc81f9110b5ffb34429d91f45fcbfd87ec9b',
signature:
Signature {
eddsa: [EDDSA],
_R: [Point],
_S: [BN],
_Rencoded: [Array],
_Sencoded: undefined } },
output: { to: 'rand-address', amount: 9, fee: 1 } }

当我尝试对其执行 res.json 时,我似乎收到此错误:

TypeError: Converting circular structure to JSON

一些可能相关的代码:

// Endpoint that a user accesses (the start of the event)
app.post("/transact", (req, res) => {
const { to, amount, type } = req.body;
const transaction = wallet.createTransaction(
to,
amount,
type,
blockchain,
transactionPool
);

res.redirect("/transactions");
});

上面提到的 createTransaction 方法看起来像这样:

  createTransaction(to, amount, type, blockchain, transactionPool) {
this.balance = this.getBalance(blockchain);
if (amount > balance) {
console.log(
`Amount: ${amount} exceeds the current balance: ${this.balance}`
);
return;
}
let transaction = Transaction.newTransaction(this, to, amount, type);
transactionPool.addTransaction(transaction);
return transaction;
}

新交易方法:

  static newTransaction(senderWallet, to, amount, type) {
if (amount + TRANSACTION_FEE > senderWallet.balance) {
console.log(`Not enough balance`);
return;
}

return Transaction.generateTransaction(senderWallet, to, amount, type);
}

调用下面的 generateTransaction 方法:

  static generateTransaction(senderWallet, to, amount, type) {
const transaction = new this();
transaction.type = type;
transaction.output = {
to: to,
amount: amount - TRANSACTION_FEE,
fee: TRANSACTION_FEE
};
Transaction.signTransaction(transaction, senderWallet);
return transaction;
}

依次调用 signTransaction 方法:

  static signTransaction(transaction, senderWallet) {
transaction.input = {
timestamp: Date.now(),
from: senderWallet.publicKey,
signature: senderWallet.sign(ChainUtil.hash(transaction.output))
};
}

chainUtil 哈希函数如下所示:

static hash(data){
return SHA256(JSON.stringify(data)).toString();
}

钱包类的签名方法:

  sign(dataHash){
return this.keyPair.sign(dataHash);
}

他们都回来了,我得到了我在这个问题顶部提到的对象。我根本看不出问题是循环错误。请教育我。

最佳答案

我找到了答案,原来 Elliptic 只允许你使用十六进制字符串...所以为了使这项工作有效,我的钱包代码中进行了更改,如下所示:

this.keyPair.sign(dataHash).toHex();

代替

this.keyPair.sign(dataHash);

关于javascript - 椭圆形 : TypeError : Converting circular structure to JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55506886/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com