- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我目前正在尝试为我的 Typescript/Node 项目实现一个以太坊 Node 连接。
我正在连接到“Infura” Node 服务器,我需要在其中签署我的本地交易。好吧,无论如何。我正在使用 npm 包“ethereumjs-tx”签署我的交易,一切看起来都很棒。当我使用来自 web3 的“sendRawTransaction”时,我的响应是一个 tx-id,这意味着我的交易应该在区 block 链中准备就绪。好吧……不是
我的签名交易功能如下。
private signTransactionLocally(amountInWei: number, to: string, privateKey: string = <PRIVATE_KEY>, wallet: string = <MY_WALLET>) {
const pKeyBuffer = Buffer.from(privateKey, "hex");
const txParams = {
nonce: this.getNonce(true,wallet),
//gas: this.getGasPrice(true),
gasLimit: this.getGasLimit2(true),
to: to,
value: amountInWei,
data: '0x000000000000000000000000000000000000000000000000000000000000000000000000',
chainId: "0x1"
};
// console.log(JSON.stringify(txParams));
const tx = new this.ethereumTx(txParams);
tx.sign(pKeyBuffer);
return tx.serialize().toString("hex");
}
“signTransactionLocally”中使用的函数:
private getGasLimit2(hex: boolean = false) {
const latestGasLimit = this.web3.eth.getBlock("latest").gasLimit;
return hex ? this.toHex(latestGasLimit) : latestGasLimit;
}
private getNonce(hex:boolean = false, wallet: string = "0x60a22659E0939a061a7C9288265357f5d26Cf98a") {
return hex ? this.toHex(this.eth().getTransactionCount(wallet)) : this.eth().getTransactionCount(wallet);
}
运行我的代码如下所示:
this.dumpInformations();
const signedTransaction = this.signTransactionLocally(this.toHex((this.getMaxAmountToSend(false, "0x60a22659E0939a061a7C9288265357f5d26Cf98a") / 3 )), "0x38bc48f1d19fdf7c8094a4e40334250ce1c1dc66" );
console.log(signedTransaction);
this.web3.eth.sendRawTransaction("0x" + signedTransaction, function(err: any, res: any) {
if (err)
console.log(err);
else
console.log("transaction Done=>" + res);
});
因为 sendRawTransaction 导致控制台日志:[ Node ]交易完成=>0xc1520ebfe0a225e6971e81953221c60ac1bfcd528e2cc17080b3f9b357003e34
一切都应该是好的。
有人遇到过同样的问题吗?我希望有人能帮助我。祝你有美好的一天!
最佳答案
在处理了无数次这些问题之后;我很确定您发送的 nonce 太高了。
在这些情况下, Node 仍会向您返回交易哈希,但您的交易将保留在 Node 队列中,不会进入内存池或传播到其他 Node ,UNTIL ,你填补了随机数的空白。
您可以尝试以下方法:
使用 getTransactionCount(address, 'pending') - 包括作为 int Node 队列和内存池的 tx。但是这种方法不可靠,并且不会处理并发请求,因为 Node 需要时间在任何给定时间评估正确的数量。
保留您自己的计数器,而不依赖 Node (除非您检测到一些严重错误)。
对于更严肃的项目,将您的计数器/每个地址保存在数据库级别,并使用锁来处理并发,确保您为每个请求提供正确的随机数。
干杯
关于node.js - 发送原始交易 Ethereum infura nodejs npm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44763816/
当我点击 remix.ethereum.org 下的创建时,我不明白智能合约的实际去向。例如,如果我选择 Injected Web3,这应该会将合约发布到 ropsten 测试网上,对吧?但是我怎样才
我通过下面的推荐安装了ganache-cli npm install -g ganache-cli 我已经下载了文件 ganache-1.1.0-beta.0-x86_64.AppImage 当我点
如果我在 ETH 和 RSK 网络中导入相同的私钥,则帐户相同但大小写不同。为什么是这样?这个可以吗? 最佳答案 大写作为校验和,涉及以下标准 SLIP-0044 EIP-155 EIP-1191 有
我们落后于代理。代理已设置。 早些时候,我们运行以下命令并成功安装了以太坊。 sudo apt-get install software-properties-common sudo add-apt-
请找到我的 golang 规范 GOOS=linux GOARCH=amd64 go build github.com/ethereum/go-ethereum/crypto/secp256k1: b
我正在尝试使用 Puppeth(如 Péter Szilágyi demoed in Ethereum devcon three 2017)设置私有(private)以太坊测试网络。我在 macboo
我是一步一步做的: Git 克隆 go-ethereum 项目到我的本地 PC。它位于D:\GOPATH\src\github.com\ethereum\go-ethereum。这是源代码去以太坊 注
我正在尝试生成 personal_sign在 Golang 中就像在 ethers.js 中实现的那样。 Similar question但最终使用了常规 sign过个人sign_implementa
我正在尝试安装 Istanbul-tools 以运行 IBFT 以太坊网络,如本教程所示 https://medium.com/getamis/istanbul-bft-ibft-c2758b7fe6
我想降低我的 ERC-721A 合约的部署成本。 一般来说; 扁平化智能合约是否有助于降低其成本? 目前我正在使用 ethers.js's contractFactory.deploy method带
我有契约(Contract)要求输入 bytes32,所以我需要将地址转换为 bytes32,但在 web3 中没有看到这个方法。 最佳答案 以太坊地址为 20 个字节,因此您将十六进制地址转换为字节
我想与将在调用时部署其他契约(Contract)的功能签订契约(Contract)。可能吗?有什么想法吗? 最佳答案 这是部署合约的合约示例。 https://ethereum.stackexchan
由于与以太坊创建智能合约涉及以太币用户,因此重新填充所有用户的以太币对公司而言成本高昂。因此,假设一家公司决定通过以太坊网络发行一种代币,而该代币代表一种新货币。每次用户向其他人发送代币时,代币的原始
我想知道提交智能合约调用的确切效果。例如,如果我在 uniswap 上将 USDC 兑换成 ETH。 对于交易,我们有 eth_call,对于合约有类似的东西吗?这需要适用于任意复杂的交互,基本上是我
如果我有这样的功能: function sendToAuthor (uint tokenId) public payable{ //here I want to get some ether fr
我正在试验以太坊。我已经按照网站上的说明成功设置了一个私有(private)测试网。但是,我无法添加来自不同机器的对等点。在我创建的任何节点上,admin.nodeInfo.NodeUrl 参数都是未
我在 Remix 上做了一笔交易,花费了 199093 gas。在撰写本文时,天然气价格为 7.2 Gwei(0.031 美元)from here ethgas station 如果我想计算我应该为这
根据 web3.eth.sendTransaction 的文档和 eth_sendTransaction 的文档: 交易对象可以包含一个可选的data参数,它应该是一个String,包含: 要么是包含
是否有任何方法可以在 Solidity 中实现一个集合,以检查元素是否存在,平均 O(1)?我一直在考虑使用没有值的映射对象,这是否比使用数组并迭代以查找元素更快? 最佳答案 是的,就速度而言,您最好
在OpenZeppelin ERC20实现中,有一个_transfer方法: function _transfer( address sender, address recipient
我是一名优秀的程序员,十分优秀!