来自 eth.coinbase 的 eth.sendTransaction 进行多次交易并减少 eth.coinbase 余额

Posted

技术标签:

【中文标题】来自 eth.coinbase 的 eth.sendTransaction 进行多次交易并减少 eth.coinbase 余额【英文标题】:eth.sendTransaction from eth.coinbase makes multiple transactions and decrease the eth.coinbase balance 【发布时间】:2019-01-08 11:53:19 【问题描述】:

我正在使用以太坊开发分布式应用程序,即 go-ethereum 实现 (Geth)。

在 Digital Ocean droplet (Ubuntu 16.04) 上,我安装了 geth。

我已经创建了这样的结构:

devnet$ tree -L 2
.
├── accounts.txt
├── boot.key
├── genesis.json
├── node1
│   ├── geth
│   ├── keystore
│   └── password.txt

我有:

一个引导节点/发现节点 一个 Seal/全节点

密封节点是这样初始化的:

geth --datadir node1/ init genesis.json

然后是引导节点:

devnet$ bootnode -nodekey boot.key -verbosity 9 -addr :30310
INFO [02-07|22:44:09] UDP listener up                          self=enode://3ec4fef2d726c2c01f16f0a0030f15dd5a81e274067af2b2157cafbf76aa79fa9c0be52c6664e80cc5b08162ede53279bd70ee10d024fe86613b0b09e1106c40@[::]:30310

在 bootnode 监听之后,我在 node1 上运行 geth:

geth --datadir node1/ --syncmode 'full' --port 30311 --rpc --rpcaddr 'localhost' --rpcport 8501 --rpcapi 'personal,db,eth,net,web3,txpool,miner' --bootnodes 'enode://3ec4fef2d726c2c01f16f0a0030f15dd5a81e274067af2b2157cafbf76aa79fa9c0be52c6664e80cc5b08162ede53279bd70ee10d024fe86613b0b09e1106c40@127.0.0.1:30310' --networkid 1515 --gasprice '1' -unlock '0x87366ef81db496edd0ea2055ca605e8686eec1e6' --password node1/password.txt --mine

注意:这是示例,真实 ip、bootnode "enode" 值和帐户不是这些。

在这个私有以太坊网络上,我部署了一个 ERC20 合约,带有一个基本的传输函数,所以,我想使用一些随机地址从 Metamask 调用该函数。

为此,我需要在我的帐户中获取一些 ETH,因此我已连接到 geth 控制台并将一些 ether 从 eth.coinbase 转移到该地址:

eth.sendTransaction(from:eth.coinbase, to:"0xf17f52151ebef6c7334fad080c5704d77216b732", value: web3.toWei(10, "ether"))

后来我发现有些交易我无法识别,我的意思是,它只是一个从一个账户向另一个账户发送以太币的交易,为什么会导致提交多个交易?

以下是情况截图:

此外,这些交易中的每一项都在减少 eth.coinbase 余额(eth.coinbase == 部署合约的地址),所以我开始在该帐户上使用大量以太币,并在其中一些“幽灵”之后" eth.coinbase 的交易余额为 0.0026 Ether..

所以,我有两个问题

    是否存在任何可能减少合约所有者地址/coinbase 余额的情况? 关于为什么会出现这些交易的任何想法?

编辑:

这就是问题所在...https://github.com/ethereum/go-ethereum/issues/16691

【问题讨论】:

这些交易哈希似乎都与提交的哈希不匹配。我的猜测是你有一堆待处理的交易,当你开始挖矿时它们都被捡起。停止挖矿并检查是否有任何待处理的交易。再次运行您的eth.sendTransaction 并检查您的未决提交(无需启动您的矿工)。如果您只看到 1 笔待处理交易,请打开您的矿机并查看您获得了多少已处理的交易。 好主意,我会试试的。但这如何解释 coinbase 余额的突然减少呢?它从 9.5 e74 开始,并以不到 1 个以太币结束。我的意思是,在 PoA 网络上,如何减少所有者/coinbase 账户余额?我无法想象一种情况(我对以太坊没有很多经验) 我唯一能想到的就是您以某种方式在(可能是无限的)循环中提交了事务。待处理的交易将有助于发光。您也可以查看eth.getTransactionCount 是的,这也是可能的,我只从 metamask 和 geth 控制台发送,所以真的很难做到这一点.. 但这可能是其中一个错误。另外,请参阅我的编辑,机器人也可能是一个原因。 我喜欢他的回答。尝试阻塞端口。此外,检查未知交易以了解转移的去向。 【参考方案1】:

[为了完整性从 Ethereum.SE 交叉发布]

据我所知,Digital Ocean 默认不会阻止任何端口。

您节点的 RPC 很可能是可公开访问的,当您解锁帐户以发送交易时,机器人会尝试将其余部分扫到自己的地址(可能不止一个,因为似乎有多个收件人) .

尝试使用 ufw 阻止从机器外部访问 RPC 端口,或者干脆关闭 RPC,因为控制台通过 IPC 工作。

确实,如果您查看主网上的0x6e4cc3e76765bdc711cc7b5cbfc5bbfe473b192e 和0x7097f41f1c1847d52407c629d0e0ae0fdd24fd58,您可以看到它们已经扫过接近 15 ETH,而待处理的交易反映了此类机器人的一种常见策略,即预先签署在 rpc 解锁时使用更高的随机数改变值。

【讨论】:

确实,github上有一个关于这个的问题,github.com/ethereum/go-ethereum/issues/16691。有什么想法可以让我的网络暴露在互联网上,让我的帐户解锁而不让我的私钥易受攻击?

以上是关于来自 eth.coinbase 的 eth.sendTransaction 进行多次交易并减少 eth.coinbase 余额的主要内容,如果未能解决你的问题,请参考以下文章

检查网络响应是来自服务器还是来自 Chrome 缓存

为啥 WCF 服务能够处理来自不同进程的调用而不是来自线程的调用

来自 viewDidAppear 的 Segue 调用有效,但不是来自 viewWillAppear

来自 CWnd 的 ReleaseDC 覆盖来自 winuser 的 ReleaseDC

来自麦克风的声音与来自扬声器的声音

来自祖父母的组件,来自父母的数据,在孩子中呈现