Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
O
openzeppelin-contracts-upgradeable
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
俞永鹏
openzeppelin-contracts-upgradeable
Commits
6e19ed47
Commit
6e19ed47
authored
Jul 26, 2018
by
Matt Condon
Committed by
Nicolás Venturo
Jul 26, 2018
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix: bounty tests, superceeds #799 (#1112)
* fix: bounty tests, superceeds #799 * fix: updates from PR notes
parent
e6c15b34
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
74 additions
and
90 deletions
+74
-90
Bounty.test.js
test/Bounty.test.js
+74
-90
No files found.
test/Bounty.test.js
View file @
6e19ed47
const
{
ethGetBalance
,
ethSendTransaction
}
=
require
(
'./helpers/web3'
);
const
{
ethGetBalance
,
ethSendTransaction
}
=
require
(
'./helpers/web3'
);
const
expectEvent
=
require
(
'./helpers/expectEvent'
);
const
{
assertRevert
}
=
require
(
'./helpers/assertRevert'
);
var
SecureTargetBounty
=
artifacts
.
require
(
'SecureTargetBounty'
);
const
SecureTargetBounty
=
artifacts
.
require
(
'SecureTargetBounty'
);
var
InsecureTargetBounty
=
artifacts
.
require
(
'InsecureTargetBounty'
);
const
InsecureTargetBounty
=
artifacts
.
require
(
'InsecureTargetBounty'
);
require
(
'chai'
)
.
use
(
require
(
'chai-bignumber'
)(
web3
.
BigNumber
))
.
should
();
const
sendReward
=
async
(
from
,
to
,
value
)
=>
ethSendTransaction
({
const
sendReward
=
async
(
from
,
to
,
value
)
=>
ethSendTransaction
({
from
,
to
,
value
,
from
,
to
,
value
,
});
});
function
awaitEvent
(
event
,
handler
)
{
const
reward
=
new
web3
.
BigNumber
(
web3
.
toWei
(
1
,
'ether'
));
return
new
Promise
((
resolve
,
reject
)
=>
{
function
wrappedHandler
(...
args
)
{
Promise
.
resolve
(
handler
(...
args
)).
then
(
resolve
).
catch
(
reject
);
}
event
.
watch
(
wrappedHandler
);
contract
(
'Bounty'
,
function
([
_
,
owner
,
researcher
])
{
context
(
'against secure contract'
,
function
()
{
beforeEach
(
async
function
()
{
this
.
bounty
=
await
SecureTargetBounty
.
new
({
from
:
owner
});
});
});
}
contract
(
'Bounty'
,
function
(
accounts
)
{
it
(
'can set reward'
,
async
function
()
{
it
(
'sets reward'
,
async
function
()
{
await
sendReward
(
owner
,
this
.
bounty
.
address
,
reward
);
let
owner
=
accounts
[
0
];
let
reward
=
web3
.
toWei
(
1
,
'ether'
);
let
bounty
=
await
SecureTargetBounty
.
new
();
await
sendReward
(
owner
,
bounty
.
address
,
reward
);
const
balance
=
await
ethGetBalance
(
bounty
.
address
);
const
balance
=
await
ethGetBalance
(
this
.
bounty
.
address
);
assert
.
equal
(
reward
,
balance
.
toNumber
()
);
balance
.
should
.
be
.
bignumber
.
eq
(
reward
);
});
});
it
(
'empties itself when destroyed'
,
async
function
()
{
context
(
'with reward'
,
function
()
{
let
owner
=
accounts
[
0
];
beforeEach
(
async
function
()
{
let
reward
=
web3
.
toWei
(
1
,
'ether'
);
const
result
=
await
this
.
bounty
.
createTarget
({
from
:
researcher
});
let
bounty
=
await
SecureTargetBounty
.
new
();
const
event
=
await
expectEvent
.
inLogs
(
result
.
logs
,
'TargetCreated'
);
await
sendReward
(
owner
,
bounty
.
address
,
reward
);
this
.
targetAddress
=
event
.
args
.
createdAddress
;
const
balance
=
await
ethGetBalance
(
bounty
.
address
);
await
sendReward
(
owner
,
this
.
bounty
.
address
,
reward
);
assert
.
equal
(
reward
,
balance
.
toNumber
());
await
bounty
.
destroy
();
const
balance
=
await
ethGetBalance
(
this
.
bounty
.
address
);
const
updatedBalance
=
await
ethGetBalance
(
bounty
.
address
);
balance
.
should
.
be
.
bignumber
.
eq
(
reward
);
assert
.
equal
(
0
,
updatedBalance
.
toNumber
());
});
});
describe
(
'Against secure contract'
,
function
()
{
it
(
'cannot claim reward'
,
async
function
()
{
it
(
'cannot claim reward'
,
async
function
()
{
let
owner
=
accounts
[
0
];
await
assertRevert
(
let
researcher
=
accounts
[
1
];
this
.
bounty
.
claim
(
this
.
targetAddress
,
{
from
:
researcher
}),
let
reward
=
web3
.
toWei
(
1
,
'ether'
);
);
let
bounty
=
await
SecureTargetBounty
.
new
();
});
let
event
=
bounty
.
TargetCreated
({});
let
watcher
=
async
function
(
err
,
result
)
{
event
.
stopWatching
();
if
(
err
)
{
throw
err
;
}
var
targetAddress
=
result
.
args
.
createdAddress
;
await
sendReward
(
owner
,
bounty
.
address
,
reward
);
const
balance
=
await
ethGetBalance
(
bounty
.
address
);
assert
.
equal
(
reward
,
balance
.
toNumber
());
try
{
await
bounty
.
claim
(
targetAddress
,
{
from
:
researcher
});
assert
.
isTrue
(
false
);
// should never reach here
}
catch
(
error
)
{
let
reClaimedBounty
=
await
bounty
.
claimed
.
call
();
assert
.
isFalse
(
reClaimedBounty
);
}
try
{
await
bounty
.
withdrawPayments
({
from
:
researcher
});
assert
.
isTrue
(
false
);
// should never reach here
}
catch
(
err
)
{
const
updatedBalance
=
await
ethGetBalance
(
bounty
.
address
);
assert
.
equal
(
reward
,
updatedBalance
.
toNumber
());
}
};
await
bounty
.
createTarget
({
from
:
researcher
});
await
awaitEvent
(
event
,
watcher
);
});
});
});
});
describe
(
'Against broken contract'
,
function
()
{
context
(
'against broken contract'
,
function
()
{
it
(
'claims reward'
,
async
function
()
{
beforeEach
(
async
function
()
{
let
owner
=
accounts
[
0
];
this
.
bounty
=
await
InsecureTargetBounty
.
new
();
let
researcher
=
accounts
[
1
];
let
reward
=
web3
.
toWei
(
1
,
'ether'
);
const
result
=
await
this
.
bounty
.
createTarget
({
from
:
researcher
});
let
bounty
=
await
InsecureTargetBounty
.
new
();
const
event
=
await
expectEvent
.
inLogs
(
result
.
logs
,
'TargetCreated'
);
let
event
=
bounty
.
TargetCreated
({});
this
.
targetAddress
=
event
.
args
.
createdAddress
;
let
watcher
=
async
function
(
err
,
result
)
{
await
sendReward
(
owner
,
this
.
bounty
.
address
,
reward
);
event
.
stopWatching
();
});
if
(
err
)
{
throw
err
;
}
let
targetAddress
=
result
.
args
.
createdAddress
;
it
(
'can claim reward'
,
async
function
()
{
await
sendReward
(
owner
,
bounty
.
address
,
reward
);
await
this
.
bounty
.
claim
(
this
.
targetAddress
,
{
from
:
researcher
});
const
claim
=
await
this
.
bounty
.
claimed
();
const
balance
=
await
ethGetBalance
(
bounty
.
address
);
assert
.
equal
(
reward
,
balance
.
toNumber
());
claim
.
should
.
eq
(
true
);
await
bounty
.
claim
(
targetAddress
,
{
from
:
researcher
});
const
researcherPrevBalance
=
await
ethGetBalance
(
researcher
);
let
claim
=
await
bounty
.
claimed
.
call
();
const
gas
=
await
this
.
bounty
.
withdrawPayments
.
estimateGas
({
from
:
researcher
});
assert
.
isTrue
(
claim
);
const
gasPrice
=
web3
.
toWei
(
1
,
'gwei'
);
const
gasCost
=
(
new
web3
.
BigNumber
(
gas
)).
times
(
gasPrice
);
await
bounty
.
withdrawPayments
({
from
:
researcher
});
const
updatedBalance
=
await
ethGetBalance
(
bounty
.
address
);
await
this
.
bounty
.
withdrawPayments
({
from
:
researcher
,
gasPrice
:
gasPrice
});
assert
.
equal
(
0
,
updatedBalance
.
toNumber
());
const
updatedBalance
=
await
ethGetBalance
(
this
.
bounty
.
address
);
};
updatedBalance
.
should
.
be
.
bignumber
.
eq
(
0
);
await
bounty
.
createTarget
({
from
:
researcher
});
await
awaitEvent
(
event
,
watcher
);
const
researcherCurrBalance
=
await
ethGetBalance
(
researcher
);
researcherCurrBalance
.
sub
(
researcherPrevBalance
).
should
.
be
.
bignumber
.
eq
(
reward
.
sub
(
gasCost
));
});
context
(
'reward claimed'
,
function
()
{
beforeEach
(
async
function
()
{
await
this
.
bounty
.
claim
(
this
.
targetAddress
,
{
from
:
researcher
});
});
it
(
'should no longer be payable'
,
async
function
()
{
await
assertRevert
(
sendReward
(
owner
,
this
.
bounty
.
address
,
reward
)
);
});
});
});
});
});
});
});
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment