@@ -72,11 +72,11 @@ contract('ForeignBridge', async (accounts) => {
72
72
} )
73
73
} )
74
74
75
- describe ( '#feeDeposit ' , async ( ) => {
75
+ describe ( '#user pays for tx via via fee deposit ' , async ( ) => {
76
76
const user1 = accounts [ 7 ]
77
77
const user2 = accounts [ 8 ]
78
78
79
- beforeEach ( async ( ) => {
79
+ before ( async ( ) => {
80
80
const owner = accounts [ 0 ] ;
81
81
token = await POA20 . new ( "POA ERC20 Foundation" , "POA20" , 18 ) ;
82
82
const foreignBridgeImpl = await ForeignBridge . new ( ) ;
@@ -87,19 +87,19 @@ contract('ForeignBridge', async (accounts) => {
87
87
await token . transferOwnership ( foreignBridge . address )
88
88
} )
89
89
90
- it ( 'should allow to make and withdraw deposits for fees ' , async ( ) => {
90
+ it ( 'should allow to make and withdraw fee deposits ' , async ( ) => {
91
91
const user1BalanceBeforeDeposit = await web3 . eth . getBalance ( user1 )
92
- let tx = await foreignBridge . sendTransaction ( { from : user1 , value : 1 } ) . should . be . fulfilled
92
+ let tx = await foreignBridge . sendTransaction ( { from : user1 , value : web3 . toWei ( 1 , 'ether' ) } ) . should . be . fulfilled
93
93
let user1TxFees = new web3 . BigNumber ( gasPrice ) . mul ( tx . receipt . gasUsed )
94
- tx = await foreignBridge . sendTransaction ( { from : user1 , value : 3 } ) . should . be . fulfilled
94
+ tx = await foreignBridge . sendTransaction ( { from : user1 , value : web3 . toWei ( 3 , 'ether' ) } ) . should . be . fulfilled
95
95
user1TxFees = user1TxFees . add ( new web3 . BigNumber ( gasPrice ) . mul ( tx . receipt . gasUsed ) )
96
96
let bridgeBalance = await web3 . eth . getBalance ( foreignBridge . address )
97
- bridgeBalance . should . be . bignumber . equal ( 4 )
97
+ bridgeBalance . should . be . bignumber . equal ( web3 . toWei ( 4 , 'ether' ) )
98
98
99
99
const user2BalanceBeforeDeposit = await web3 . eth . getBalance ( user2 )
100
- await foreignBridge . sendTransaction ( { from : user2 , value : 2 } ) . should . be . fulfilled
100
+ await foreignBridge . sendTransaction ( { from : user2 , value : web3 . toWei ( 2 , 'ether' ) } ) . should . be . fulfilled
101
101
bridgeBalance = await web3 . eth . getBalance ( foreignBridge . address )
102
- bridgeBalance . should . be . bignumber . equal ( 6 )
102
+ bridgeBalance . should . be . bignumber . equal ( web3 . toWei ( 6 , 'ether' ) )
103
103
104
104
// user1 withdraw all
105
105
tx = await foreignBridge . sendTransaction ( { from : user1 , value : 0 } ) . should . be . fulfilled
@@ -114,6 +114,56 @@ contract('ForeignBridge', async (accounts) => {
114
114
bridgeBalance = await web3 . eth . getBalance ( foreignBridge . address )
115
115
bridgeBalance . should . be . bignumber . equal ( 0 )
116
116
} )
117
+
118
+ it ( 'should allow to make fee deposits on behalf of somebody else' , async ( ) => {
119
+ const user1BalanceBeforeWithdraw = await web3 . eth . getBalance ( user1 )
120
+ await foreignBridge . addFeeDepositFor ( user1 , { from : user2 , value : web3 . toWei ( 1 , 'ether' ) } ) . should . be . fulfilled
121
+ let bridgeBalance = await web3 . eth . getBalance ( foreignBridge . address )
122
+ bridgeBalance . should . be . bignumber . equal ( web3 . toWei ( 1 , 'ether' ) )
123
+ // user1 withdraw all
124
+ let tx = await foreignBridge . sendTransaction ( { from : user1 , value : 0 } ) . should . be . fulfilled
125
+ let user1TxFees = new web3 . BigNumber ( gasPrice ) . mul ( tx . receipt . gasUsed )
126
+ const user1BalanceAfterWithdraw = await web3 . eth . getBalance ( user1 )
127
+ user1BalanceAfterWithdraw . should . be . bignumber . equal ( user1BalanceBeforeWithdraw . add ( web3 . toWei ( 1 , 'ether' ) ) . sub ( user1TxFees ) )
128
+ } )
129
+
130
+ it ( 'should relay valid tx only if enough deposited' , async ( ) => {
131
+ var recipientAccount = accounts [ 3 ] ;
132
+ const balanceBefore = await token . balanceOf ( recipientAccount )
133
+ const totalSupplyBefore = await token . totalSupply ( )
134
+ var value = web3 . toBigNumber ( web3 . toWei ( 0.25 , "ether" ) ) ;
135
+ var transactionHash = "0x1045bfe274b88120a6b1e5d01b5ec00ab5d01098346e90e7c7a3c9b8f0181c80" ;
136
+ var message = createMessage ( recipientAccount , value , transactionHash , foreignBridge . address ) ;
137
+ var signature = await sign ( authorities [ 0 ] , message )
138
+ var vrs = signatureToVRS ( signature ) ;
139
+ false . should . be . equal ( await foreignBridge . relayedMessages ( transactionHash ) )
140
+
141
+ await foreignBridge . executeSignaturesRecipientPays ( [ vrs . v ] , [ vrs . r ] , [ vrs . s ] , message ) . should . be . rejectedWith ( ERROR_MSG )
142
+
143
+ // deposit 1 ETH for fees
144
+ await foreignBridge . sendTransaction ( { from : recipientAccount , value : web3 . toWei ( 1 , 'ether' ) } ) . should . be . fulfilled
145
+
146
+ const { logs} = await foreignBridge . executeSignaturesRecipientPays ( [ vrs . v ] , [ vrs . r ] , [ vrs . s ] , message ) . should . be . fulfilled
147
+ logs [ 0 ] . event . should . be . equal ( "RelayedMessage" )
148
+ logs [ 0 ] . args . recipient . should . be . equal ( recipientAccount )
149
+ logs [ 0 ] . args . value . should . be . bignumber . equal ( value )
150
+ logs [ 0 ] . args . transactionHash . should . be . equal ( transactionHash ) ;
151
+
152
+ const balanceAfter = await token . balanceOf ( recipientAccount ) ;
153
+ const totalSupplyAfter = await token . totalSupply ( ) ;
154
+ balanceAfter . should . be . bignumber . equal ( balanceBefore . add ( value ) )
155
+ totalSupplyAfter . should . be . bignumber . equal ( totalSupplyBefore . add ( value ) )
156
+ true . should . be . equal ( await foreignBridge . relayedMessages ( transactionHash ) )
157
+ } )
158
+
159
+ it ( 'should allow owner only to claim collected tx fees' , async ( ) => {
160
+ const ownerBalanceBefore = await web3 . eth . getBalance ( owner ) ;
161
+ await foreignBridge . withdrawCollectedFees ( { from : accounts [ 1 ] } ) . should . be . rejected
162
+ await foreignBridge . withdrawCollectedFees ( { from : owner } ) . should . be . fulfilled
163
+ const ownerBalanceAfter = await web3 . eth . getBalance ( owner ) ;
164
+ ownerBalanceAfter . should . be . bignumber . above ( ownerBalanceBefore )
165
+ await foreignBridge . withdrawCollectedFees ( { from : owner } ) . should . be . rejected // nothing left to withdraw
166
+ } )
117
167
} )
118
168
119
169
describe ( '#executeSignatures' , async ( ) => {
0 commit comments