Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Extract logic from "dao apps" and "dao new" #955

Merged
merged 41 commits into from
Dec 4, 2019
Merged
Show file tree
Hide file tree
Changes from 32 commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
158d9ef
Capitalize comment
macor161 Nov 6, 2019
20ab9c0
Fix coverage reports (#880)
kernelwhisperer Nov 8, 2019
8ad2026
Token cmds refactor (#877)
kernelwhisperer Nov 9, 2019
8344cec
Bump internal-ip from 4.3.0 to 5.0.0 (#889)
dependabot-preview[bot] Nov 10, 2019
e5e5c49
Bump which from 1.3.1 to 2.0.1 (#888)
dependabot-preview[bot] Nov 10, 2019
ab25660
Bump listr-verbose-renderer from 0.5.0 to 0.6.0 (#887)
dependabot-preview[bot] Nov 10, 2019
e33bf5a
Bump open from 6.4.0 to 7.0.0 (#885)
dependabot-preview[bot] Nov 10, 2019
c85add4
Bump listr-input from 0.1.3 to 0.2.0 (#884)
dependabot-preview[bot] Nov 10, 2019
4d6e39c
[Security] Bump eslint-utils from 1.4.0 to 1.4.3 (#883)
dependabot-preview[bot] Nov 10, 2019
a392eef
Merge branch 'develop' into refactor-dao-commands
macor161 Nov 12, 2019
8154637
Add getInstalledApps and getDaoAddress
macor161 Nov 13, 2019
427fc3d
Lint fix
macor161 Nov 13, 2019
00ada9e
Refactor dao exec logic (#909)
macor161 Nov 18, 2019
f246393
Refactor dao apps (#910)
macor161 Nov 18, 2019
1bae418
Merge with refactor-dao-commands
macor161 Nov 18, 2019
3e32955
Add getAllApps
macor161 Nov 18, 2019
3faf892
Add printApps and printPermissionlessApps
macor161 Nov 20, 2019
5f5ff2d
Merge with develop
macor161 Nov 24, 2019
2f72041
Replace getRepoTask with getApmRepo
macor161 Nov 24, 2019
e9c71e0
newDao lib
macor161 Nov 24, 2019
9e25e50
Remove template abi
macor161 Nov 24, 2019
9130c1a
Replace assignIdTask with assignId lib
macor161 Nov 24, 2019
37d90a1
Remove deprecated kits
macor161 Nov 24, 2019
60761cc
Add tests
macor161 Nov 24, 2019
c5323f1
Merge branch 'refactor-dao-apps' into sdk7-dao-new
macor161 Nov 24, 2019
38f083d
Add getAllApps test
macor161 Nov 24, 2019
f68ecbe
Add getDaoAddress test
macor161 Nov 25, 2019
b540482
Fix lint
macor161 Nov 25, 2019
9fe6972
Remove todo
macor161 Nov 25, 2019
e1a8ea7
Fix lint
macor161 Nov 25, 2019
31c3a68
Fix lint and disable IPFS-dependent tests
macor161 Nov 25, 2019
ae3bfe9
Fix missing dependencies and remove console.log
macor161 Nov 25, 2019
55603e6
Remove console.log
macor161 Nov 27, 2019
18fd91a
Fix lint
0xGabi Nov 27, 2019
89c9a48
Fix lint
macor161 Nov 27, 2019
87f4e29
Merge remote branch 'sdk7-dao-new' into sdk7-dao-new
macor161 Nov 27, 2019
ecc070b
Fix lint
macor161 Nov 27, 2019
daa5f0c
Merge branch 'develop' into sdk7-dao-new
macor161 Nov 27, 2019
e96466c
Fix lint and add default template abi
macor161 Nov 27, 2019
5b2d7c0
Remove unnecessary t.plan
macor161 Dec 1, 2019
51d364b
Merge branch 'develop' into sdk7-dao-new
0xGabi Dec 4, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28,013 changes: 20,191 additions & 7,822 deletions packages/aragon-cli/npm-shrinkwrap.json

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -124,9 +124,9 @@ async function generateApplicationArtifact(

// Analyse contract functions and returns an array
// > [{ sig: 'transfer(address)', role: 'X_ROLE', notice: 'Transfers..'}]
artifact.functions = (
await extract(path.resolve(cwd, artifact.path))
).functions
artifact.functions = (await extract(
path.resolve(cwd, artifact.path)
)).functions
// extract abi for each function
// > [{ sig: , role: , notice: , abi: }]
decorateFunctionsWithAbi(artifact.functions, artifact.abi, web3)
Expand Down
147 changes: 65 additions & 82 deletions packages/aragon-cli/src/commands/dao_cmds/apps.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
import { initAragonJS, getApps } from '../../helpers/aragonjs-wrapper'
const TaskList = require('listr')
const chalk = require('chalk')
const { blue, green, white } = require('chalk')
const daoArg = require('./utils/daoArg')
const { listApps } = require('./utils/knownApps')
const { ensureWeb3 } = require('../../helpers/web3-fallback')
const listrOpts = require('@aragon/cli-utils/src/helpers/listr-options')
const { addressesEqual } = require('../../util')
const Table = require('cli-table')
const kernelAbi = require('@aragon/os/build/contracts/Kernel').abi
const {
getDaoAddress,
getInstalledApps,
getAllApps,
} = require('../../lib/dao/apps')

let knownApps

Expand All @@ -23,11 +26,11 @@ exports.builder = function(yargs) {
}

const printAppNameFromAppId = appId => {
return knownApps[appId] ? chalk.blue(knownApps[appId]) : appId
return knownApps[appId] ? blue(knownApps[appId]) : appId
}

const printAppNameAndVersion = (appName, version) => {
return version ? chalk.blue(`${appName}@v${version}`) : chalk.blue(appName)
return version ? blue(`${appName}@v${version}`) : blue(appName)
}

const printContent = content => {
Expand All @@ -38,6 +41,42 @@ const printContent = content => {
return `${content.provider}:${content.location}`
}

const printApps = apps => {
const appsContent = apps
.map(({ appId, proxyAddress, codeAddress, content, appName, version }) => [
appName
? printAppNameAndVersion(appName, version)
: printAppNameFromAppId(appId),
proxyAddress,
printContent(content),
])
.map(row => {
row[0] = row[0].replace('.aragonpm.eth', '')
return row
})

const table = new Table({
head: ['App', 'Proxy address', 'Content'].map(x => white(x)),
})
appsContent.forEach(row => table.push(row))
console.log(table.toString())
}

const printPermissionlessApps = apps => {
if (apps && apps.length) {
const tableForPermissionlessApps = new Table({
head: ['Permissionless app', 'Proxy address'].map(x => white(x)),
})
apps.forEach(app =>
tableForPermissionlessApps.push([
printAppNameFromAppId(app.appId).replace('.aragonpm.eth', ''),
app.proxyAddress,
])
)
console.log(tableForPermissionlessApps.toString())
}
}

exports.handler = async function({
reporter,
dao,
Expand All @@ -51,6 +90,7 @@ exports.handler = async function({
}) {
knownApps = listApps(module ? [module.appName] : [])
const web3 = await ensureWeb3(network)
let apps, daoAddress, appsWithoutPermissions

const tasks = new TaskList(
[
Expand All @@ -59,94 +99,37 @@ exports.handler = async function({
task: async (ctx, task) => {
task.output = `Fetching apps for ${dao}...`
const { 'ens-registry': ensRegistry, ipfs } = apmOptions

try {
const wrapper = await initAragonJS(dao, ensRegistry, {
ipfsConf: ipfs,
provider: wsProvider || web3.currentProvider,
onDaoAddress: addr => {
ctx.daoAddress = addr
},
})

ctx.apps = await getApps(wrapper)
} catch (err) {
reporter.error('Error inspecting DAO apps')
reporter.debug(err)
process.exit(1)
const options = {
registryAddress: ensRegistry,
ipfs,
provider: wsProvider || web3.currentProvider,
}

apps = await getInstalledApps(dao, options)
daoAddress = await getDaoAddress(dao, options)
},
},
{
title: 'Fetching permissionless apps',
enabled: () => all,
task: async (ctx, task) => {
const kernel = new web3.eth.Contract(kernelAbi, ctx.daoAddress)

const events = await kernel.getPastEvents('NewAppProxy', {
fromBlock: await kernel.methods.getInitializationBlock().call(),
toBlock: 'latest',
})

ctx.appsWithoutPermissions = events
.map(event => ({
proxyAddress: event.returnValues.proxy,
appId: event.returnValues.appId,
}))
// Remove apps that have permissions
.filter(
({ proxyAddress }) =>
!ctx.apps.find(app =>
addressesEqual(app.proxyAddress, proxyAddress)
)
)
appsWithoutPermissions = (await getAllApps(daoAddress, {
web3,
})).filter(
({ proxyAddress }) =>
!apps.find(app => addressesEqual(app.proxyAddress, proxyAddress))
)
},
},
],
listrOpts(silent, debug)
)

return tasks.run().then(ctx => {
reporter.success(
`Successfully fetched DAO apps for ${chalk.green(ctx.daoAddress)}`
)
const appsContent = ctx.apps
.map(
({ appId, proxyAddress, codeAddress, content, appName, version }) => [
appName
? printAppNameAndVersion(appName, version)
: printAppNameFromAppId(appId),
proxyAddress,
printContent(content),
]
)
// filter registry name to make it shorter
// TODO: Add flag to turn off
.map(row => {
row[0] = row[0].replace('.aragonpm.eth', '')
return row
})

const table = new Table({
head: ['App', 'Proxy address', 'Content'].map(x => chalk.white(x)),
})
appsContent.forEach(row => table.push(row))
console.log(table.toString())

// Print permisionless apps
if (ctx.appsWithoutPermissions) {
const tableForPermissionlessApps = new Table({
head: ['Permissionless app', 'Proxy address'].map(x => chalk.white(x)),
})
ctx.appsWithoutPermissions.forEach(app =>
tableForPermissionlessApps.push([
printAppNameFromAppId(app.appId).replace('.aragonpm.eth', ''),
app.proxyAddress,
])
)
console.log(tableForPermissionlessApps.toString())
}

process.exit() // force exit, as aragonjs hangs
})
await tasks.run()

reporter.success(`Successfully fetched DAO apps for ${green(daoAddress)}`)

printApps(apps)
printPermissionlessApps(appsWithoutPermissions)
process.exit()
}
Loading