1

您好,我有一个本地区块链、Geth 客户端、2 个节点和派系权限证明算法。

我用这个命令开始 geth:

geth --datadir node2/ --syncmode 'full' --port 30312 
     --rpc --rpcport 8546 --rpccorsdomain "*" 
     --ipcpath geth.ipc --rpcapi 'personal,db,eth,net,web3,txpool,miner' 
     --bootnodes 'enode://702efed8e606...ad041b4371a91989@127.0.0.1:30310' 
     --networkid 2456 --gasprice '1' --mine 
     --unlock '0x46004DEAfddb60d11cA04501df8C52aE4679Be8f' --password password.txt

但由于解锁现在每个人都可以将以太币从这个账户转移到其他账户

像这样:

const Web3 = require("web3");    
var web3Client = new Web3(new Web3.providers.HttpProvider("http://localhost:8546"));
await web3Client.eth.sendTransaction({
  from: "0x46004DEAfddb60d11cA04501df8C52aE4679Be8f", 
  to: "0xE77e5634A46153e1cfCa02350cf212BdbC18fbC6", 
  value: 23
});

但是如果我从 geth 命令中删除 --unlock 我不能再密封块

WARN [06-01|14:44:52] Block sealing failed    err="authentication needed: password or unlock"

是否可以以其他方式密封块,这样我就不必再解锁帐户了?

4

1 回答 1

1

不幸的是,geth 需要访问私钥来签署交易,所以你必须解锁它,否则它无法签名。

你可以做的是让这个节点签名,然后去掉 --ipcpath geth.ipc --rpcapi 'personal,db,eth,net,web3,txpool,miner' ,把 rpc 给另一个没有解锁的节点帐户。

使用这个其他节点进行所有交互,并允许第一个节点签名。

干杯; 埃文

于 2018-06-14T18:39:43.983 回答