Skip to content

Commit

Permalink
Merge d9bd225 into 6f3d6cb
Browse files Browse the repository at this point in the history
  • Loading branch information
cgewecke committed Jul 19, 2018
2 parents 6f3d6cb + d9bd225 commit 8dfe8de
Show file tree
Hide file tree
Showing 14 changed files with 542 additions and 161 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -63,3 +63,6 @@ typings/
# locks
package-lock.json

# Mnemonics and keys
.secrets.js

1 change: 1 addition & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ services:

before_install:
- docker pull ethereum/client-go:latest
- docker pull ethereum/solc:0.4.24

env:
- NETWORK=ganache
Expand Down
31 changes: 31 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,35 @@ $ npm test # vs. ganache-cli
$ npm test:geth # vs. geth
```

### Deploy

This repository contains deployment scripts that let you to quickly publish
your own package registry to a public testnet and authorize your account
address as its owner.

Clone the repo and create a `.secrets.js` file in the project root that looks like this:

```javascript
module.exports = {
ropsten: {
mnemonic: 'use your own twelve word mnemonic here do not use this one',
infura: "F6tUooiW4thx777DtPsa" // <-- Example Infura API key.
},
rinkeby: {
..etc..
}
}
```

At the command line run:
```shell
$ npm run deploy:ropsten
```

+ Infura API keys are available [here](https://infura.io/register)
+ A 12 word mnemonic (for testing purposes only) can be generated [here](iancoleman.io/bip39)


### Coverage
```
$ npm run coverage
Expand All @@ -39,3 +68,5 @@ $ cd docs
$ pip install -r requirements.txt
$ make html
```


24 changes: 24 additions & 0 deletions config/compilers.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
/**
* Compiler settings consumed by truffle-config.js
*/

let compilers = {};

// Travis sets CI to true by default
if (process.env.CI){
compilers = {
solc: {
version: "0.4.24",
docker: true,
settings: {
optimizer: {
enabled: false,
runs: 200
},
evmVersion: "byzantium"
}
},
}
}

module.exports = compilers;
55 changes: 55 additions & 0 deletions config/logger.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
const t = ' ';
const log = console.log;

class PermissionsLogger {

constructor(verbose){
this.verbose = verbose || false;
}

start(){
if (!this.verbose) return;

log(`${t}Initializing registry contracts...`);
log(`${t}----------------------------------`);
}

finish(){
if (!this.verbose) return;

log();
log(`${t}> Initialization complete`);
}

setAuthority(contract){
if (!this.verbose) return;

log(`${t}* Set WhitelistAuthority as authority for ${contract.constructor.contractName}`);
}

setDep(contract,type){
if (!this.verbose) return;

log(`${t}* Set ${contract.constructor.contractName} as ${type} for PackageIndex`);
}

setCanCall(caller, target, method){
if (!this.verbose) return;

log(`${t}* Authorized ${caller.constructor.contractName} to call: ${target.constructor.contractName}:${method}`)
}

setAnyoneCanCall(target, method){
if (!this.verbose) return;

log(`${t}* Authorized anyone to call ${target.constructor.contractName}:${method}`)
}

newline(){
if (!this.verbose) return;
log();
}
}

module.exports = PermissionsLogger;

45 changes: 45 additions & 0 deletions config/mocha.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
// Mocha configs consumed by truffle-config.js, toggled by process.env.<MODE>.
// Idea borrowed from AragonOS.

/**
* Run mocha with gas analytics: env: GAS_REPORTER
* @type {Object}
*/
const mochaGasSettingsShell = {
reporter: 'eth-gas-reporter',
reporterOptions : {
onlyCalledMethods: true,
}
}

/**
* Run mocha with gas usage analytics - output to docs: env: GAS_DOCS
* @type {Object}
*/
const mochaGasSettingsDocs = {
reporter: 'eth-gas-reporter',
reporterOptions : {
onlyCalledMethods: true,
rst: true,
rstTitle: 'Appendix: Gas Usage',
outputFile: 'docs/Gas.rst',
noColors: true
}
}

/**
* Run mocha filtering for tests with `geth` in the description
* @type {Object}
*/
const mochaGeth = {
grep: "geth",
}

// Assign
let mochaSettings = {};

if (process.env.GAS_REPORTER) mochaSettings = mochaGasSettingsShell
else if (process.env.GAS_DOCS) mochaSettings = mochaGasSettingsDocs
else if (process.env.NETWORK === 'geth') mochaSettings = mochaGeth

module.exports = mochaSettings
170 changes: 170 additions & 0 deletions config/permissions.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,170 @@
const PermissionsLogger = require('./logger');
const util = require('util');

async function setPermissions(
authority,
packageIndex,
packageDB,
releaseDB,
releaseValidator,
verbose
){

const logger = new PermissionsLogger(verbose);

logger.start();

await packageIndex.setAuthority(authority.address);
logger.setAuthority(packageIndex);

await packageDB.setAuthority(authority.address);
logger.setAuthority(packageDB);

await releaseDB.setAuthority(authority.address);
logger.setAuthority(releaseDB);

logger.newline();

await packageIndex.setPackageDb(packageDB.address);
logger.setDep(packageDB, 'database')

await packageIndex.setReleaseDb(releaseDB.address);
logger.setDep(releaseDB, 'database');

await packageIndex.setReleaseValidator(releaseValidator.address);
logger.setDep(releaseValidator, 'validator');

logger.newline();

// ReleaseDB
const setVersion = releaseDB
.abi
.find(item => item.name === 'setVersion')
.signature;

const setRelease = releaseDB
.abi
.find(item => item.name === 'setRelease')
.signature;

const updateLatestTree = releaseDB
.abi
.find(item => item.name === 'updateLatestTree')
.signature;

// PackageDB
const setPackage = packageDB
.abi
.find(item => item.name === 'setPackage')
.signature;

const setPackageOwner = packageDB
.abi
.find(item => item.name === 'setPackageOwner')
.signature;

// PackageIndex
const release = packageIndex
.abi
.find(item => item.name === 'release')
.signature;


const transferPackageOwner = packageIndex
.abi
.find(item => item.name === 'transferPackageOwner')
.signature;

// ReleaseDB
await authority.setCanCall(
packageIndex.address,
releaseDB.address,
setRelease,
true
);

logger.setCanCall(
packageIndex,
releaseDB,
'setRelease'
);

// PackageDB
await authority.setCanCall(
packageIndex.address,
packageDB.address,
setPackage,
true
);

logger.setCanCall(
packageIndex,
packageDB,
'setPackage'
);

await authority.setCanCall(
packageIndex.address,
packageDB.address,
setPackageOwner,
true
);

logger.setCanCall(
packageIndex,
packageDB,
'setPackageOwner'
);

logger.newline();

await authority.setAnyoneCanCall(
releaseDB.address,
setVersion,
true
);

logger.setAnyoneCanCall(
releaseDB,
'setVersion'
);

await authority.setAnyoneCanCall(
releaseDB.address,
updateLatestTree,
true
);

logger.setAnyoneCanCall(
releaseDB,
'updateLatestTree'
);


// PackageIndex
await authority.setAnyoneCanCall(
packageIndex.address,
release,
true
);

logger.setAnyoneCanCall(
packageIndex,
'release'
);

await authority.setAnyoneCanCall(
packageIndex.address,
transferPackageOwner,
true
);

logger.setAnyoneCanCall(
packageIndex,
'transferPackageOwner'
);

logger.finish();
}

module.exports = setPermissions;

0 comments on commit 8dfe8de

Please sign in to comment.