Add HasNoContracts
This commit is contained in:
18
contracts/ownership/HasNoContracts.sol
Normal file
18
contracts/ownership/HasNoContracts.sol
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
pragma solidity ^0.4.8;
|
||||||
|
|
||||||
|
import "./Ownable.sol";
|
||||||
|
|
||||||
|
/// @title Contracts that should not own Contracts
|
||||||
|
/// @author Remco Bloemen <remco@2π.com>
|
||||||
|
///
|
||||||
|
/// Should contracts (anything Ownable) end up being owned by
|
||||||
|
/// this contract, it allows the owner of this contract to
|
||||||
|
/// reclaim ownership of the contracts.
|
||||||
|
contract HasNoContracts is Ownable {
|
||||||
|
|
||||||
|
/// Reclaim ownership of Ownable contracts
|
||||||
|
function reclaimContract(address contractAddr) external onlyOwner {
|
||||||
|
Ownable contractInst = Ownable(contractAddr);
|
||||||
|
contractInst.transferOwnership(owner);
|
||||||
|
}
|
||||||
|
}
|
||||||
35
test/HasNoContracts.js
Normal file
35
test/HasNoContracts.js
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
'use strict';
|
||||||
|
import expectThrow from './helpers/expectThrow';
|
||||||
|
import toPromise from './helpers/toPromise';
|
||||||
|
const Ownable = artifacts.require('../contracts/ownership/Ownable.sol');
|
||||||
|
const HasNoContracts = artifacts.require(
|
||||||
|
'../contracts/ownership/HasNoContracts.sol',
|
||||||
|
);
|
||||||
|
|
||||||
|
contract('HasNoContracts', function(accounts) {
|
||||||
|
let hasNoContracts = null;
|
||||||
|
let ownable = null;
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
// Create contract and token
|
||||||
|
hasNoContracts = await HasNoContracts.new();
|
||||||
|
ownable = await Ownable.new();
|
||||||
|
|
||||||
|
// Force ownership into contract
|
||||||
|
await ownable.transferOwnership(hasNoContracts.address);
|
||||||
|
const owner = await ownable.owner();
|
||||||
|
assert.equal(owner, hasNoContracts.address);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should allow owner to reclaim contracts', async function() {
|
||||||
|
await hasNoContracts.reclaimContract(ownable.address);
|
||||||
|
const owner = await ownable.owner();
|
||||||
|
assert.equal(owner, accounts[0]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should allow only owner to reclaim contracts', async function() {
|
||||||
|
await expectThrow(
|
||||||
|
hasNoContracts.reclaimContract(ownable.address, {from: accounts[1]}),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user