From 206c2cab4d3384972b0971c2de405c02346f740a Mon Sep 17 00:00:00 2001 From: DinhLN Date: Fri, 17 Aug 2018 10:42:22 +0700 Subject: [PATCH] Fixed move foundation wallet address to genesis config. --- cmd/puppeth/wizard_genesis.go | 4 ++++ cmd/utils/flags.go | 2 +- consensus/posv/posv.go | 8 ++++---- consensus/posv/snapshot.go | 14 +++++++------- contracts/utils.go | 13 ++++++------- contracts/validator/validator_test.go | 3 ++- eth/backend.go | 7 ++++--- internal/ethapi/api.go | 3 +-- internal/web3ext/web3ext.go | 1 - miner/worker.go | 2 +- params/config.go | 22 +++++++++++----------- 11 files changed, 41 insertions(+), 38 deletions(-) diff --git a/cmd/puppeth/wizard_genesis.go b/cmd/puppeth/wizard_genesis.go index 91f4e8eb11..1bf2c82ad7 100644 --- a/cmd/puppeth/wizard_genesis.go +++ b/cmd/puppeth/wizard_genesis.go @@ -168,6 +168,10 @@ func (w *wizard) makeGenesis() { fmt.Println("How many blocks before checkpoint need to prepare new set of masternodes? (default = 450)") genesis.Config.Posv.Gap = uint64(w.readDefaultInt(450)) + fmt.Println() + fmt.Println("What is foundation wallet address?") + genesis.Config.Posv.FoudationWalletAddr = *w.readAddress() + // Validator Smart Contract Code pKey, _ := crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") addr := crypto.PubkeyToAddress(pKey.PublicKey) diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index eec68fd6e0..f95017e36d 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -33,8 +33,8 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/fdlimit" "github.com/ethereum/go-ethereum/consensus" - "github.com/ethereum/go-ethereum/consensus/posv" "github.com/ethereum/go-ethereum/consensus/ethash" + "github.com/ethereum/go-ethereum/consensus/posv" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/vm" diff --git a/consensus/posv/posv.go b/consensus/posv/posv.go index 4a163fb09e..52cefb688e 100644 --- a/consensus/posv/posv.go +++ b/consensus/posv/posv.go @@ -29,6 +29,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/consensus" + "github.com/ethereum/go-ethereum/consensus/clique" "github.com/ethereum/go-ethereum/consensus/misc" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/types" @@ -40,7 +41,6 @@ import ( "github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/rpc" "github.com/hashicorp/golang-lru" - "github.com/ethereum/go-ethereum/consensus/clique" ) const ( @@ -207,9 +207,9 @@ type Posv struct { proposals map[common.Address]bool // Current list of proposals we are pushing - signer common.Address // Ethereum address of the signing key - signFn clique.SignerFn // Signer function to authorize hashes with - lock sync.RWMutex // Protects the signer fields + signer common.Address // Ethereum address of the signing key + signFn clique.SignerFn // Signer function to authorize hashes with + lock sync.RWMutex // Protects the signer fields HookReward func(chain consensus.ChainReader, state *state.StateDB, header *types.Header) error } diff --git a/consensus/posv/snapshot.go b/consensus/posv/snapshot.go index 59fd988487..5240a7e3f8 100644 --- a/consensus/posv/snapshot.go +++ b/consensus/posv/snapshot.go @@ -20,11 +20,11 @@ import ( "encoding/json" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/consensus/clique" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/params" lru "github.com/hashicorp/golang-lru" - "github.com/ethereum/go-ethereum/consensus/clique" ) // Vote represents a single vote that an authorized signer made to modify the @@ -48,12 +48,12 @@ type Snapshot struct { config *params.PosvConfig // Consensus engine parameters to fine tune behavior sigcache *lru.ARCCache // Cache of recent block signatures to speed up ecrecover - Number uint64 `json:"number"` // Block number where the snapshot was created - Hash common.Hash `json:"hash"` // Block hash where the snapshot was created - Signers map[common.Address]struct{} `json:"signers"` // Set of authorized signers at this moment - Recents map[uint64]common.Address `json:"recents"` // Set of recent signers for spam protections - Votes []*clique.Vote `json:"votes"` // List of votes cast in chronological order - Tally map[common.Address]clique.Tally `json:"tally"` // Current vote tally to avoid recalculating + Number uint64 `json:"number"` // Block number where the snapshot was created + Hash common.Hash `json:"hash"` // Block hash where the snapshot was created + Signers map[common.Address]struct{} `json:"signers"` // Set of authorized signers at this moment + Recents map[uint64]common.Address `json:"recents"` // Set of recent signers for spam protections + Votes []*clique.Vote `json:"votes"` // List of votes cast in chronological order + Tally map[common.Address]clique.Tally `json:"tally"` // Current vote tally to avoid recalculating } // newSnapshot creates a new snapshot with the specified startup parameters. This diff --git a/contracts/utils.go b/contracts/utils.go index 62da3fe077..a4178fc425 100644 --- a/contracts/utils.go +++ b/contracts/utils.go @@ -33,10 +33,9 @@ import ( const ( HexSignMethod = "e341eaa4" - RewardMasterPercent = 30 - RewardVoterPercent = 60 + RewardMasterPercent = 40 + RewardVoterPercent = 50 RewardFoundationPercent = 10 - FoudationWalletAddr = "0x0000000000000000000000000000000000000068" ) type rewardLog struct { @@ -178,8 +177,8 @@ func GetCandidatesOwnerBySigner(validator *contractValidator.TomoValidator, sign } // Calculate reward for holders. -func CalculateRewardForHolders(validator *contractValidator.TomoValidator, state *state.StateDB, signer common.Address, calcReward *big.Int) error { - rewards, err := GetRewardBalancesRate(signer, calcReward, validator) +func CalculateRewardForHolders(foudationWalletAddr common.Address, validator *contractValidator.TomoValidator, state *state.StateDB, signer common.Address, calcReward *big.Int) error { + rewards, err := GetRewardBalancesRate(foudationWalletAddr, signer, calcReward, validator) if err != nil { return err } @@ -192,7 +191,7 @@ func CalculateRewardForHolders(validator *contractValidator.TomoValidator, state } // Get reward balance rates for master node, founder and holders. -func GetRewardBalancesRate(masterAddr common.Address, totalReward *big.Int, validator *contractValidator.TomoValidator) (map[common.Address]*big.Int, error) { +func GetRewardBalancesRate(foudationWalletAddr common.Address, masterAddr common.Address, totalReward *big.Int, validator *contractValidator.TomoValidator) (map[common.Address]*big.Int, error) { owner := GetCandidatesOwnerBySigner(validator, masterAddr) balances := make(map[common.Address]*big.Int) rewardMaster := new(big.Int).Mul(totalReward, new(big.Int).SetInt64(RewardMasterPercent)) @@ -240,7 +239,7 @@ func GetRewardBalancesRate(masterAddr common.Address, totalReward *big.Int, vali foudationReward := new(big.Int).Mul(totalReward, new(big.Int).SetInt64(RewardFoundationPercent)) foudationReward = new(big.Int).Div(foudationReward, new(big.Int).SetInt64(100)) - balances[common.HexToAddress(FoudationWalletAddr)] = foudationReward + balances[foudationWalletAddr] = foudationReward jsonHolders, err := json.Marshal(balances) if err != nil { diff --git a/contracts/validator/validator_test.go b/contracts/validator/validator_test.go index 5f6141306b..eb587e82de 100644 --- a/contracts/validator/validator_test.go +++ b/contracts/validator/validator_test.go @@ -141,8 +141,9 @@ func TestRewardBalance(t *testing.T) { logCaps[i] = &logCap{accounts[randIndex].From.String(), randCap} } + foundationAddr := common.HexToAddress("0x0000000000000000000000000000000000000068") totalReward := new(big.Int).SetInt64(15 * 1000) - rewards, err := contracts.GetRewardBalancesRate(acc3Addr, totalReward, baseValidator) + rewards, err := contracts.GetRewardBalancesRate(foundationAddr, acc3Addr, totalReward, baseValidator) if err != nil { t.Error("Fail to get reward balances rate.", err) } diff --git a/eth/backend.go b/eth/backend.go index bbc085dc95..083a23126b 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -29,8 +29,8 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/consensus" - "github.com/ethereum/go-ethereum/consensus/posv" "github.com/ethereum/go-ethereum/consensus/ethash" + "github.com/ethereum/go-ethereum/consensus/posv" "github.com/ethereum/go-ethereum/contracts" "github.com/ethereum/go-ethereum/contracts/validator/contract" "github.com/ethereum/go-ethereum/core" @@ -217,7 +217,8 @@ func New(ctx *node.ServiceContext, config *Config) (*Ethereum, error) { } number := header.Number.Uint64() rCheckpoint := chain.Config().Posv.RewardCheckpoint - if number > 0 && number-rCheckpoint > 0 { + foudationWalletAddr := chain.Config().Posv.FoudationWalletAddr + if number > 0 && number-rCheckpoint > 0 && foudationWalletAddr != (common.Address{}) { // Get signers in blockSigner smartcontract. addr := common.HexToAddress(common.BlockSigners) chainReward := new(big.Int).Mul(new(big.Int).SetUint64(chain.Config().Posv.Reward), new(big.Int).SetUint64(params.Ether)) @@ -240,7 +241,7 @@ func New(ctx *node.ServiceContext, config *Config) (*Ethereum, error) { // Add reward for coin holders. if len(signers) > 0 { for signer, calcReward := range rewardSigners { - err := contracts.CalculateRewardForHolders(validator, state, signer, calcReward) + err := contracts.CalculateRewardForHolders(foudationWalletAddr, validator, state, signer, calcReward) if err != nil { log.Error("Fail to calculate reward for holders.", "error", err) } diff --git a/internal/ethapi/api.go b/internal/ethapi/api.go index 0a307a4407..b5ca127e28 100644 --- a/internal/ethapi/api.go +++ b/internal/ethapi/api.go @@ -30,8 +30,8 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/common/math" - "github.com/ethereum/go-ethereum/consensus/posv" "github.com/ethereum/go-ethereum/consensus/ethash" + "github.com/ethereum/go-ethereum/consensus/posv" "github.com/ethereum/go-ethereum/contracts" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/types" @@ -44,7 +44,6 @@ import ( "github.com/ethereum/go-ethereum/rpc" "github.com/syndtr/goleveldb/leveldb" "github.com/syndtr/goleveldb/leveldb/util" - "github.com/ethereum/go-ethereum/consensus/posv" ) const ( diff --git a/internal/web3ext/web3ext.go b/internal/web3ext/web3ext.go index 6efca4e9aa..7f9b342e4e 100644 --- a/internal/web3ext/web3ext.go +++ b/internal/web3ext/web3ext.go @@ -146,7 +146,6 @@ web3._extend({ }); ` - const Admin_JS = ` web3._extend({ property: 'admin', diff --git a/miner/worker.go b/miner/worker.go index 25c55da2ce..ed3e37098e 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -26,8 +26,8 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/consensus" - "github.com/ethereum/go-ethereum/consensus/posv" "github.com/ethereum/go-ethereum/consensus/misc" + "github.com/ethereum/go-ethereum/consensus/posv" "github.com/ethereum/go-ethereum/contracts" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/state" diff --git a/params/config.go b/params/config.go index 3ef9090ca2..00eff3891a 100644 --- a/params/config.go +++ b/params/config.go @@ -82,17 +82,17 @@ var ( // // This configuration is intentionally not using keyed fields to force anyone // adding flags to the config to also have to set these fields. - AllEthashProtocolChanges = &ChainConfig{big.NewInt(1337), big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, new(EthashConfig), nil,nil} + AllEthashProtocolChanges = &ChainConfig{big.NewInt(1337), big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, new(EthashConfig), nil, nil} // AllPosvProtocolChanges contains every protocol change (EIPs) introduced // and accepted by the Ethereum core developers into the Posv consensus. // // This configuration is intentionally not using keyed fields to force anyone // adding flags to the config to also have to set these fields. - AllPosvProtocolChanges = &ChainConfig{big.NewInt(1337), big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, nil,nil, &PosvConfig{Period: 0, Epoch: 30000}} - AllCliqueProtocolChanges = &ChainConfig{big.NewInt(1337), big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, nil, &CliqueConfig{Period: 0, Epoch: 30000},nil} - TestChainConfig = &ChainConfig{big.NewInt(1), big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, new(EthashConfig), nil,nil} - TestRules = TestChainConfig.Rules(new(big.Int)) + AllPosvProtocolChanges = &ChainConfig{big.NewInt(1337), big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, nil, nil, &PosvConfig{Period: 0, Epoch: 30000}} + AllCliqueProtocolChanges = &ChainConfig{big.NewInt(1337), big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, nil, &CliqueConfig{Period: 0, Epoch: 30000}, nil} + TestChainConfig = &ChainConfig{big.NewInt(1), big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, new(EthashConfig), nil, nil} + TestRules = TestChainConfig.Rules(new(big.Int)) ) // ChainConfig is the core config which determines the blockchain settings. @@ -143,14 +143,14 @@ func (c *CliqueConfig) String() string { return "clique" } - // PosvConfig is the consensus engine configs for proof-of-stake-voting based sealing. type PosvConfig struct { - Period uint64 `json:"period"` // Number of seconds between blocks to enforce - Epoch uint64 `json:"epoch"` // Epoch length to reset votes and checkpoint - Reward uint64 `json:"reward"` // Block reward - unit Ether - RewardCheckpoint uint64 `json:"rewardCheckpoint"` // Checkpoint block for calculate rewards. - Gap uint64 `json:"gap"` // Gap time preparing for the next epoch + Period uint64 `json:"period"` // Number of seconds between blocks to enforce + Epoch uint64 `json:"epoch"` // Epoch length to reset votes and checkpoint + Reward uint64 `json:"reward"` // Block reward - unit Ether + RewardCheckpoint uint64 `json:"rewardCheckpoint"` // Checkpoint block for calculate rewards. + Gap uint64 `json:"gap"` // Gap time preparing for the next epoch + FoudationWalletAddr common.Address `json:"foudationWalletAddr"` // Foundation Address Wallet } // String implements the stringer interface, returning the consensus engine details.