// Copyright (c) 2018 XDPoSChain // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public License // along with this program. If not, see . package validator import ( "math/big" "github.com/XinFinOrg/XDPoSChain/accounts/abi/bind" "github.com/XinFinOrg/XDPoSChain/common" "github.com/XinFinOrg/XDPoSChain/contracts/validator/contract" ) type Validator struct { *contract.XDCValidatorSession contractBackend bind.ContractBackend } func NewValidator(transactOpts *bind.TransactOpts, contractAddr common.Address, contractBackend bind.ContractBackend) (*Validator, error) { validator, err := contract.NewXDCValidator(contractAddr, contractBackend) if err != nil { return nil, err } return &Validator{ &contract.XDCValidatorSession{ Contract: validator, TransactOpts: *transactOpts, }, contractBackend, }, nil } func DeployValidator(transactOpts *bind.TransactOpts, contractBackend bind.ContractBackend, validatorAddress []common.Address, caps []*big.Int, ownerAddress common.Address) (common.Address, *Validator, error) { minDeposit := new(big.Int) minDeposit.SetString("10000000000000000000000000", 10) minVoterCap := new(big.Int) minVoterCap.SetString("25000000000000000000000", 10) // Deposit 50K XDC // Min Voter Cap 10 XDC // 150 masternodes // Candidate Delay Withdraw 30 days = 1296000 blocks // Voter Delay Withdraw 10 days = 432000 blocks validatorAddr, _, _, err := contract.DeployXDCValidator(transactOpts, contractBackend, validatorAddress, caps, ownerAddress, minDeposit, minVoterCap, big.NewInt(18), big.NewInt(1296000), big.NewInt(432000)) if err != nil { return validatorAddr, nil, err } validator, err := NewValidator(transactOpts, validatorAddr, contractBackend) if err != nil { return validatorAddr, nil, err } return validatorAddr, validator, nil }