我正在使用以太坊实现(Geth)的以太坊进行分布式应用程序。
我在Digital Ocean的Droplet(Ubuntu 16.04)上安装了geth。
我创建了这样的结构:
devnet$ tree -L 2
.
├── accounts.txt
├── boot.key
├── genesis.json
├── node1
│ ├── geth
│ ├── keystore
│ └── password.txt
我有:
密封节点是通过以下方式初始化的:
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
在引导节点监听之后,我在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”值和帐户不存在。
在这个专用的以太坊网络上,我已经部署了带有基本Transfer功能的ERC20合约,因此,我想使用一些随机地址从Metamask中调用该功能。
为此,我需要在我的帐户中获取一些ETH,因此我已连接到geth控制台,并将一些以太币从eth.coinbase转移到该地址:
eth.sendTransaction({from:eth.coinbase, to:"0xf17f52151ebef6c7334fad080c5704d77216b732", value: web3.toWei(10, "ether")})
此后,我发现我无法识别的一些交易,我的意思是,这只是将以太币从一个账户发送到另一个账户的交易,为什么会导致提交多个交易?
以下是情况的屏幕截图:
此外,每笔交易都在减少eth.coinbase余额(eth.coinbase ==部署合同的地址),因此我从该帐户上以大量的以太币入手,并在其中一些“幽灵”之后“交易eth.coinbase的余额就像0.0026以太。.
所以,我有2个问题
编辑:
这是问题所在……https://github.com/ethereum/go-ethereum/issues/16691
答案 0 :(得分:3)
[为了全面起见,此处以太坊(Ethereum.SE)交叉发布]
据我所知,Digital Ocean默认情况下不会阻止任何端口。
您的节点的RPC很可能是可公开访问的,并且当您解锁帐户以发送交易时,机器人会尝试将其余的扫描到自己的地址(可能有多个,因为似乎有多个收件人)
尝试使用ufw阻止从计算机外部访问RPC端口,或者直接关闭RPC,因为控制台可以在IPC上运行。
实际上,如果您查看主网上的0x6e4cc3e76765bdc711cc7b5cbfc5bbfe473b192e和0x7097f41f1c1847d52407c629d0e0ae0fdd24fd58,您会发现它们已经接近15 ETH,并且待处理的交易反映了此类bot的常见策略,即在rpc解锁时以较高的随机数对不同价值的交易进行预签名。