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
14dd3f66
Commit
14dd3f66
authored
Oct 05, 2018
by
Nicolás Venturo
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added sender parameter to initializers using msg.sender.
parent
716efc4b
Hide whitespace changes
Inline
Side-by-side
Showing
47 changed files
with
79 additions
and
79 deletions
+79
-79
CapperRole.sol
contracts/access/roles/CapperRole.sol
+3
-3
MinterRole.sol
contracts/access/roles/MinterRole.sol
+3
-3
PauserRole.sol
contracts/access/roles/PauserRole.sol
+3
-3
SignerRole.sol
contracts/access/roles/SignerRole.sol
+3
-3
RefundableCrowdsale.sol
contracts/crowdsale/distribution/RefundableCrowdsale.sol
+1
-1
IndividuallyCappedCrowdsale.sol
...acts/crowdsale/validation/IndividuallyCappedCrowdsale.sol
+2
-2
BreakInvariantBounty.sol
contracts/drafts/BreakInvariantBounty.sol
+2
-2
SignatureBouncer.sol
contracts/drafts/SignatureBouncer.sol
+2
-2
TokenVesting.sol
contracts/drafts/TokenVesting.sol
+3
-2
SampleCrowdsale.sol
contracts/examples/SampleCrowdsale.sol
+2
-2
SimpleToken.sol
contracts/examples/SimpleToken.sol
+3
-3
Pausable.sol
contracts/lifecycle/Pausable.sol
+2
-2
BreakInvariantBountyMock.sol
contracts/mocks/BreakInvariantBountyMock.sol
+1
-1
CapperRoleMock.sol
contracts/mocks/CapperRoleMock.sol
+1
-1
ConditionalEscrowMock.sol
contracts/mocks/ConditionalEscrowMock.sol
+1
-1
ERC20CappedMock.sol
contracts/mocks/ERC20CappedMock.sol
+1
-1
ERC20MintableMock.sol
contracts/mocks/ERC20MintableMock.sol
+1
-2
ERC20PausableMock.sol
contracts/mocks/ERC20PausableMock.sol
+1
-1
ERC721FullMock.sol
contracts/mocks/ERC721FullMock.sol
+2
-1
ERC721MintableBurnableImpl.sol
contracts/mocks/ERC721MintableBurnableImpl.sol
+2
-2
ERC721PausableMock.sol
contracts/mocks/ERC721PausableMock.sol
+1
-1
EscrowMock.sol
contracts/mocks/EscrowMock.sol
+1
-1
IndividuallyCappedCrowdsaleImpl.sol
contracts/mocks/IndividuallyCappedCrowdsaleImpl.sol
+1
-1
MinterRoleMock.sol
contracts/mocks/MinterRoleMock.sol
+1
-1
OwnableMock.sol
contracts/mocks/OwnableMock.sol
+1
-2
PausableMock.sol
contracts/mocks/PausableMock.sol
+1
-1
PauserRoleMock.sol
contracts/mocks/PauserRoleMock.sol
+1
-1
RefundEscrowMock.sol
contracts/mocks/RefundEscrowMock.sol
+1
-1
SampleCrowdsaleMock.sol
contracts/mocks/SampleCrowdsaleMock.sol
+1
-1
SecondaryMock.sol
contracts/mocks/SecondaryMock.sol
+1
-1
SignatureBouncerMock.sol
contracts/mocks/SignatureBouncerMock.sol
+1
-1
SignerRoleMock.sol
contracts/mocks/SignerRoleMock.sol
+1
-1
SimpleTokenMock.sol
contracts/mocks/SimpleTokenMock.sol
+1
-1
TokenVestingMock.sol
contracts/mocks/TokenVestingMock.sol
+2
-1
Ownable.sol
contracts/ownership/Ownable.sol
+2
-2
Secondary.sol
contracts/ownership/Secondary.sol
+2
-2
ConditionalEscrow.sol
contracts/payment/ConditionalEscrow.sol
+2
-2
Escrow.sol
contracts/payment/Escrow.sol
+2
-2
PullPayment.sol
contracts/payment/PullPayment.sol
+1
-1
RefundEscrow.sol
contracts/payment/RefundEscrow.sol
+2
-3
ERC20Capped.sol
contracts/token/ERC20/ERC20Capped.sol
+2
-2
ERC20Mintable.sol
contracts/token/ERC20/ERC20Mintable.sol
+2
-2
ERC20Pausable.sol
contracts/token/ERC20/ERC20Pausable.sol
+2
-2
ERC721MetadataMintable.sol
contracts/token/ERC721/ERC721MetadataMintable.sol
+2
-2
ERC721Mintable.sol
contracts/token/ERC721/ERC721Mintable.sol
+2
-2
ERC721Pausable.sol
contracts/token/ERC721/ERC721Pausable.sol
+2
-2
Ownable.test.js
test/ownership/Ownable.test.js
+2
-2
No files found.
contracts/access/roles/CapperRole.sol
View file @
14dd3f66
...
...
@@ -12,9 +12,9 @@ contract CapperRole is Initializable {
Roles.Role private cappers;
function initialize() public initializer {
if (!isCapper(
msg.
sender)) {
_addCapper(
msg.
sender);
function initialize(
address sender
) public initializer {
if (!isCapper(sender)) {
_addCapper(sender);
}
}
...
...
contracts/access/roles/MinterRole.sol
View file @
14dd3f66
...
...
@@ -12,9 +12,9 @@ contract MinterRole is Initializable {
Roles.Role private minters;
function initialize() public initializer {
if (!isMinter(
msg.
sender)) {
_addMinter(
msg.
sender);
function initialize(
address sender
) public initializer {
if (!isMinter(sender)) {
_addMinter(sender);
}
}
...
...
contracts/access/roles/PauserRole.sol
View file @
14dd3f66
...
...
@@ -12,9 +12,9 @@ contract PauserRole is Initializable {
Roles.Role private pausers;
function initialize() public initializer {
if (!isPauser(
msg.
sender)) {
_addPauser(
msg.
sender);
function initialize(
address sender
) public initializer {
if (!isPauser(sender)) {
_addPauser(sender);
}
}
...
...
contracts/access/roles/SignerRole.sol
View file @
14dd3f66
...
...
@@ -12,9 +12,9 @@ contract SignerRole is Initializable {
Roles.Role private signers;
function initialize() public initializer {
if (!isSigner(
msg.
sender)) {
_addSigner(
msg.
sender);
function initialize(
address sender
) public initializer {
if (!isSigner(sender)) {
_addSigner(sender);
}
}
...
...
contracts/crowdsale/distribution/RefundableCrowdsale.sol
View file @
14dd3f66
...
...
@@ -31,7 +31,7 @@ contract RefundableCrowdsale is Initializable, FinalizableCrowdsale {
// conditional added to make initializer idempotent in case of diamond inheritance
if (address(_escrow) == address(0)) {
_escrow = new RefundEscrow();
_escrow.initialize(wallet());
_escrow.initialize(wallet()
, address(this)
);
}
_goal = goal;
...
...
contracts/crowdsale/validation/IndividuallyCappedCrowdsale.sol
View file @
14dd3f66
...
...
@@ -16,8 +16,8 @@ contract IndividuallyCappedCrowdsale is Initializable, Crowdsale, CapperRole {
mapping(address => uint256) private _contributions;
mapping(address => uint256) private _caps;
function initialize() public initializer {
CapperRole.initialize();
function initialize(
address sender
) public initializer {
CapperRole.initialize(
sender
);
}
/**
...
...
contracts/drafts/BreakInvariantBounty.sol
View file @
14dd3f66
...
...
@@ -16,9 +16,9 @@ contract BreakInvariantBounty is Initializable, PullPayment, Ownable {
event TargetCreated(address createdAddress);
function initialize() public initializer {
function initialize(
address sender
) public initializer {
PullPayment.initialize();
Ownable.initialize();
Ownable.initialize(
sender
);
}
/**
...
...
contracts/drafts/SignatureBouncer.sol
View file @
14dd3f66
...
...
@@ -65,8 +65,8 @@ contract SignatureBouncer is Initializable, SignerRole {
_;
}
function initialize() public initializer {
SignerRole.initialize();
function initialize(
address sender
) public initializer {
SignerRole.initialize(
sender
);
}
/**
...
...
contracts/drafts/TokenVesting.sol
View file @
14dd3f66
...
...
@@ -48,12 +48,13 @@ contract TokenVesting is Initializable, Ownable {
uint256 start,
uint256 cliffDuration,
uint256 duration,
bool revocable
bool revocable,
address sender
)
public
initializer
{
Ownable.initialize();
Ownable.initialize(
sender
);
require(beneficiary != address(0));
require(cliffDuration <= duration);
...
...
contracts/examples/SampleCrowdsale.sol
View file @
14dd3f66
...
...
@@ -18,8 +18,8 @@ contract SampleCrowdsaleToken is Initializable, ERC20Mintable {
string public symbol;
uint8 public decimals;
function initialize() public initializer {
ERC20Mintable.initialize();
function initialize(
address sender
) public initializer {
ERC20Mintable.initialize(
sender
);
name = "Sample Crowdsale Token";
symbol = "SCT";
...
...
contracts/examples/SimpleToken.sol
View file @
14dd3f66
...
...
@@ -20,10 +20,10 @@ contract SimpleToken is Initializable, ERC20 {
uint256 public constant INITIAL_SUPPLY = 10000 * (10 ** uint256(decimals));
/**
* @dev Constructor that gives
msg.
sender all of existing tokens.
* @dev Constructor that gives sender all of existing tokens.
*/
function initialize() public initializer {
_mint(
msg.
sender, INITIAL_SUPPLY);
function initialize(
address sender
) public initializer {
_mint(sender, INITIAL_SUPPLY);
}
}
contracts/lifecycle/Pausable.sol
View file @
14dd3f66
...
...
@@ -14,8 +14,8 @@ contract Pausable is Initializable, PauserRole {
bool private _paused = false;
function initialize() public initializer {
PauserRole.initialize();
function initialize(
address sender
) public initializer {
PauserRole.initialize(
sender
);
}
/**
...
...
contracts/mocks/BreakInvariantBountyMock.sol
View file @
14dd3f66
...
...
@@ -24,7 +24,7 @@ contract TargetMock is Target {
contract BreakInvariantBountyMock is BreakInvariantBounty {
constructor() public {
BreakInvariantBounty.initialize();
BreakInvariantBounty.initialize(
msg.sender
);
}
function _deployContract() internal returns (address) {
...
...
contracts/mocks/CapperRoleMock.sol
View file @
14dd3f66
...
...
@@ -5,7 +5,7 @@ import "../access/roles/CapperRole.sol";
contract CapperRoleMock is CapperRole {
constructor() public {
CapperRole.initialize();
CapperRole.initialize(
msg.sender
);
}
function removeCapper(address account) public {
...
...
contracts/mocks/ConditionalEscrowMock.sol
View file @
14dd3f66
...
...
@@ -8,7 +8,7 @@ contract ConditionalEscrowMock is ConditionalEscrow {
mapping(address => bool) private _allowed;
constructor() public {
ConditionalEscrow.initialize();
ConditionalEscrow.initialize(
msg.sender
);
}
function setAllowed(address payee, bool allowed) public {
...
...
contracts/mocks/ERC20CappedMock.sol
View file @
14dd3f66
...
...
@@ -7,7 +7,7 @@ import "./MinterRoleMock.sol";
contract ERC20CappedMock is ERC20Capped, MinterRoleMock {
constructor(uint256 cap) public {
ERC20Capped.initialize(cap);
ERC20Capped.initialize(cap
, msg.sender
);
}
}
contracts/mocks/ERC20MintableMock.sol
View file @
14dd3f66
...
...
@@ -7,7 +7,6 @@ import "./MinterRoleMock.sol";
contract ERC20MintableMock is ERC20Mintable, MinterRoleMock {
constructor() public {
ERC20Mintable.initialize();
ERC20Mintable.initialize(
msg.sender
);
}
}
contracts/mocks/ERC20PausableMock.sol
View file @
14dd3f66
...
...
@@ -8,7 +8,7 @@ import "./PauserRoleMock.sol";
contract ERC20PausableMock is ERC20Pausable, PauserRoleMock {
constructor(address initialAccount, uint initialBalance) public {
ERC20Pausable.initialize();
ERC20Pausable.initialize(
msg.sender
);
_mint(initialAccount, initialBalance);
}
...
...
contracts/mocks/ERC721FullMock.sol
View file @
14dd3f66
...
...
@@ -15,7 +15,8 @@ contract ERC721FullMock is ERC721Full, ERC721Mintable, ERC721MetadataMintable, E
constructor(string name, string symbol) public
{
ERC721Full.initialize(name, symbol);
ERC721Mintable.initialize();
ERC721Mintable.initialize(msg.sender);
ERC721MetadataMintable.initialize(msg.sender);
ERC721Burnable.initialize();
}
...
...
contracts/mocks/ERC721MintableBurnableImpl.sol
View file @
14dd3f66
...
...
@@ -16,8 +16,8 @@ contract ERC721MintableBurnableImpl
public
{
ERC721Full.initialize("Test", "TEST");
ERC721Mintable.initialize();
ERC721MetadataMintable.initialize();
ERC721Mintable.initialize(
msg.sender
);
ERC721MetadataMintable.initialize(
msg.sender
);
ERC721Burnable.initialize();
}
}
contracts/mocks/ERC721PausableMock.sol
View file @
14dd3f66
...
...
@@ -10,7 +10,7 @@ import "./PauserRoleMock.sol";
*/
contract ERC721PausableMock is ERC721Pausable, PauserRoleMock {
constructor() {
ERC721Pausable.initialize();
ERC721Pausable.initialize(
msg.sender
);
}
function mint(address to, uint256 tokenId) public {
...
...
contracts/mocks/EscrowMock.sol
View file @
14dd3f66
...
...
@@ -4,6 +4,6 @@ import "../payment/Escrow.sol";
contract EscrowMock is Escrow {
constructor() public {
Escrow.initialize();
Escrow.initialize(
msg.sender
);
}
}
contracts/mocks/IndividuallyCappedCrowdsaleImpl.sol
View file @
14dd3f66
...
...
@@ -16,6 +16,6 @@ contract IndividuallyCappedCrowdsaleImpl
public
{
Crowdsale.initialize(rate, wallet, token);
IndividuallyCappedCrowdsale.initialize();
IndividuallyCappedCrowdsale.initialize(
msg.sender
);
}
}
contracts/mocks/MinterRoleMock.sol
View file @
14dd3f66
...
...
@@ -5,7 +5,7 @@ import "../access/roles/MinterRole.sol";
contract MinterRoleMock is MinterRole {
constructor() public {
MinterRole.initialize();
MinterRole.initialize(
msg.sender
);
}
function removeMinter(address account) public {
...
...
contracts/mocks/OwnableMock.sol
View file @
14dd3f66
...
...
@@ -3,8 +3,7 @@ pragma solidity ^0.4.24;
import { Ownable } from "../ownership/Ownable.sol";
contract OwnableMock is Ownable {
constructor() {
Ownable.initialize();
Ownable.initialize(
msg.sender
);
}
}
contracts/mocks/PausableMock.sol
View file @
14dd3f66
...
...
@@ -10,7 +10,7 @@ contract PausableMock is Pausable, PauserRoleMock {
uint256 public count;
constructor() public {
Pausable.initialize();
Pausable.initialize(
msg.sender
);
drasticMeasureTaken = false;
count = 0;
...
...
contracts/mocks/PauserRoleMock.sol
View file @
14dd3f66
...
...
@@ -5,7 +5,7 @@ import "../access/roles/PauserRole.sol";
contract PauserRoleMock is PauserRole {
constructor() public {
PauserRole.initialize();
PauserRole.initialize(
msg.sender
);
}
function removePauser(address account) public {
...
...
contracts/mocks/RefundEscrowMock.sol
View file @
14dd3f66
...
...
@@ -4,6 +4,6 @@ import "../payment/RefundEscrow.sol";
contract RefundEscrowMock is RefundEscrow {
constructor(address beneficiary) public {
RefundEscrow.initialize(beneficiary);
RefundEscrow.initialize(beneficiary
, msg.sender
);
}
}
contracts/mocks/SampleCrowdsaleMock.sol
View file @
14dd3f66
...
...
@@ -5,7 +5,7 @@ import "../examples/SampleCrowdsale.sol";
contract SampleCrowdsaleTokenMock is SampleCrowdsaleToken {
constructor() public {
SampleCrowdsaleToken.initialize();
SampleCrowdsaleToken.initialize(
msg.sender
);
}
}
...
...
contracts/mocks/SecondaryMock.sol
View file @
14dd3f66
...
...
@@ -5,7 +5,7 @@ import "../ownership/Secondary.sol";
contract SecondaryMock is Secondary {
constructor() public {
Secondary.initialize();
Secondary.initialize(
msg.sender
);
}
function onlyPrimaryMock() public view onlyPrimary {
...
...
contracts/mocks/SignatureBouncerMock.sol
View file @
14dd3f66
...
...
@@ -6,7 +6,7 @@ import "./SignerRoleMock.sol";
contract SignatureBouncerMock is SignatureBouncer, SignerRoleMock {
constructor() public {
SignatureBouncer.initialize();
SignatureBouncer.initialize(
msg.sender
);
}
function checkValidSignature(address account, bytes signature)
...
...
contracts/mocks/SignerRoleMock.sol
View file @
14dd3f66
...
...
@@ -5,7 +5,7 @@ import "../access/roles/SignerRole.sol";
contract SignerRoleMock is SignerRole {
constructor() public {
SignerRole.initialize();
SignerRole.initialize(
msg.sender
);
}
function removeSigner(address account) public {
...
...
contracts/mocks/SimpleTokenMock.sol
View file @
14dd3f66
...
...
@@ -4,6 +4,6 @@ import "../examples/SimpleToken.sol";
contract SimpleTokenMock is SimpleToken {
constructor() public {
SimpleToken.initialize();
SimpleToken.initialize(
msg.sender
);
}
}
contracts/mocks/TokenVestingMock.sol
View file @
14dd3f66
...
...
@@ -15,7 +15,8 @@ contract TokenVestingMock is TokenVesting {
start,
cliffDuration,
duration,
revocable
revocable,
msg.sender
);
}
}
contracts/ownership/Ownable.sol
View file @
14dd3f66
...
...
@@ -22,8 +22,8 @@ contract Ownable is Initializable {
* @dev The Ownable constructor sets the original `owner` of the contract to the sender
* account.
*/
function initialize() public initializer {
_owner =
msg.
sender;
function initialize(
address sender
) public initializer {
_owner = sender;
}
/**
...
...
contracts/ownership/Secondary.sol
View file @
14dd3f66
...
...
@@ -12,8 +12,8 @@ contract Secondary is Initializable {
/**
* @dev Sets the primary account to the one that is creating the Secondary contract.
*/
function initialize() public initializer {
_primary =
msg.
sender;
function initialize(
address sender
) public initializer {
_primary = sender;
}
/**
...
...
contracts/payment/ConditionalEscrow.sol
View file @
14dd3f66
...
...
@@ -9,8 +9,8 @@ import "./Escrow.sol";
* @dev Base abstract escrow to only allow withdrawal if a condition is met.
*/
contract ConditionalEscrow is Initializable, Escrow {
function initialize() public initializer {
Escrow.initialize();
function initialize(
address sender
) public initializer {
Escrow.initialize(
sender
);
}
/**
...
...
contracts/payment/Escrow.sol
View file @
14dd3f66
...
...
@@ -20,8 +20,8 @@ contract Escrow is Initializable, Secondary {
mapping(address => uint256) private _deposits;
function initialize() public initializer {
Secondary.initialize();
function initialize(
address sender
) public initializer {
Secondary.initialize(
sender
);
}
function depositsOf(address payee) public view returns (uint256) {
...
...
contracts/payment/PullPayment.sol
View file @
14dd3f66
...
...
@@ -16,7 +16,7 @@ contract PullPayment is Initializable {
// conditional added to make initializer idempotent in case of diamond inheritance
if (address(_escrow) == address(0)) {
_escrow = new Escrow();
_escrow.initialize();
_escrow.initialize(
address(this)
);
}
}
...
...
contracts/payment/RefundEscrow.sol
View file @
14dd3f66
...
...
@@ -23,9 +23,8 @@ contract RefundEscrow is Initializable, ConditionalEscrow {
* @dev Constructor.
* @param beneficiary The beneficiary of the deposits.
*/
function initialize(address beneficiary) public initializer {
Secondary.initialize();
ConditionalEscrow.initialize();
function initialize(address beneficiary, address sender) public initializer {
ConditionalEscrow.initialize(sender);
require(beneficiary != address(0));
_beneficiary = beneficiary;
...
...
contracts/token/ERC20/ERC20Capped.sol
View file @
14dd3f66
...
...
@@ -12,11 +12,11 @@ contract ERC20Capped is Initializable, ERC20Mintable {
uint256 private _cap;
function initialize(uint256 cap)
function initialize(uint256 cap
, address sender
)
public
initializer
{
ERC20Mintable.initialize();
ERC20Mintable.initialize(
sender
);
require(cap > 0);
_cap = cap;
...
...
contracts/token/ERC20/ERC20Mintable.sol
View file @
14dd3f66
...
...
@@ -10,8 +10,8 @@ import "../../access/roles/MinterRole.sol";
* @dev ERC20 minting logic
*/
contract ERC20Mintable is Initializable, ERC20, MinterRole {
function initialize() public initializer {
MinterRole.initialize();
function initialize(
address sender
) public initializer {
MinterRole.initialize(
sender
);
}
/**
...
...
contracts/token/ERC20/ERC20Pausable.sol
View file @
14dd3f66
...
...
@@ -11,8 +11,8 @@ import "../../lifecycle/Pausable.sol";
**/
contract ERC20Pausable is Initializable, ERC20, Pausable {
function initialize() public initializer {
Pausable.initialize();
function initialize(
address sender
) public initializer {
Pausable.initialize(
sender
);
}
function transfer(
...
...
contracts/token/ERC721/ERC721MetadataMintable.sol
View file @
14dd3f66
...
...
@@ -10,9 +10,9 @@ import "../../access/roles/MinterRole.sol";
* @dev ERC721 minting logic with metadata
*/
contract ERC721MetadataMintable is Initializable, ERC721, ERC721Metadata, MinterRole {
function initialize() public initializer {
function initialize(
address sender
) public initializer {
ERC721.initialize();
MinterRole.initialize();
MinterRole.initialize(
sender
);
}
/**
...
...
contracts/token/ERC721/ERC721Mintable.sol
View file @
14dd3f66
...
...
@@ -10,9 +10,9 @@ import "../../access/roles/MinterRole.sol";
* @dev ERC721 minting logic
*/
contract ERC721Mintable is Initializable, ERC721, MinterRole {
function initialize() public initializer {
function initialize(
address sender
) public initializer {
ERC721.initialize();
MinterRole.initialize();
MinterRole.initialize(
sender
);
}
/**
...
...
contracts/token/ERC721/ERC721Pausable.sol
View file @
14dd3f66
...
...
@@ -10,9 +10,9 @@ import "../../lifecycle/Pausable.sol";
* @dev ERC721 modified with pausable transfers.
**/
contract ERC721Pausable is Initializable, ERC721, Pausable {
function initialize() public initializer {
function initialize(
address sender
) public initializer {
ERC721.initialize();
Pausable.initialize();
Pausable.initialize(
sender
);
}
function approve(
...
...
test/ownership/Ownable.test.js
View file @
14dd3f66
...
...
@@ -5,13 +5,13 @@ const { shouldBehaveLikeOwnable } = require('./Ownable.behavior');
const
Ownable
=
artifacts
.
require
(
'OwnableMock'
);
contract
(
'Ownable'
,
function
([
_
,
owner
,
...
otherAccounts
])
{
contract
(
'Ownable'
,
function
([
_
,
owner
,
anyone
,
...
otherAccounts
])
{
beforeEach
(
async
function
()
{
this
.
ownable
=
await
Ownable
.
new
({
from
:
owner
});
});
it
(
'cannot be reinitialized'
,
async
function
()
{
await
expectThrow
(
this
.
ownable
.
initialize
(),
EVMRevert
);
await
expectThrow
(
this
.
ownable
.
initialize
(
anyone
),
EVMRevert
);
});
shouldBehaveLikeOwnable
(
owner
,
otherAccounts
);
...
...
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