Skip to content

Commit

Permalink
Save actual sender in messageHashRecipient instead of alternative rec…
Browse files Browse the repository at this point in the history
…eiver
  • Loading branch information
k1rill-fedoseev committed Apr 17, 2020
1 parent 393ef6c commit 5e49ff5
Show file tree
Hide file tree
Showing 6 changed files with 13 additions and 10 deletions.
Expand Up @@ -71,9 +71,9 @@ contract BasicAMBErc677ToErc677 is
return mediatorContractOnOtherSide();
}

function passMessage(address _from, uint256 _value) internal {
function passMessage(address _from, address _receiver, uint256 _value) internal {
bytes4 methodSelector = this.handleBridgedTokens.selector;
bytes memory data = abi.encodeWithSelector(methodSelector, _from, _value, nonce());
bytes memory data = abi.encodeWithSelector(methodSelector, _receiver, _value, nonce());

bytes32 dataHash = keccak256(data);
setMessageHashValue(dataHash, _value);
Expand Down Expand Up @@ -197,7 +197,7 @@ contract BasicAMBErc677ToErc677 is
addressStorage[keccak256(abi.encodePacked("messageHashRecipient", _hash))] = _recipient;
}

function messageHashRecipient(bytes32 _hash) internal view returns (address) {
function messageHashRecipient(bytes32 _hash) public view returns (address) {
return addressStorage[keccak256(abi.encodePacked("messageHashRecipient", _hash))];
}

Expand Down Expand Up @@ -249,7 +249,7 @@ contract BasicAMBErc677ToErc677 is
setFixedAssets(txHash);
}
if (unlockOnForeign) {
passMessage(recipient, valueToUnlock);
passMessage(recipient, recipient, valueToUnlock);
}
}

Expand Down
Expand Up @@ -15,7 +15,7 @@ contract ForeignAMBErc677ToErc677 is BasicAMBErc677ToErc677 {
bytes _data
) internal {
if (!lock()) {
passMessage(chooseReceiver(_from, _data), _value);
passMessage(_from, chooseReceiver(_from, _data), _value);
}
}

Expand Down
Expand Up @@ -27,7 +27,7 @@ contract ForeignStakeTokenMediator is BasicStakeTokenMediator {
bytes _data
) internal {
if (!lock()) {
passMessage(chooseReceiver(_from, _data), _value);
passMessage(_from, chooseReceiver(_from, _data), _value);
}
}

Expand All @@ -48,7 +48,7 @@ contract ForeignStakeTokenMediator is BasicStakeTokenMediator {
function _transferWithOptionalMint(address _recipient, uint256 _value) internal {
IBurnableMintableERC677Token token = IBurnableMintableERC677Token(erc677token());
uint256 balance = token.balanceOf(address(this));
if (_recipient != address(0) && balance == 0) {
if (balance == 0) {
token.mint(_recipient, _value);
} else if (balance < _value) {
token.mint(address(this), _value - balance);
Expand Down
Expand Up @@ -12,7 +12,7 @@ contract HomeAMBErc677ToErc677 is BasicAMBErc677ToErc677 {
function bridgeSpecificActionsOnTokenTransfer(ERC677 _token, address _from, uint256 _value, bytes _data) internal {
if (!lock()) {
IBurnableMintableERC677Token(_token).burn(_value);
passMessage(chooseReceiver(_from, _data), _value);
passMessage(_from, chooseReceiver(_from, _data), _value);
}
}

Expand Down
Expand Up @@ -136,11 +136,11 @@ contract HomeStakeTokenMediator is BasicStakeTokenMediator, HomeStakeTokenFeeMan

if (address(_blockRewardContract()) == address(0)) {
// in case if block reward contract is not configured, the fee is not collected
passMessage(chooseReceiver(_from, _data), _value);
passMessage(_from, chooseReceiver(_from, _data), _value);
} else {
// when block reward contract is defined, the calculated fee is subtracted from the original value
uint256 fee = calculateFee(_value);
passMessage(chooseReceiver(_from, _data), _value.sub(fee));
passMessage(_from, chooseReceiver(_from, _data), _value.sub(fee));
if (fee > 0) {
// the fee itself is distributed later in the block reward contract
_blockRewardContract().addBridgeTokenRewardReceivers(fee);
Expand Down
3 changes: 3 additions & 0 deletions test/amb_erc677_to_erc677/foreign_bridge.test.js
Expand Up @@ -111,6 +111,9 @@ contract('ForeignAMBErc677ToErc677', async accounts => {
// Then
const events = await getEvents(ambBridgeContract, { event: 'UserRequestForAffirmation' })
expect(events.length).to.be.equal(1)
const data = `0x${events[0].returnValues.encodedData.slice(2 + 40 + 40 + 66)}`
const hash = web3.utils.soliditySha3(data)
expect(await foreignBridge.messageHashRecipient(hash)).to.be.equal(user) // should keep message sender instead of alternative receiver messageHashRecipient
expect(events[0].returnValues.encodedData.includes(strip0x(user2).toLowerCase())).to.be.equal(true)
expect(await foreignBridge.totalSpentPerDay(currentDay)).to.be.bignumber.equal(halfEther)
})
Expand Down

0 comments on commit 5e49ff5

Please sign in to comment.