Fix getFreeToken blocking issue

pull/754/head
Rongjian Lan 6 years ago
parent def32c9bee
commit a56150a8a2
  1. 5
      node/contract.go
  2. 7
      node/node.go
  3. 7
      node/node_handler.go

@ -4,6 +4,7 @@ import (
"crypto/ecdsa"
"math/big"
"strings"
"sync/atomic"
"github.com/ethereum/go-ethereum/accounts/abi"
"github.com/ethereum/go-ethereum/common"
@ -170,8 +171,8 @@ func (node *Node) CallFaucetContract(address common.Address) common.Hash {
}
func (node *Node) callGetFreeToken(address common.Address) common.Hash {
nonce := node.GetNonceOfAddress(crypto.PubkeyToAddress(node.ContractDeployerKey.PublicKey))
return node.callGetFreeTokenWithNonce(address, nonce)
nonce := atomic.AddUint64(&node.ContractDeployerCurrentNonce, 1)
return node.callGetFreeTokenWithNonce(address, nonce-1)
}
func (node *Node) callGetFreeTokenWithNonce(address common.Address, nonce uint64) common.Hash {

@ -144,9 +144,10 @@ type Node struct {
Address common.Address
// For test only
TestBankKeys []*ecdsa.PrivateKey
ContractDeployerKey *ecdsa.PrivateKey
ContractAddresses []common.Address
TestBankKeys []*ecdsa.PrivateKey
ContractDeployerKey *ecdsa.PrivateKey
ContractDeployerCurrentNonce uint64 // The nonce of the deployer contract at current block
ContractAddresses []common.Address
// Shard group Message Receiver
shardGroupReceiver p2p.GroupReceiver

@ -11,9 +11,12 @@ import (
"os"
"os/exec"
"strconv"
"sync/atomic"
"syscall"
"time"
"github.com/ethereum/go-ethereum/crypto"
"github.com/harmony-one/harmony/core"
"github.com/ethereum/go-ethereum/common"
@ -315,6 +318,10 @@ func (node *Node) PostConsensusProcessing(newBlock *types.Block) {
node.AddNewBlock(newBlock)
// Update contract deployer's nonce so default contract like faucet can issue transaction with current nonce
nonce := node.GetNonceOfAddress(crypto.PubkeyToAddress(node.ContractDeployerKey.PublicKey))
atomic.StoreUint64(&node.ContractDeployerCurrentNonce, nonce)
if node.Consensus.ShardID == 0 {
// ConfirmedBlockChannel which is listened by drand leader who will initiate DRG if its a epoch block (first block of a epoch)

Loading…
Cancel
Save