Skip to content

Commit

Permalink
Merge pull request #157 from poanetwork/varasev-rename-ValidatorSet-t…
Browse files Browse the repository at this point in the history
…o-Staking

Rename ValidatorSet contract to Staking contract
  • Loading branch information
akolotov authored Mar 12, 2019
2 parents 7055a60 + b043eb0 commit 39316a0
Show file tree
Hide file tree
Showing 10 changed files with 126 additions and 80 deletions.
34 changes: 17 additions & 17 deletions contracts/ERC677BridgeTokenRewardable.sol
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import "./ERC677BridgeToken.sol";
contract ERC677BridgeTokenRewardable is ERC677BridgeToken {

address public blockRewardContract;
address public validatorSetContract;
address public stakingContract;

constructor(
string _name,
Expand All @@ -19,18 +19,18 @@ contract ERC677BridgeTokenRewardable is ERC677BridgeToken {
blockRewardContract = _blockRewardContract;
}

function setValidatorSetContract(address _validatorSetContract) onlyOwner public {
require(_validatorSetContract != address(0) && isContract(_validatorSetContract));
validatorSetContract = _validatorSetContract;
function setStakingContract(address _stakingContract) onlyOwner public {
require(_stakingContract != address(0) && isContract(_stakingContract));
stakingContract = _stakingContract;
}

modifier onlyBlockRewardContract() {
require(msg.sender == blockRewardContract);
_;
}

modifier onlyValidatorSetContract() {
require(msg.sender == validatorSetContract);
modifier onlyStakingContract() {
require(msg.sender == stakingContract);
_;
}

Expand All @@ -47,29 +47,29 @@ contract ERC677BridgeTokenRewardable is ERC677BridgeToken {
}
}

function stake(address _staker, uint256 _amount) external onlyValidatorSetContract {
// Transfer `_amount` from `_staker` to `validatorSetContract`
function stake(address _staker, uint256 _amount) external onlyStakingContract {
// Transfer `_amount` from `_staker` to `stakingContract`
require(_amount <= balances[_staker]);
balances[_staker] = balances[_staker].sub(_amount);
balances[validatorSetContract] = balances[validatorSetContract].add(_amount);
emit Transfer(_staker, validatorSetContract, _amount);
balances[stakingContract] = balances[stakingContract].add(_amount);
emit Transfer(_staker, stakingContract, _amount);
}

function withdraw(address _staker, uint256 _amount) external onlyValidatorSetContract {
// Transfer `_amount` from `validatorSetContract` to `_staker`
require(_amount <= balances[validatorSetContract]);
balances[validatorSetContract] = balances[validatorSetContract].sub(_amount);
function withdraw(address _staker, uint256 _amount) external onlyStakingContract {
// Transfer `_amount` from `stakingContract` to `_staker`
require(_amount <= balances[stakingContract]);
balances[stakingContract] = balances[stakingContract].sub(_amount);
balances[_staker] = balances[_staker].add(_amount);
emit Transfer(validatorSetContract, _staker, _amount);
emit Transfer(stakingContract, _staker, _amount);
}

function transfer(address _to, uint256 _value) public returns(bool) {
require(_to != validatorSetContract);
require(_to != stakingContract);
return super.transfer(_to, _value);
}

function transferFrom(address _from, address _to, uint256 _value) public returns(bool) {
require(_to != validatorSetContract);
require(_to != stakingContract);
return super.transferFrom(_from, _to, _value);
}

Expand Down
6 changes: 6 additions & 0 deletions contracts/test/Staking.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
pragma solidity 0.4.24;


contract Staking {
constructor() public {}
}
6 changes: 0 additions & 6 deletions contracts/test/ValidatorSet.sol

This file was deleted.

5 changes: 2 additions & 3 deletions deploy/.env.example
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ HOME_MIN_AMOUNT_PER_TX=500000000000000000
HOME_REQUIRED_BLOCK_CONFIRMATIONS=1
HOME_GAS_PRICE=1000000000

#for bridge erc_to_native and native_to_erc mode
BLOCK_REWARD_ADDRESS=

FOREIGN_RPC_URL=https://sokol.poa.network
Expand All @@ -40,6 +39,6 @@ REQUIRED_NUMBER_OF_VALIDATORS=1
#E.g. VALIDATORS=0x 0x 0x
VALIDATORS=0x

#for bridge native_to_erc mode
#for bridge native_to_erc, erc_to_erc mode
DEPLOY_REWARDABLE_TOKEN=false
DPOS_VALIDATOR_SET_ADDRESS=
DPOS_STAKING_ADDRESS=
14 changes: 12 additions & 2 deletions deploy/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -127,9 +127,9 @@ VALIDATORS=0x 0x 0x
# The flag defining whether to use ERC677BridgeTokenRewardable contract instead of
# ERC677BridgeToken.
DEPLOY_REWARDABLE_TOKEN=false
# The address of ValidatorSet contract used by ERC677BridgeTokenRewardable contract.
# The address of Staking contract used by ERC677BridgeTokenRewardable contract.
# Makes sense only when DEPLOY_REWARDABLE_TOKEN=true
DPOS_VALIDATOR_SET_ADDRESS=0x
DPOS_STAKING_ADDRESS=0x
# The address of BlockReward contract used by ERC677BridgeTokenRewardable contract.
# Makes sense only when DEPLOY_REWARDABLE_TOKEN=true
BLOCK_REWARD_ADDRESS=0x
Expand Down Expand Up @@ -233,6 +233,16 @@ REQUIRED_NUMBER_OF_VALIDATORS=1
# the Foreign network to confirm that the finalized agreement was transferred
# correctly to the Foreign network.
VALIDATORS=0x 0x 0x

# The flag defining whether to use ERC677BridgeTokenRewardable contract instead of
# ERC677BridgeToken.
DEPLOY_REWARDABLE_TOKEN=false
# The address of Staking contract used by ERC677BridgeTokenRewardable contract.
# Makes sense only when DEPLOY_REWARDABLE_TOKEN=true
DPOS_STAKING_ADDRESS=0x
# The address of BlockReward contract used by ERC677BridgeTokenRewardable contract.
# Makes sense only when DEPLOY_REWARDABLE_TOKEN=true
BLOCK_REWARD_ADDRESS=0x
```

## `ERC-TO-NATIVE` Bridge Mode Configuration Example.
Expand Down
38 changes: 36 additions & 2 deletions deploy/src/erc_to_erc/home.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ const EternalStorageProxy = require('../../../build/contracts/EternalStorageProx
const BridgeValidators = require('../../../build/contracts/BridgeValidators.json')
const HomeBridge = require('../../../build/contracts/HomeBridgeErcToErc.json')
const ERC677BridgeToken = require('../../../build/contracts/ERC677BridgeToken.json')
const ERC677BridgeTokenRewardable = require('../../../build/contracts/ERC677BridgeTokenRewardable.json')

const VALIDATORS = env.VALIDATORS.split(' ')

Expand All @@ -27,7 +28,10 @@ const {
BRIDGEABLE_TOKEN_SYMBOL,
BRIDGEABLE_TOKEN_DECIMALS,
FOREIGN_DAILY_LIMIT,
FOREIGN_MAX_AMOUNT_PER_TX
FOREIGN_MAX_AMOUNT_PER_TX,
DEPLOY_REWARDABLE_TOKEN,
BLOCK_REWARD_ADDRESS,
DPOS_STAKING_ADDRESS
} = env

const DEPLOYMENT_ACCOUNT_ADDRESS = privateKeyToAddress(DEPLOYMENT_ACCOUNT_PRIVATE_KEY)
Expand Down Expand Up @@ -128,7 +132,7 @@ async function deployHome() {

console.log('\n[Home] deploying Bridgeble token')
const erc677token = await deployContract(
ERC677BridgeToken,
DEPLOY_REWARDABLE_TOKEN ? ERC677BridgeTokenRewardable : ERC677BridgeToken,
[BRIDGEABLE_TOKEN_NAME, BRIDGEABLE_TOKEN_SYMBOL, BRIDGEABLE_TOKEN_DECIMALS],
{ from: DEPLOYMENT_ACCOUNT_ADDRESS, network: 'home', nonce: homeNonce }
)
Expand All @@ -149,6 +153,36 @@ async function deployHome() {
assert.strictEqual(Web3Utils.hexToNumber(setBridgeContract.status), 1, 'Transaction Failed')
homeNonce++

if (DEPLOY_REWARDABLE_TOKEN) {
console.log('\nset BlockReward contract on ERC677BridgeTokenRewardable')
const setBlockRewardContractData = await erc677token.methods
.setBlockRewardContract(BLOCK_REWARD_ADDRESS)
.encodeABI({ from: DEPLOYMENT_ACCOUNT_ADDRESS })
const setBlockRewardContract = await sendRawTxHome({
data: setBlockRewardContractData,
nonce: homeNonce,
to: erc677token.options.address,
privateKey: deploymentPrivateKey,
url: HOME_RPC_URL
})
assert.strictEqual(Web3Utils.hexToNumber(setBlockRewardContract.status), 1, 'Transaction Failed')
homeNonce++

console.log('\nset Staking contract on ERC677BridgeTokenRewardable')
const setStakingContractData = await erc677token.methods
.setStakingContract(DPOS_STAKING_ADDRESS)
.encodeABI({ from: DEPLOYMENT_ACCOUNT_ADDRESS })
const setStakingContract = await sendRawTxHome({
data: setStakingContractData,
nonce: homeNonce,
to: erc677token.options.address,
privateKey: deploymentPrivateKey,
url: HOME_RPC_URL
})
assert.strictEqual(Web3Utils.hexToNumber(setStakingContract.status), 1, 'Transaction Failed')
homeNonce++
}

console.log('transferring ownership of Bridgeble token to homeBridge contract')
const txOwnershipData = await erc677token.methods
.transferOwnership(homeBridgeStorage.options.address)
Expand Down
7 changes: 5 additions & 2 deletions deploy/src/loadEnv.js
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ if (BRIDGE_MODE === 'NATIVE_TO_ERC') {
FOREIGN_MAX_AMOUNT_PER_TX: bigNumValidator(),
FOREIGN_MIN_AMOUNT_PER_TX: bigNumValidator(),
DEPLOY_REWARDABLE_TOKEN: envalid.bool(),
DPOS_VALIDATOR_SET_ADDRESS: addressValidator(),
DPOS_STAKING_ADDRESS: addressValidator(),
BLOCK_REWARD_ADDRESS: addressValidator()
}
}
Expand All @@ -73,7 +73,10 @@ if (BRIDGE_MODE === 'ERC_TO_ERC') {
ERC20_TOKEN_ADDRESS: addressValidator(),
BRIDGEABLE_TOKEN_NAME: envalid.str(),
BRIDGEABLE_TOKEN_SYMBOL: envalid.str(),
BRIDGEABLE_TOKEN_DECIMALS: envalid.num()
BRIDGEABLE_TOKEN_DECIMALS: envalid.num(),
DEPLOY_REWARDABLE_TOKEN: envalid.bool(),
DPOS_STAKING_ADDRESS: addressValidator(),
BLOCK_REWARD_ADDRESS: addressValidator()
}
}
if (BRIDGE_MODE === 'ERC_TO_NATIVE') {
Expand Down
14 changes: 7 additions & 7 deletions deploy/src/native_to_erc/foreign.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ const {
HOME_MAX_AMOUNT_PER_TX,
DEPLOY_REWARDABLE_TOKEN,
BLOCK_REWARD_ADDRESS,
DPOS_VALIDATOR_SET_ADDRESS
DPOS_STAKING_ADDRESS
} = env

const DEPLOYMENT_ACCOUNT_ADDRESS = privateKeyToAddress(DEPLOYMENT_ACCOUNT_PRIVATE_KEY)
Expand Down Expand Up @@ -231,18 +231,18 @@ async function deployForeign() {
assert.equal(Web3Utils.hexToNumber(setBlockRewardContract.status), 1, 'Transaction Failed')
foreignNonce++

console.log('\nset ValidatorSet contract on ERC677BridgeTokenRewardable')
const setValidatorSetContractData = await erc677bridgeToken.methods
.setValidatorSetContract(DPOS_VALIDATOR_SET_ADDRESS)
console.log('\nset Staking contract on ERC677BridgeTokenRewardable')
const setStakingContractData = await erc677bridgeToken.methods
.setStakingContract(DPOS_STAKING_ADDRESS)
.encodeABI({ from: DEPLOYMENT_ACCOUNT_ADDRESS })
const setValidatorSetContract = await sendRawTxForeign({
data: setValidatorSetContractData,
const setStakingContract = await sendRawTxForeign({
data: setStakingContractData,
nonce: foreignNonce,
to: erc677bridgeToken.options.address,
privateKey: deploymentPrivateKey,
url: FOREIGN_RPC_URL
})
assert.equal(Web3Utils.hexToNumber(setValidatorSetContract.status), 1, 'Transaction Failed')
assert.equal(Web3Utils.hexToNumber(setStakingContract.status), 1, 'Transaction Failed')
foreignNonce++
}

Expand Down
4 changes: 2 additions & 2 deletions test/mockContracts/ERC677BridgeTokenRewardableMock.sol
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ contract ERC677BridgeTokenRewardableMock is ERC677BridgeTokenRewardable {
blockRewardContract = _blockRewardContract;
}

function setValidatorSetContractMock(address _validatorSetContract) public {
validatorSetContract = _validatorSetContract;
function setStakingContractMock(address _stakingContract) public {
stakingContract = _stakingContract;
}

}
Loading

0 comments on commit 39316a0

Please sign in to comment.