交易测试 - Agzs/geth-pbft-study GitHub Wiki
测试交易
假设一个主节点(signer1),三个备份节点(signer1、2、3),两个普通用户node1和node2
在signer2、signer3、signer4终端都运行admin.addPeer("encode://...signer1_encode...")
在signer3、signer4终端都运行admin.addPeer("encode://...signer2_encode...")
在signer4终端都运行admin.addPeer("encode://...signer3_encode...")
在node1和node2终端都运行admin.addPeer("encode://...signer3_encode...")
问题 : 测试交易时遇到一个问题,当交易产生时,只有signer3能收到TxMsg,然后会广播给其他signer(包括signer1),但是signer1只是读取出消息的类型为TxMsg,并没有去处理;原因未知,等待一段时间后,依然没有将交易放到新区块中。
临时解决方法 : 在node1中运行admin.addPeer("encode://...signer1_encode..."),交易被顺利的放到新区块中,并被挖出,但是此时的node1扮演了一个备份节点的角色,这是一个bug;并且node1是通过geth --datadir pbft/node1/data --networkid 55661 --port 2000 console启动的,虽然没有指定pbftid,但是程序默认给分配了0,这也是一个bug。
后期需要弄两套系统,一个给signer用,另一个给普通用户用???
最终解决方法 : 使用两套系统,但是两套系统使用同一个.json文件初始化创世区块,peer互联时依旧采用addPeer("enode://.....@IP:port"),注意这里的IP不再是127.0.0.1,而是电脑分配的主机IP地址。
signer1-4位于A电脑,node1-2位于B电脑。
前期的发生的交易,是在node1和signer1未通过addPeer()建立连接的情况下,所以不影响交易,也没有报错,下面是测试过程:
初始设置时,给node1预设了余额,node2中没有余额,现在测试node1向node2转账,node1的地址为(24ff...),node2地址为(079a...)
1、查看余额
> eth.getBalance("0x24ff90ae9012f1b607a00aedd866403ef16f32ca")
9.04625697166532776746648320380374280103671755200316906558262375061821325312e+74
> eth.getBalance("0x079aafa464a201cf265850d852457812766bf549")
0
2、解锁账户,进行转账
> personal.unlockAccount("0x24ff90ae9012f1b607a00aedd866403ef16f32ca")
Unlock account 0x24ff90ae9012f1b607a00aedd866403ef16f32ca
Passphrase:
true
> eth.sendTransaction({from:"0x24ff90ae9012f1b607a00aedd866403ef16f32ca",to:"0x079aafa464a201cf265850d852457812766bf549",value:web3.toWei(0.05, "ether")})
INFO [11-06|20:51:11] Submitted transaction fullhash=0x18b2d8aa75502e19fac65c347a296e03d8c06fc21b37d778e318addf9f552195 recipient=0x079aaFA464a201cf265850d852457812766bF549
"0x18b2d8aa75502e19fac65c347a296e03d8c06fc21b37d778e318addf9f552195"
> personal.unlockAccount("0x24ff90ae9012f1b607a00aedd866403ef16f32ca")
Unlock account 0x24ff90ae9012f1b607a00aedd866403ef16f32ca
Passphrase:
true
> eth.sendTransaction({from:"0x24ff90ae9012f1b607a00aedd866403ef16f32ca",to:"0x079aafa464a201cf265850d852457812766bf549",value:web3.toWei(0.05, "ether")})
INFO [11-06|20:55:31] Submitted transaction fullhash=0xf7ae24bc2db635bc06336153e69dfe02f391dd5e7ba81cf994da961a7ff0a4ab recipient=0x079aaFA464a201cf265850d852457812766bF549
"0xf7ae24bc2db635bc06336153e69dfe02f391dd5e7ba81cf994da961a7ff0a4ab"
3、signer1开始挖矿
> miner.start()
INFO [11-06|21:02:30] Transaction pool price threshold updated price=18000000000
nullINFO [11-06|21:02:30] Starting mining operation
> INFO [11-06|21:02:30] Commit new mining work number=37 txs=2 uncles=0 elapsed=576.415µs
INFO [11-06|21:02:30] Replica received a block Replica(PeerID)=0 hash=e9b040…d309c9
2017/11/06 21:02:30 Replica 0 soft starting new view timer for 20s: new block e9b040d84bbce0b557dac37350a70add73742251b34be89991cbbd6f0ed309c9
...
INFO [11-06|21:02:30] 🔨 mined potential block number=37 hash=e9b040…d309c9
4、node1添加新块
INFO [11-06|21:02:30] handleMsg() ---NewBlockHashesMsg-----------
INFO [11-06|21:02:30] Read the next message from the remote peer in pm.handleMsg()
INFO [11-06|21:02:30] Read the next message from the remote peer in pm.handleMsg()
INFO [11-06|21:02:30] Imported new chain segment blocks=1 txs=2 mgas=0.042 elapsed=1.419ms mgasps=29.584 number=37 hash=e9b040…d309c9
5、查看转账后的余额
> eth.getBalance("0x079aafa464a201cf265850d852457812766bf549")
100000000000000000
> eth.getBalance("0x24ff90ae9012f1b607a00aedd866403ef16f32ca")
9.04625697166532776746648320380374280103671755200316906558161619061821325312e+74
>
6、查看区块信息
> eth.getBlock(37)
{
difficulty: 2,
extraData: "0xd783010607846765746887676f312e382e33856c696e75780000000000000000696bf575787e4d536a166e79275d227dac1ab57e001603357b89820d5897566d4bbfbbc75e6bc6ca977fe32b44f276a9e1e695ceaaa1de8773c592a232ea530b00",
gasLimit: 4712388,
gasUsed: 42000,
hash: "0xe9b040d84bbce0b557dac37350a70add73742251b34be89991cbbd6f0ed309c9",
logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
miner: "0x0000000000000000000000000000000000000000",
mixHash: "0x0000000000000000000000000000000000000000000000000000000000000000",
nonce: "0x0000000000000000",
number: 37,
parentHash: "0x27e02182ec5758f00a1b82838bc7f033dd5606dfbe1cbe0be088d3037db82f2e",
receiptsRoot: "0xb4f699e317c3dd9cf37792a5d777e5efccff1be9144bb8592bf013cb734fa456",
sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
size: 833,
stateRoot: "0x6923f30964b18c99aac1fd275b3a3bfb4ea16392ec6b9dac5b9023aa526bc6a9",
timestamp: 1509973350,
totalDifficulty: 48,
transactions: ["0x18b2d8aa75502e19fac65c347a296e03d8c06fc21b37d778e318addf9f552195", "0xf7ae24bc2db635bc06336153e69dfe02f391dd5e7ba81cf994da961a7ff0a4ab"],
transactionsRoot: "0xd0906fb99634dd8c8cda807dc00366c382b712bef24d6c1b95472ebfef32ac64",
uncles: []
}
>
7、查看交易
> eth.accounts
["0x24ff90ae9012f1b607a00aedd866403ef16f32ca"]
>
> eth.getTransaction("0x18b2d8aa75502e19fac65c347a296e03d8c06fc21b37d778e318addf9f552195WARN [11-06|21:24:58] System clock seems off by -11.557353641s, which can prevent network connectivity
WARN [11-06|21:24:58] Please enable network time synchronisation in system settings.
> eth.getTransaction("0x18b2d8aa75502e19fac65c347a296e03d8c06fc21b37d778e318addf9f552195")
{
blockHash: "0xe9b040d84bbce0b557dac37350a70add73742251b34be89991cbbd6f0ed309c9",
blockNumber: 37,
from: "0x24ff90ae9012f1b607a00aedd866403ef16f32ca",
gas: 90000,
gasPrice: 18000000000,
hash: "0x18b2d8aa75502e19fac65c347a296e03d8c06fc21b37d778e318addf9f552195",
input: "0x",
nonce: 0,
r: "0xdf46d90a851bf3f12dc01b95f8c2d93af271f5b9b3bcf746f2b318773501d779",
s: "0x696e731826b7fe6e32c64d07b6491bdc0990aa13c163daf5705a76dcaf845614",
to: "0x079aafa464a201cf265850d852457812766bf549",
transactionIndex: 0,
v: "0x4d57",
value: 50000000000000000
}
>