Base infrastructure/contracts deployment dapp (#4726)
* Add deploy dapp * Filter by dapp id * WIP * Contract deployment operational * Additional contracts * unicode icons * Column layout * app deployment * DRY up lists * Remove unused function * Add basiccoin deployment & tokenreg * Externalise code * Check for code versions * Gavcoin, Email & SMS contracts * Update to latest email contract * Deploy & register badges * Add jg external apps * Check owner for deleted registry entries * DRY estimate/post * Add wallet library to deployment
This commit is contained in:
parent
2924d0a20f
commit
90a5c9e489
File diff suppressed because one or more lines are too long
29
js/src/dapps/chaindeploy.js
Normal file
29
js/src/dapps/chaindeploy.js
Normal file
@ -0,0 +1,29 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import ReactDOM from 'react-dom';
|
||||
import React from 'react';
|
||||
|
||||
import Application from './chaindeploy/Application';
|
||||
|
||||
import '../../assets/fonts/Roboto/font.css';
|
||||
import '../../assets/fonts/RobotoMono/font.css';
|
||||
import './style.css';
|
||||
|
||||
ReactDOM.render(
|
||||
<Application />,
|
||||
document.querySelector('#container')
|
||||
);
|
78
js/src/dapps/chaindeploy/Application/application.css
Normal file
78
js/src/dapps/chaindeploy/Application/application.css
Normal file
@ -0,0 +1,78 @@
|
||||
/* Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
/* This file is part of Parity.
|
||||
/*
|
||||
/* Parity is free software: you can redistribute it and/or modify
|
||||
/* it under the terms of the GNU General Public License as published by
|
||||
/* the Free Software Foundation, either version 3 of the License, or
|
||||
/* (at your option) any later version.
|
||||
/*
|
||||
/* Parity is distributed in the hope that it will be useful,
|
||||
/* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
/* GNU General Public License for more details.
|
||||
/*
|
||||
/* You should have received a copy of the GNU General Public License
|
||||
/* along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
.body {
|
||||
font-size: 0.8em;
|
||||
|
||||
.buttons {
|
||||
position: fixed;
|
||||
right: 0.5em;
|
||||
top: 0.5em;
|
||||
z-index: 100;
|
||||
|
||||
button {
|
||||
background: rgb(0, 200, 255);
|
||||
border: 2px solid rgba(0, 200, 255, 0.5);
|
||||
border-radius: 0.25em;
|
||||
color: white;
|
||||
cursor: pointer;
|
||||
font-size: 1em;
|
||||
margin: 0 0 0 0.5em;
|
||||
outline: none;
|
||||
padding: 0.75em 1.5em;
|
||||
white-space: nowrap;
|
||||
|
||||
&:disabled {
|
||||
background: rgb(230, 230, 230);
|
||||
border: 2px solid rgba(230, 230, 230, 0.5);
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.icon {
|
||||
fill: white !important;
|
||||
margin-right: 0.5em;
|
||||
}
|
||||
|
||||
.text {
|
||||
display: inline-block;
|
||||
line-height: 24px;
|
||||
vertical-align: top;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.section {
|
||||
margin: 0 1em 3em 1em;
|
||||
|
||||
h3 {
|
||||
background: rgba(0, 0, 0, 0.025);
|
||||
border-radius: 0.25em;
|
||||
padding: 0.75em 1em;
|
||||
margin-bottom: 0.5em;
|
||||
|
||||
small {
|
||||
vertical-align: middle;
|
||||
}
|
||||
}
|
||||
|
||||
.list {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
}
|
||||
}
|
178
js/src/dapps/chaindeploy/Application/application.js
Normal file
178
js/src/dapps/chaindeploy/Application/application.js
Normal file
@ -0,0 +1,178 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import { observer } from 'mobx-react';
|
||||
import React, { Component } from 'react';
|
||||
|
||||
import Contract from '../Contract';
|
||||
import Dapp from '../Dapp';
|
||||
import Store from '../store';
|
||||
|
||||
import styles from './application.css';
|
||||
|
||||
@observer
|
||||
export default class Application extends Component {
|
||||
store = new Store();
|
||||
|
||||
render () {
|
||||
return (
|
||||
<div className={ styles.body }>
|
||||
{ this.renderContracts(false) }
|
||||
{ this.renderContracts(true) }
|
||||
{ this.renderApps() }
|
||||
{ this.renderContracts(false, true) }
|
||||
{ this.renderApps(true) }
|
||||
{ this.renderButtons() }
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
renderButton (text, clickHandler, disabled) {
|
||||
const onClick = (event) => {
|
||||
if (!disabled) {
|
||||
clickHandler(event);
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<button
|
||||
disabled={ disabled }
|
||||
onClick={ onClick }
|
||||
>
|
||||
<div className={ styles.text }>
|
||||
{ text }
|
||||
</div>
|
||||
</button>
|
||||
);
|
||||
}
|
||||
|
||||
renderButtons () {
|
||||
const { contractBadgereg, contractDappreg, isBadgeDeploying, isContractDeploying, isDappDeploying, haveAllBadges, haveAllContracts, haveAllDapps, registry } = this.store;
|
||||
const disableRegistry = registry.address || registry.isDeploying;
|
||||
const disableContracts = !registry.address || isContractDeploying || haveAllContracts;
|
||||
const disableDapps = !contractDappreg.address || isDappDeploying || haveAllDapps;
|
||||
const disableBadges = !registry.address || !contractBadgereg.address || isBadgeDeploying || haveAllBadges;
|
||||
|
||||
return (
|
||||
<div className={ styles.buttons }>
|
||||
{ this.renderButton('registry', this.deployRegistry, disableRegistry) }
|
||||
{ this.renderButton('contracts', this.deployContracts, disableContracts) }
|
||||
{ this.renderButton('badges', this.deployBadges, disableBadges) }
|
||||
{ this.renderButton('apps', this.deployApps, disableDapps) }
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
renderContracts (isBadges, isExternal) {
|
||||
const { badges, contracts, contractBadgereg, registry } = this.store;
|
||||
const regaddress = isBadges
|
||||
? contractBadgereg.address
|
||||
: registry.address;
|
||||
|
||||
return (
|
||||
<div className={ styles.section }>
|
||||
<h3>
|
||||
{
|
||||
isExternal
|
||||
? 'External '
|
||||
: ''
|
||||
}{
|
||||
isBadges
|
||||
? 'Badges '
|
||||
: 'Contracts '
|
||||
}<small>(registry { regaddress || 'unknown' })</small>
|
||||
</h3>
|
||||
<div className={ styles.list }>
|
||||
{
|
||||
isExternal || isBadges
|
||||
? null
|
||||
: (
|
||||
<Contract
|
||||
contract={ registry }
|
||||
key='registry'
|
||||
/>
|
||||
)
|
||||
}
|
||||
{
|
||||
(isBadges ? badges : contracts)
|
||||
.filter((contract) => contract.isExternal === isExternal)
|
||||
.map((contract) => {
|
||||
return (
|
||||
<Contract
|
||||
contract={ contract }
|
||||
disabled={ !registry.address }
|
||||
key={ contract.id }
|
||||
/>
|
||||
);
|
||||
})
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
renderApps (isExternal) {
|
||||
const { apps, contractDappreg, contractGithubhint } = this.store;
|
||||
const isDisabled = !contractDappreg.isOnChain || !contractGithubhint.isOnChain;
|
||||
|
||||
return (
|
||||
<div className={ styles.section }>
|
||||
<h3>
|
||||
{
|
||||
isExternal
|
||||
? 'External '
|
||||
: ''
|
||||
}Applications <small>(registry {
|
||||
contractDappreg.address
|
||||
? contractDappreg.address
|
||||
: 'unknown'
|
||||
})</small>
|
||||
</h3>
|
||||
<div className={ styles.list }>
|
||||
{
|
||||
apps
|
||||
.filter((app) => app.isExternal === isExternal)
|
||||
.map((app) => {
|
||||
return (
|
||||
<Dapp
|
||||
dapp={ app }
|
||||
disabled={ isDisabled }
|
||||
key={ app.id }
|
||||
/>
|
||||
);
|
||||
})
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
deployApps = () => {
|
||||
return this.store.deployApps();
|
||||
}
|
||||
|
||||
deployBadges = () => {
|
||||
return this.store.deployBadges();
|
||||
}
|
||||
|
||||
deployContracts = () => {
|
||||
return this.store.deployContracts();
|
||||
}
|
||||
|
||||
deployRegistry = () => {
|
||||
return this.store.deployRegistry();
|
||||
}
|
||||
}
|
17
js/src/dapps/chaindeploy/Application/index.js
Normal file
17
js/src/dapps/chaindeploy/Application/index.js
Normal file
@ -0,0 +1,17 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
export default from './application';
|
132
js/src/dapps/chaindeploy/Contract/contract.js
Normal file
132
js/src/dapps/chaindeploy/Contract/contract.js
Normal file
@ -0,0 +1,132 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import React, { Component, PropTypes } from 'react';
|
||||
|
||||
import ListItem, { Header, Row } from '../ListItem';
|
||||
|
||||
export default class Contract extends Component {
|
||||
static propTypes = {
|
||||
contract: PropTypes.object.isRequired,
|
||||
disabled: PropTypes.bool
|
||||
}
|
||||
|
||||
render () {
|
||||
const { contract, disabled } = this.props;
|
||||
const location = contract.id === 'registry'
|
||||
? 'chain'
|
||||
: 'registry';
|
||||
|
||||
return (
|
||||
<ListItem
|
||||
disabled={ disabled }
|
||||
status={ contract.status }
|
||||
>
|
||||
<Header
|
||||
isBusy={ contract.isDeploying }
|
||||
isOk={ !!contract.instance && contract.isOnChain && contract.hasLatestCode }
|
||||
>
|
||||
{ contract.id } was {
|
||||
contract.address
|
||||
? 'deployed'
|
||||
: 'not found'
|
||||
}
|
||||
</Header>
|
||||
<Row
|
||||
disabled={ !contract.instance }
|
||||
isBusy={ contract.isDeploying }
|
||||
isOk={ !!contract.address }
|
||||
>
|
||||
{
|
||||
contract.address
|
||||
? contract.address
|
||||
: 'no address'
|
||||
}
|
||||
</Row>
|
||||
<Row
|
||||
disabled={ !contract.instance }
|
||||
isBusy={ contract.isDeploying }
|
||||
isOk={ contract.hasLatestCode }
|
||||
>
|
||||
{
|
||||
contract.hasLatestCode
|
||||
? 'has latest available code'
|
||||
: 'does not have latest code'
|
||||
}
|
||||
</Row>
|
||||
<Row
|
||||
disabled={ !contract.instance }
|
||||
isBusy={ contract.isDeploying }
|
||||
isOk={ !!contract.isOnChain }
|
||||
>
|
||||
{
|
||||
contract.isOnChain
|
||||
? `registered on ${location}`
|
||||
: `not registered on ${location}`
|
||||
}
|
||||
</Row>
|
||||
{ this.renderBadgeInfo() }
|
||||
</ListItem>
|
||||
);
|
||||
}
|
||||
|
||||
renderBadgeInfo () {
|
||||
const { contract } = this.props;
|
||||
|
||||
if (!contract.isBadge) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return [
|
||||
<Row
|
||||
disabled={ !contract.instance }
|
||||
isBusy={ contract.isDeploying }
|
||||
isOk={ contract.isBadgeRegistered }
|
||||
key='isBadgeRegistered'
|
||||
>
|
||||
{
|
||||
contract.isBadgeRegistered
|
||||
? 'found in badgereg'
|
||||
: 'not found in badgereg'
|
||||
}
|
||||
</Row>,
|
||||
<Row
|
||||
disabled={ !contract.instance }
|
||||
isBusy={ contract.isDeploying }
|
||||
isOk={ !!contract.badgeImageHash }
|
||||
key='imageHash'
|
||||
>
|
||||
{
|
||||
contract.badgeImageHash
|
||||
? `badge imageHash ${contract.badgeImageHash}`
|
||||
: 'has not registered a badge imageHash'
|
||||
}
|
||||
</Row>,
|
||||
<Row
|
||||
disabled={ !contract.instance }
|
||||
isBusy={ contract.isDeploying }
|
||||
isOk={ contract.badgeImageMatch }
|
||||
key='imageMatch'
|
||||
>
|
||||
{
|
||||
contract.badgeImageMatch
|
||||
? 'has latest badge imageHash'
|
||||
: 'does not have latest badge imageHash'
|
||||
}
|
||||
</Row>
|
||||
];
|
||||
}
|
||||
}
|
17
js/src/dapps/chaindeploy/Contract/index.js
Normal file
17
js/src/dapps/chaindeploy/Contract/index.js
Normal file
@ -0,0 +1,17 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
export default from './contract';
|
98
js/src/dapps/chaindeploy/Dapp/dapp.js
Normal file
98
js/src/dapps/chaindeploy/Dapp/dapp.js
Normal file
@ -0,0 +1,98 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import React, { Component, PropTypes } from 'react';
|
||||
|
||||
import ListItem, { Header, Row } from '../ListItem';
|
||||
|
||||
export default class Dapp extends Component {
|
||||
static propTypes = {
|
||||
dapp: PropTypes.object.isRequired,
|
||||
disabled: PropTypes.bool
|
||||
}
|
||||
|
||||
render () {
|
||||
const { dapp, disabled } = this.props;
|
||||
|
||||
return (
|
||||
<ListItem
|
||||
disabled={ disabled }
|
||||
status={ dapp.status }
|
||||
>
|
||||
<Header
|
||||
isBusy={ dapp.isDeploying }
|
||||
isOk={
|
||||
dapp.isOnChain &&
|
||||
!!dapp.imageHash && !!dapp.imageMatch &&
|
||||
(!dapp.source.contentHash || !!dapp.contentMatch) &&
|
||||
(!dapp.source.manifestHash || !!dapp.manifestMatch)
|
||||
}
|
||||
>
|
||||
{ dapp.name }
|
||||
</Header>
|
||||
<Row
|
||||
isBusy={ dapp.isDeploying }
|
||||
isOk={ dapp.isOnChain }
|
||||
>
|
||||
{
|
||||
dapp.isOnChain
|
||||
? 'found in dappreg'
|
||||
: 'not found in dappreg'
|
||||
}
|
||||
</Row>
|
||||
{ this.renderHash(dapp, 'image') }
|
||||
{ this.renderHash(dapp, 'manifest') }
|
||||
{ this.renderHash(dapp, 'content') }
|
||||
</ListItem>
|
||||
);
|
||||
}
|
||||
|
||||
renderHash (dapp, type) {
|
||||
if (!dapp.source[`${type}Hash`]) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const isMatch = dapp[`${type}Match`];
|
||||
const hash = dapp[`${type}Hash`];
|
||||
|
||||
return [
|
||||
<Row
|
||||
disabled={ !dapp.isOnChain }
|
||||
isBusy={ dapp.isDeploying }
|
||||
isOk={ !!hash }
|
||||
key={ `${type}Hash` }
|
||||
>
|
||||
{
|
||||
hash
|
||||
? `${type}Hash ${hash}`
|
||||
: `has not registered an ${type}Hash`
|
||||
}
|
||||
</Row>,
|
||||
<Row
|
||||
disabled={ !dapp.isOnChain }
|
||||
isBusy={ dapp.isDeploying }
|
||||
isOk={ isMatch }
|
||||
key={ `${type}Match` }
|
||||
>
|
||||
{
|
||||
isMatch
|
||||
? `has latest ${type}Hash`
|
||||
: `does not have latest ${type}Hash`
|
||||
}
|
||||
</Row>
|
||||
];
|
||||
}
|
||||
}
|
17
js/src/dapps/chaindeploy/Dapp/index.js
Normal file
17
js/src/dapps/chaindeploy/Dapp/index.js
Normal file
@ -0,0 +1,17 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
export default from './dapp';
|
45
js/src/dapps/chaindeploy/ListItem/Header/header.js
Normal file
45
js/src/dapps/chaindeploy/ListItem/Header/header.js
Normal file
@ -0,0 +1,45 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import React, { Component, PropTypes } from 'react';
|
||||
|
||||
import Icon from '../Icon';
|
||||
|
||||
import styles from '../listItem.css';
|
||||
|
||||
export default class Header extends Component {
|
||||
static propTypes = {
|
||||
children: PropTypes.node.isRequired,
|
||||
isBusy: PropTypes.bool,
|
||||
isOk: PropTypes.bool
|
||||
}
|
||||
|
||||
render () {
|
||||
const { children, isBusy, isOk } = this.props;
|
||||
|
||||
return (
|
||||
<div className={ styles.header }>
|
||||
<Icon
|
||||
isBusy={ isBusy }
|
||||
isOk={ isOk }
|
||||
/>
|
||||
<div className={ styles.title }>
|
||||
{ children }
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
17
js/src/dapps/chaindeploy/ListItem/Header/index.js
Normal file
17
js/src/dapps/chaindeploy/ListItem/Header/index.js
Normal file
@ -0,0 +1,17 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
export default from './header';
|
53
js/src/dapps/chaindeploy/ListItem/Icon/icon.js
Normal file
53
js/src/dapps/chaindeploy/ListItem/Icon/icon.js
Normal file
@ -0,0 +1,53 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import React, { Component, PropTypes } from 'react';
|
||||
|
||||
import styles from '../listItem.css';
|
||||
|
||||
export default class Icon extends Component {
|
||||
static propTypes = {
|
||||
isBusy: PropTypes.bool,
|
||||
isOk: PropTypes.bool
|
||||
}
|
||||
|
||||
render () {
|
||||
const { isBusy, isOk } = this.props;
|
||||
|
||||
return (
|
||||
<div
|
||||
className={
|
||||
[
|
||||
styles.icon,
|
||||
isOk
|
||||
? styles.ok
|
||||
: styles.error
|
||||
].join(' ')
|
||||
}
|
||||
>
|
||||
{
|
||||
isOk
|
||||
? '\u2714'
|
||||
: (
|
||||
isBusy
|
||||
? '\u29d6'
|
||||
: '\u2716'
|
||||
)
|
||||
}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
17
js/src/dapps/chaindeploy/ListItem/Icon/index.js
Normal file
17
js/src/dapps/chaindeploy/ListItem/Icon/index.js
Normal file
@ -0,0 +1,17 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
export default from './icon';
|
17
js/src/dapps/chaindeploy/ListItem/Row/index.js
Normal file
17
js/src/dapps/chaindeploy/ListItem/Row/index.js
Normal file
@ -0,0 +1,17 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
export default from './row';
|
54
js/src/dapps/chaindeploy/ListItem/Row/row.js
Normal file
54
js/src/dapps/chaindeploy/ListItem/Row/row.js
Normal file
@ -0,0 +1,54 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import React, { Component, PropTypes } from 'react';
|
||||
|
||||
import Icon from '../Icon';
|
||||
|
||||
import styles from '../listItem.css';
|
||||
|
||||
export default class Row extends Component {
|
||||
static propTypes = {
|
||||
children: PropTypes.node.isRequired,
|
||||
disabled: PropTypes.bool,
|
||||
isBusy: PropTypes.bool,
|
||||
isOk: PropTypes.bool
|
||||
}
|
||||
|
||||
render () {
|
||||
const { children, disabled, isBusy, isOk } = this.props;
|
||||
|
||||
return (
|
||||
<div
|
||||
className={
|
||||
[
|
||||
styles.details,
|
||||
disabled
|
||||
? styles.muted
|
||||
: ''
|
||||
].join(' ') }
|
||||
>
|
||||
<Icon
|
||||
isBusy={ isBusy }
|
||||
isOk={ isOk }
|
||||
/>
|
||||
<div className={ styles.title }>
|
||||
{ children }
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
20
js/src/dapps/chaindeploy/ListItem/index.js
Normal file
20
js/src/dapps/chaindeploy/ListItem/index.js
Normal file
@ -0,0 +1,20 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
export Header from './Header';
|
||||
export Row from './Row';
|
||||
|
||||
export default from './listItem';
|
94
js/src/dapps/chaindeploy/ListItem/listItem.css
Normal file
94
js/src/dapps/chaindeploy/ListItem/listItem.css
Normal file
@ -0,0 +1,94 @@
|
||||
/* Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
/* This file is part of Parity.
|
||||
/*
|
||||
/* Parity is free software: you can redistribute it and/or modify
|
||||
/* it under the terms of the GNU General Public License as published by
|
||||
/* the Free Software Foundation, either version 3 of the License, or
|
||||
/* (at your option) any later version.
|
||||
/*
|
||||
/* Parity is distributed in the hope that it will be useful,
|
||||
/* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
/* GNU General Public License for more details.
|
||||
/*
|
||||
/* You should have received a copy of the GNU General Public License
|
||||
/* along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
.listItem {
|
||||
box-sizing: border-box;
|
||||
flex: 0 1 33.33%;
|
||||
max-width: 33.33%;
|
||||
padding: 0.5em;
|
||||
position: relative;
|
||||
|
||||
.body {
|
||||
background: rgba(0, 0, 0, 0.025);
|
||||
border-radius: 0.25em;
|
||||
box-sizing: border-box;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
flex-wrap: nowrap;
|
||||
overflow: hidden;
|
||||
padding: 0.75em;
|
||||
}
|
||||
|
||||
.status {
|
||||
background: #f80;
|
||||
border-radius: 0.25em;
|
||||
color: white;
|
||||
font-size: 0.75em;
|
||||
line-height: 1em;
|
||||
opacity: 0.9;
|
||||
padding: 0.5em;
|
||||
position: absolute;
|
||||
right: 1em;
|
||||
top: 1em;
|
||||
}
|
||||
}
|
||||
|
||||
.header,
|
||||
.details {
|
||||
display: flex;
|
||||
line-height: 1.5em;
|
||||
padding: 0.125em 0;
|
||||
position: relative;
|
||||
white-space: nowrap;
|
||||
|
||||
.title {
|
||||
display: inline-block;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
vertical-align: top;
|
||||
}
|
||||
}
|
||||
|
||||
.details {
|
||||
margin-left: 2em;
|
||||
}
|
||||
|
||||
.icon {
|
||||
border-radius: 0.25em;
|
||||
display: inline-block;
|
||||
flex: 0 0 1.5em;
|
||||
height: 1.5em;
|
||||
margin-right: 0.5em;
|
||||
opacity: 0.75;
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
width: 1.5em;
|
||||
|
||||
&.error {
|
||||
box-shadow: inset 0 0 0 2px rgb(200, 0, 0);
|
||||
color: rgb(200, 0, 0);
|
||||
}
|
||||
|
||||
&.ok {
|
||||
box-shadow: inset 0 0 0 2px rgb(0, 200, 0);
|
||||
color: rgb(0, 200, 0);
|
||||
}
|
||||
}
|
||||
|
||||
.muted {
|
||||
opacity: 0.25;
|
||||
}
|
63
js/src/dapps/chaindeploy/ListItem/listItem.js
Normal file
63
js/src/dapps/chaindeploy/ListItem/listItem.js
Normal file
@ -0,0 +1,63 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import React, { Component, PropTypes } from 'react';
|
||||
|
||||
import styles from './listItem.css';
|
||||
|
||||
export default class ListItem extends Component {
|
||||
static propTypes = {
|
||||
children: PropTypes.node.isRequired,
|
||||
disabled: PropTypes.bool,
|
||||
status: PropTypes.string
|
||||
}
|
||||
|
||||
render () {
|
||||
const { children, disabled } = this.props;
|
||||
|
||||
return (
|
||||
<div
|
||||
className={
|
||||
[
|
||||
styles.listItem,
|
||||
disabled
|
||||
? styles.muted
|
||||
: ''
|
||||
].join(' ')
|
||||
}
|
||||
>
|
||||
<div className={ styles.body }>
|
||||
{ children }
|
||||
</div>
|
||||
{ this.renderStatus() }
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
renderStatus () {
|
||||
const { status } = this.props;
|
||||
|
||||
if (!status) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return (
|
||||
<div className={ styles.status }>
|
||||
{ status }
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
43
js/src/dapps/chaindeploy/_dapps.js
Normal file
43
js/src/dapps/chaindeploy/_dapps.js
Normal file
@ -0,0 +1,43 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import builtinsJson from '~/views/Dapps/builtin.json';
|
||||
|
||||
const REGISTER_URLS = {
|
||||
console: 'https://raw.githubusercontent.com/ethcore/console/3ea0dbfefded359ccdbea37bc4cf350c0aa16948/console.jpeg',
|
||||
dappreg: 'https://raw.githubusercontent.com/ethcore/dapp-assets/cdd6ac4f1e2f11619bed72a53ae71217dffe19ad/dapps/legos-64x64.png',
|
||||
githubhint: 'https://raw.githubusercontent.com/ethcore/dapp-assets/b88e983abaa1a6a6345b8d9448c15b117ddb540e/dapps/link-64x64.jpg',
|
||||
localtx: 'https://raw.githubusercontent.com/ethcore/dapp-assets/cdd6ac4f1e2f11619bed72a53ae71217dffe19ad/dapps/stack-64x64.png',
|
||||
registry: 'https://raw.githubusercontent.com/ethcore/dapp-assets/b88e983abaa1a6a6345b8d9448c15b117ddb540e/dapps/register-64x64.jpg',
|
||||
signaturereg: 'https://raw.githubusercontent.com/ethcore/dapp-assets/b88e983abaa1a6a6345b8d9448c15b117ddb540e/dapps/hex-64x64.jpg',
|
||||
tokendeploy: 'https://raw.githubusercontent.com/ethcore/dapp-assets/b88e983abaa1a6a6345b8d9448c15b117ddb540e/dapps/interlock-64x64.png',
|
||||
tokenreg: 'https://raw.githubusercontent.com/ethcore/dapp-assets/b88e983abaa1a6a6345b8d9448c15b117ddb540e/dapps/coins-64x64.jpg',
|
||||
web: 'https://raw.githubusercontent.com/ethcore/dapp-assets/ec6138115d0e1f45258969cd90b3b274e0ff2258/dapps/earth-64x64.jpg'
|
||||
};
|
||||
|
||||
const builtins = builtinsJson
|
||||
.filter((app) => app.id)
|
||||
.map((app) => {
|
||||
app.source = {
|
||||
imageUrl: REGISTER_URLS[app.id]
|
||||
};
|
||||
|
||||
return app;
|
||||
});
|
||||
|
||||
export {
|
||||
builtins
|
||||
};
|
1
js/src/dapps/chaindeploy/contracts/abi/jg-voting.json
Normal file
1
js/src/dapps/chaindeploy/contracts/abi/jg-voting.json
Normal file
@ -0,0 +1 @@
|
||||
[{"constant":true,"inputs":[],"name":"count","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalVotes","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"setOwner","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_index","type":"uint256"}],"name":"hasSenderVoted","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_index","type":"uint256"},{"name":"_answer","type":"uint256"}],"name":"newAnswer","outputs":[{"name":"","type":"bool"}],"payable":true,"type":"function"},{"constant":false,"inputs":[{"name":"_fee","type":"uint256"}],"name":"setQuestionFee","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"questionFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_index","type":"uint256"}],"name":"get","outputs":[{"name":"closed","type":"bool"},{"name":"owner","type":"address"},{"name":"question","type":"string"},{"name":"balanceNo","type":"uint256"},{"name":"balanceYes","type":"uint256"},{"name":"balanceMaybe","type":"uint256"},{"name":"votesNo","type":"uint256"},{"name":"votesYes","type":"uint256"},{"name":"votesMaybe","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"drain","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_question","type":"string"}],"name":"newQuestion","outputs":[{"name":"","type":"bool"}],"payable":true,"type":"function"},{"constant":true,"inputs":[],"name":"totalBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"answerFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_index","type":"uint256"}],"name":"closeQuestion","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_fee","type":"uint256"}],"name":"setAnswerFee","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"inputs":[],"payable":false,"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"index","type":"uint256"},{"indexed":false,"name":"question","type":"string"}],"name":"NewQuestion","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"index","type":"uint256"},{"indexed":true,"name":"answer","type":"uint256"},{"indexed":false,"name":"value","type":"uint256"}],"name":"NewAnswer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"old","type":"address"},{"indexed":true,"name":"current","type":"address"}],"name":"NewOwner","type":"event"}]
|
30
js/src/dapps/chaindeploy/contracts/badgereg.js
Normal file
30
js/src/dapps/chaindeploy/contracts/badgereg.js
Normal file
@ -0,0 +1,30 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import abi from '~/contracts/abi/badgereg';
|
||||
import { compiler, source as sourceUrl, output as byteCode } from './code/badgereg';
|
||||
|
||||
const id = 'badgereg';
|
||||
const deployParams = [];
|
||||
|
||||
export {
|
||||
abi,
|
||||
byteCode,
|
||||
compiler,
|
||||
deployParams,
|
||||
id,
|
||||
sourceUrl
|
||||
};
|
5
js/src/dapps/chaindeploy/contracts/code/badgereg.json
Normal file
5
js/src/dapps/chaindeploy/contracts/code/badgereg.json
Normal file
File diff suppressed because one or more lines are too long
5
js/src/dapps/chaindeploy/contracts/code/dappreg.json
Normal file
5
js/src/dapps/chaindeploy/contracts/code/dappreg.json
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"compiler": "v0.4.9+commit.364da425",
|
||||
"source": "https://github.com/ethcore/contracts/blob/225bf022ddd967af2b9ea188e8f611489ca5d7fe/DappReg.sol",
|
||||
"output": "0x606060405260008054600160a060020a03191633600160a060020a0316179055670de0b6b3a7640000600355341561003357fe5b5b6106ee806100436000396000f300606060405236156100a95763ffffffff60e060020a6000350416630257c48c81146100ab57806306661abd146100d357806313af4035146100f55780631a0919dc1461011357806369fe0e2d146101285780638da5cb5b1461013d5780638eaa6ac01461016957806391cd242d1461019d5780639890220b146101b8578063c52bd836146101ca578063ddca3f43146101eb578063e0886f901461020d578063e1fa8e8414610241575bfe5b34156100b357fe5b6100c160043560243561024e565b60408051918252519081900360200190f35b34156100db57fe5b6100c1610272565b60408051918252519081900360200190f35b34156100fd57fe5b610111600160a060020a0360043516610279565b005b341561011b57fe5b6101116004356102ed565b005b341561013057fe5b610111600435610388565b005b341561014557fe5b61014d6103ad565b60408051600160a060020a039092168252519081900360200190f35b341561017157fe5b61017c6004356103bc565b60408051928352600160a060020a0390911660208301528051918290030190f35b34156101a557fe5b6101116004356024356044356103e4565b005b34156101c057fe5b61011161046d565b005b34156101d257fe5b610111600435600160a060020a03602435166104c0565b005b34156101f357fe5b6100c161054e565b60408051918252519081900360200190f35b341561021557fe5b61017c600435610554565b60408051928352600160a060020a0390911660208301528051918290030190f35b6101116004356105ab565b005b60008281526001602090815260408083208484526002019091529020545b92915050565b6002545b90565b60005433600160a060020a0390811691161461029457610000565b60008054604051600160a060020a03808516939216917f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b236491a360008054600160a060020a031916600160a060020a0383161790555b5b50565b60008181526001602081905260409091200154819033600160a060020a0390811691161480159061032d575060005433600160a060020a03908116911614155b1561033757610000565b60008281526001602081905260408083208381559091018054600160a060020a03191690555183917fe17fec26316aebe957e188549d659a89f359c49766bcc0ae2fb7ded274ffe14691a25b5b5050565b60005433600160a060020a039081169116146103a357610000565b60038190555b5b50565b600054600160a060020a031681565b6000818152600160208190526040909120805491810154600160a060020a0316905b50915091565b60008381526001602081905260409091200154839033600160a060020a0390811691161461041157610000565b600084815260016020908152604080832086845260020182529182902084905581518481529151859287927f4dcd4fb147bb133a0da8fbf4e5fc3ddd64f04d4b3f6cbee584374b889d28c78d92918290030190a35b5b50505050565b60005433600160a060020a0390811691161461048857610000565b604051600160a060020a0333811691309091163180156108fc02916000818181858888f1935050505015156104bc57610000565b5b5b565b60008281526001602081905260409091200154829033600160a060020a039081169116146104ed57610000565b60008381526001602081905260408083209091018054600160a060020a031916600160a060020a0386169081179091559051909185917fd3d10d874a10020c2bce719499d1fd8756d880b128eb2945dd01b3830854e7169190a35b5b505050565b60035481565b6000600060006001600060028681548110151561056d57fe5b906000526020600020900160005b50548152602081019190915260400160002080546001820154909450600160a060020a0316925090505b50915091565b6003543410156105ba57610000565b6000818152600160205260409020548190156105d557610000565b60028054600181016105e78382610677565b916000526020600020900160005b508390555060408051808201825283815233600160a060020a0390811660208084018281526000888152600192839052868120955186559051949091018054600160a060020a0319169490931693909317909155915184917f7d917fcbc9a29a9705ff9936ffa599500e4fd902e4486bae317414fe967b307c91a35b5b505b50565b815481835581811511610548576000838152602090206105489181019083016106a1565b5b505050565b61027691905b808211156106bb57600081556001016106a7565b5090565b905600a165627a7a7230582011d8a45e381635e9de17e14cc4de97a1e17758cfac1fd25e8a5bc1d5f4d1da9d0029"
|
||||
}
|
5
js/src/dapps/chaindeploy/contracts/code/gavcoin.json
Normal file
5
js/src/dapps/chaindeploy/contracts/code/gavcoin.json
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"compiler": "v0.4.9+commit.364da425",
|
||||
"source": "https://github.com/ethcore/contracts/blob/58842b92c00e3c45a84b6d0ac9b842f016dde50a/GavCoin.sol",
|
||||
"output": "0x606060405266038d7ea4c680006002556305f5e100600355341561001f57fe5b5b6108008061002f6000396000f300606060405236156100885763ffffffff60e060020a600035041663095ea7b3811461009f57806318160ddd146100d257806323b872dd146100f457806329cbdc861461012d57806355234ec0146101465780635af36e3e1461016857806370a0823114610192578063a035b1fe146101c0578063a9059cbb146101e2578063dd62ed3e14610215575b61009d5b61009a3360ff60020a610249565b5b565b005b34156100a757fe5b6100be600160a060020a0360043516602435610390565b604080519115158252519081900360200190f35b34156100da57fe5b6100e2610416565b60408051918252519081900360200190f35b34156100fc57fe5b6100be600160a060020a036004358116906024351660443561041c565b604080519115158252519081900360200190f35b61009d600160a060020a036004351660243561052a565b005b341561014e57fe5b6100e2610539565b60408051918252519081900360200190f35b341561017057fe5b6100be60043560243561053f565b604080519115158252519081900360200190f35b341561019a57fe5b6100e2600160a060020a03600435166106d0565b60408051918252519081900360200190f35b34156101c857fe5b6100e26106ef565b60408051918252519081900360200190f35b34156101ea57fe5b6100be600160a060020a03600435166024356106f5565b604080519115158252519081900360200190f35b341561021d57fe5b6100e2600160a060020a03600435811690602435166107a3565b60408051918252519081900360200190f35b34600080805b60008411801561026157508460025411155b1561038757600354600254620f424091025b0492508284116102835783610285565b825b9150600254620f4240830281151561029957fe5b33600160a060020a03166000818152600160208181526040808420805497909604968701865560028054855295830190915280832080548701905584548352808320909101805463ffffffff191662093a80420163ffffffff161790558154850182559254925193945084937f689dcb02b6a65e0e2f1d23ef47c1ec86604ffbed0bcb65f20150cfc7d5e5a9489190a4600380548290039081905593829003931515610382576002805466038d7ea4c6800001908190556305f5e1006003556040517f23c3dae768238f239632b5c4acb89485b440e0fa72481c4aad9f9b4f9b5a0a5f90600090a25b61024f565b5b505050505050565b600082600160a060020a031633600160a060020a03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a350600160a060020a0333811660009081526001602081815260408084209487168452600290940190529190208054830190555b92915050565b60005481565b600160a060020a038316600090815260016020526040812054849083908190101561044657610521565b600160a060020a0380871660009081526001602090815260408083203394851684526002019091529020548791908690819010156104835761051c565b87600160a060020a031689600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef896040518082815260200191505060405180910390a3600160a060020a03808a166000908152600160208181526040808420338616855260028101835281852080548e900390559183905281548c9003909155928b16825291902080548901905595505b5b5050505b50509392505050565b6105348282610249565b5b5050565b60035481565b600160a060020a0333166000908152600160208181526040808420868552909201905281205483908390819010806105a35750600160a060020a03331660009081526001602081815260408084208685528301909152909120015463ffffffff1642105b156105ad576106c8565b33600160a060020a0381166000908152600160205260409020548590819010156105d6576106c4565b60405186908890600160a060020a033316907f73f04af9dcc582a923ec15d3eea990fe34adabfff2879e28d44572e01a54abb690600090a433600160a060020a0316600090815260016020818152604080842080548b9003815584548b0185558b855290920190529020805487900390819055151561068457600160a060020a03331660009081526001602081815260408084208b85528301909152822091825501805463ffffffff191690555b600160a060020a0333166108fc620f4240888a025b604051919004801590920291906000818181858888f1935050505015156106bf57610000565b600194505b5b50505b505092915050565b600160a060020a0381166000908152600160205260409020545b919050565b60025481565b33600160a060020a038116600090815260016020526040812054909190839081901015610721576106c8565b84600160a060020a031633600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a3600160a060020a03338116600090815260016020526040808220805488900390559187168152208054850190555b5b505092915050565b600160a060020a03808316600090815260016020908152604080832093851683526002909301905220545b929150505600a165627a7a72305820ca533a37c92e41888bda66ae0e66415d21a61c60027b269bca633d85b727875c0029"
|
||||
}
|
5
js/src/dapps/chaindeploy/contracts/code/githubhint.json
Normal file
5
js/src/dapps/chaindeploy/contracts/code/githubhint.json
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"compiler": "v0.4.9+commit.364da425",
|
||||
"source": "https://github.com/ethcore/contracts/blob/58842b92c00e3c45a84b6d0ac9b842f016dde50a/GithubHint.sol",
|
||||
"output": "0x6060604052341561000c57fe5b5b6105868061001c6000396000f300606060405263ffffffff60e060020a60003504166302f2008d81146100425780632196ae0d1461009b578063267b6922146101055780637c8c6643146101c9575bfe5b341561004a57fe5b60408051602060046024803582810135601f810185900485028601850190965285855261009995833595939460449493929092019181908401838280828437509496506101de95505050505050565b005b34156100a357fe5b60408051602060046024803582810135601f81018590048502860185019096528585526100999583359593946044949392909201918190840183828082843750949650505092356bffffffffffffffffffffffff191692506102be915050565b005b341561010d57fe5b6101186004356103b1565b604080516bffffffffffffffffffffffff1984166020820152600160a060020a03831691810191909152606080825284546002600019610100600184161502019091160490820181905281906080820190869080156101b85780601f1061018d576101008083540402835291602001916101b8565b820191906000526020600020905b81548152906001019060200180831161019b57829003601f168201915b505094505050505060405180910390f35b34156101d157fe5b6100996004356103de565b005b6000828152602081905260409020600201548290600160a060020a031615801590610227575060008181526020819052604090206002015433600160a060020a03908116911614155b15610231576102b8565b6040805160608101825283815260006020808301829052600160a060020a0333168385015286825281815292902081518051929391926102749284920190610472565b506020820151600182018054606060020a909204600160a060020a031992831617905560409092015160029091018054600160a060020a0392909216919092161790555b5b505050565b6000838152602081905260409020600201548390600160a060020a031615801590610307575060008181526020819052604090206002015433600160a060020a03908116911614155b15610311576103aa565b604080516060810182528481526bffffffffffffffffffffffff198416602080830191909152600160a060020a0333168284015260008781528082529290922081518051929391926103669284920190610472565b506020820151600182018054606060020a909204600160a060020a031992831617905560409092015160029091018054600160a060020a0392909216919092161790555b5b50505050565b600060208190529081526040902060018101546002820154606060020a90910290600160a060020a031683565b6000818152602081905260409020600201548190600160a060020a031615801590610427575060008181526020819052604090206002015433600160a060020a03908116911614155b156104315761046d565b60008281526020819052604081209061044a82826104f1565b50600181018054600160a060020a03199081169091556002909101805490911690555b5b5050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106104b357805160ff19168380011785556104e0565b828001600101855582156104e0579182015b828111156104e05782518255916020019190600101906104c5565b5b506104ed929150610539565b5090565b50805460018160011615610100020316600290046000825580601f106105175750610535565b601f0160209004906000526020600020908101906105359190610539565b5b50565b61055791905b808211156104ed576000815560010161053f565b5090565b905600a165627a7a72305820a83571409e7b0cc4fe48edd09087f315930ab4e017c62b6d100462285a8f4ae70029"
|
||||
}
|
5
js/src/dapps/chaindeploy/contracts/code/jg-voting.json
Normal file
5
js/src/dapps/chaindeploy/contracts/code/jg-voting.json
Normal file
File diff suppressed because one or more lines are too long
5
js/src/dapps/chaindeploy/contracts/code/registry.json
Normal file
5
js/src/dapps/chaindeploy/contracts/code/registry.json
Normal file
File diff suppressed because one or more lines are too long
@ -0,0 +1,5 @@
|
||||
{
|
||||
"compiler": "v0.4.9+commit.364da425",
|
||||
"source": "https://github.com/ethcore/contracts/blob/58842b92c00e3c45a84b6d0ac9b842f016dde50a/SignatureReg.sol",
|
||||
"output": "0x606060405260008054600160a060020a03191633600160a060020a0316178155600255341561002a57fe5b5b60408051808201909152601081527f726567697374657228737472696e67290000000000000000000000000000000060208201526100759064010000000061036661007c82021704565b505b61031c565b60006100f7826040518082805190602001908083835b602083106100b15780518252601f199092019160209182019101610092565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020836100ff640100000000026103d6176401000000009004565b90505b919050565b7fffffffff000000000000000000000000000000000000000000000000000000008216600090815260016020819052604082205484916002908216156101000260001901909116041561015157610274565b7fffffffff000000000000000000000000000000000000000000000000000000008416600090815260016020908152604090912084516101939286019061027c565b5060028054600101905560408051602080825285518183015285517fffffffff00000000000000000000000000000000000000000000000000000000881693600160a060020a033316937f50e01e16719d6c699e516c57f4c514e77f6bc21a978d33f23980acdddbcbd0b293899391928392908301918501908083838215610236575b80518252602083111561023657601f199092019160209182019101610216565b505050905090810190601f1680156102625780820380516001836020036101000a031916815260200191505b509250505060405180910390a3600191505b5b5092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106102bd57805160ff19168380011785556102ea565b828001600101855582156102ea579182015b828111156102ea5782518255916020019190600101906102cf565b5b506102f79291506102fb565b5090565b61031991905b808211156102f75760008155600101610301565b5090565b90565b6105d78061032b6000396000f3006060604052361561005c5763ffffffff60e060020a60003504166313af4035811461005e5780633015a5211461007c5780638da5cb5b1461009e5780639890220b146100ca578063b46bcdaa146100dc578063f2c298be14610179575bfe5b341561006657fe5b61007a600160a060020a03600435166101e3565b005b341561008457fe5b61008c610264565b60408051918252519081900360200190f35b34156100a657fe5b6100ae61026a565b60408051600160a060020a039092168252519081900360200190f35b34156100d257fe5b61007a610279565b005b34156100e457fe5b6100f9600160e060020a0319600435166102cc565b60408051602080825283518183015283519192839290830191850190808383821561013f575b80518252602083111561013f57601f19909201916020918201910161011f565b505050905090810190601f16801561016b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561018157fe5b6101cf600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284375094965061036695505050505050565b604080519115158252519081900360200190f35b60005433600160a060020a039081169116146101fe57610260565b60008054604051600160a060020a03808516939216917f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b236491a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b50565b60025481565b600054600160a060020a031681565b60005433600160a060020a03908116911614610294576102c8565b604051600160a060020a0333811691309091163180156108fc02916000818181858888f1935050505015156102c857610000565b5b5b565b60016020818152600092835260409283902080548451600294821615610100026000190190911693909304601f810183900483028401830190945283835291929083018282801561035e5780601f106103335761010080835404028352916020019161035e565b820191906000526020600020905b81548152906001019060200180831161034157829003601f168201915b505050505081565b60006103ce826040518082805190602001908083835b6020831061039b5780518252601f19909201916020918201910161037c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020836103d6565b90505b919050565b600160e060020a03198216600090815260016020819052604082205484916002908216156101000260001901909116041561041057610503565b600160e060020a031984166000908152600160209081526040909120845161043a9286019061050b565b506002805460010190556040805160208082528551818301528551600160e060020a0319881693600160a060020a033316937f50e01e16719d6c699e516c57f4c514e77f6bc21a978d33f23980acdddbcbd0b2938993919283929083019185019080838382156104c5575b8051825260208311156104c557601f1990920191602091820191016104a5565b505050905090810190601f1680156104f15780820380516001836020036101000a031916815260200191505b509250505060405180910390a3600191505b5b5092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061054c57805160ff1916838001178555610579565b82800160010185558215610579579182015b8281111561057957825182559160200191906001019061055e565b5b5061058692915061058a565b5090565b6105a891905b808211156105865760008155600101610590565b5090565b905600a165627a7a723058206830357dde798fafa19dd78a4460c047f76cc132713db13442c5da7485fc0ff40029"
|
||||
}
|
5
js/src/dapps/chaindeploy/contracts/code/tokendeploy.json
Normal file
5
js/src/dapps/chaindeploy/contracts/code/tokendeploy.json
Normal file
File diff suppressed because one or more lines are too long
5
js/src/dapps/chaindeploy/contracts/code/tokenreg.json
Normal file
5
js/src/dapps/chaindeploy/contracts/code/tokenreg.json
Normal file
File diff suppressed because one or more lines are too long
5
js/src/dapps/chaindeploy/contracts/code/verifyEmail.json
Normal file
5
js/src/dapps/chaindeploy/contracts/code/verifyEmail.json
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"compiler": "v0.4.9+commit.364da425",
|
||||
"source": "https://github.com/ethcore/contracts/blob/e5afdacc716ca743ceddf80978d4e6b2b465dbe9/ProofOfEmail.sol",
|
||||
"output": "0x606060405260008054600160a060020a03191633600160a060020a0316178155600355341561002a57fe5b5b6108a48061003a6000396000f300606060405236156100ca5763ffffffff60e060020a60003504166306b2ff4781146100cc57806313af4035146100fc5780632650b9881461011a5780634b59e8801461018c57806359c87d70146101b05780636795dbcd146101bd57806369fe0e2d1461023057806370c4d5f214610245578063797af627146103255780638da5cb5b1461034c5780639890220b14610378578063ac72c1201461038a578063cc1d4c02146103b1578063ddca3f43146103e1578063df57b74214610403578063e30bd74014610432575bfe5b34156100d457fe5b6100e8600160a060020a03600435166104ce565b604080519115158252519081900360200190f35b341561010457fe5b610118600160a060020a03600435166104d6565b005b341561012257fe5b60408051602060046024803582810135601f810185900485028601850190965285855261017a958335600160a060020a0316959394604494939290920191819084018382808284375094965061055795505050505050565b60408051918252519081900360200190f35b341561019457fe5b610118600160a060020a0360043516602435604435610577565b005b6101186004356105eb565b005b34156101c557fe5b60408051602060046024803582810135601f8101859004850286018501909652858552610214958335959394604494939290920191819084018382808284375094965061063595505050505050565b60408051600160a060020a039092168252519081900360200190f35b341561023857fe5b610118600435610654565b005b341561024d57fe5b60408051602060046024803582810135601f81018590048502860185019096528585526102a5958335600160a060020a0316959394604494939290920191819084018382808284375094965061067995505050505050565b6040805160208082528351818301528351919283929083019185019080838382156102eb575b8051825260208311156102eb57601f1990920191602091820191016102cb565b505050905090810190601f1680156103175780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561032d57fe5b6100e8600435610688565b604080519115158252519081900360200190f35b341561035457fe5b610214610791565b60408051600160a060020a039092168252519081900360200190f35b341561038057fe5b6101186107a0565b005b341561039257fe5b6100e86004356107f3565b604080519115158252519081900360200190f35b34156103b957fe5b6100e8600160a060020a0360043516610813565b604080519115158252519081900360200190f35b34156103e957fe5b61017a610834565b60408051918252519081900360200190f35b341561040b57fe5b61021460043561083a565b60408051600160a060020a039092168252519081900360200190f35b341561043a57fe5b6102a5600160a060020a0360043516610858565b6040805160208082528351818301528351919283929083019185019080838382156102eb575b8051825260208311156102eb57601f1990920191602091820191016102cb565b505050905090810190601f1680156103175780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60005b919050565b60005433600160a060020a039081169116146104f157610553565b60008054604051600160a060020a03808516939216917f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b236491a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b50565b600160a060020a0382166000908152600260205260409020545b92915050565b60005433600160a060020a03908116911614610592576105e5565b600082815260046020908152604091829020839055815184815291518392600160a060020a038716927f76babef7e9f1065118be3f9d7094016a1cc06dd12811501c7712deb22144f37b92918290030190a35b5b505050565b6003543410156105fa57610553565b6040518190600160a060020a033316907f070669e6be82aa9b077a096b0f9617893a4dc5cb05897e27fd7a6112c8e6629e90600090a35b5b50565b600082815260016020526040902054600160a060020a03165b92915050565b60005433600160a060020a0390811691161461066f57610553565b60038190555b5b50565b610571610866565b5b92915050565b6040805182815281516020918190038201902060009081526004909152908120548015156106b55761078b565b6040805184815281516020918190038201902060009081526004825282812081905583815260019091522054600160a060020a031615158061070e5750600160a060020a03331660009081526002602052604090205415155b156107185761078b565b6000818152600160209081526040808320805473ffffffffffffffffffffffffffffffffffffffff191633600160a060020a031690811790915580845260029092528083208490555190917fd415b905d4dd806bfba99a7a0e6351bd0c9db3a9912add21c0e6bef4479f673f91a2600191505b50919050565b600054600160a060020a031681565b60005433600160a060020a039081169116146107bb576107ef565b604051600160a060020a0333811691309091163180156108fc02916000818181858888f1935050505015156107ef57610000565b5b5b565b600081815260016020526040902054600160a060020a031615155b919050565b600160a060020a03811660009081526002602052604090205415155b919050565b60035481565b600081815260016020526040902054600160a060020a03165b919050565b6104d1610866565b5b919050565b604080516020810190915260008152905600a165627a7a7230582081d03388dd06c78ee4098c4f1e23cd3c25e38d249d5da59962c6b28ec6e20ea70029"
|
||||
}
|
5
js/src/dapps/chaindeploy/contracts/code/verifySms.json
Normal file
5
js/src/dapps/chaindeploy/contracts/code/verifySms.json
Normal file
File diff suppressed because one or more lines are too long
30
js/src/dapps/chaindeploy/contracts/dappreg.js
Normal file
30
js/src/dapps/chaindeploy/contracts/dappreg.js
Normal file
@ -0,0 +1,30 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import abi from '~/contracts/abi/dappreg';
|
||||
import { compiler, source as sourceUrl, output as byteCode } from './code/dappreg';
|
||||
|
||||
const id = 'dappreg'; // 7bbc4f1a27628781b96213e781a1b8eec6982c1db8fac739af6e4c5a55862c03
|
||||
const deployParams = [];
|
||||
|
||||
export {
|
||||
abi,
|
||||
byteCode,
|
||||
compiler,
|
||||
deployParams,
|
||||
id,
|
||||
sourceUrl
|
||||
};
|
32
js/src/dapps/chaindeploy/contracts/gavcoin.js
Normal file
32
js/src/dapps/chaindeploy/contracts/gavcoin.js
Normal file
@ -0,0 +1,32 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import abi from '~/contracts/abi/gavcoin';
|
||||
import { compiler, source as sourceUrl, output as byteCode } from './code/gavcoin';
|
||||
|
||||
const isExternal = true;
|
||||
const id = 'gavcoin';
|
||||
const deployParams = [];
|
||||
|
||||
export {
|
||||
abi,
|
||||
byteCode,
|
||||
compiler,
|
||||
deployParams,
|
||||
id,
|
||||
isExternal,
|
||||
sourceUrl
|
||||
};
|
30
js/src/dapps/chaindeploy/contracts/githubhint.js
Normal file
30
js/src/dapps/chaindeploy/contracts/githubhint.js
Normal file
@ -0,0 +1,30 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import abi from '~/contracts/abi/githubhint';
|
||||
import { compiler, source as sourceUrl, output as byteCode } from './code/githubhint';
|
||||
|
||||
const id = 'githubhint';
|
||||
const deployParams = [];
|
||||
|
||||
export {
|
||||
abi,
|
||||
byteCode,
|
||||
compiler,
|
||||
deployParams,
|
||||
id,
|
||||
sourceUrl
|
||||
};
|
52
js/src/dapps/chaindeploy/contracts/index.js
Normal file
52
js/src/dapps/chaindeploy/contracts/index.js
Normal file
@ -0,0 +1,52 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import * as badgereg from './badgereg';
|
||||
import * as dappreg from './dappreg';
|
||||
import * as gavcoin from './gavcoin';
|
||||
import * as githubhint from './githubhint';
|
||||
import * as jgvoting from './jg-voting';
|
||||
import * as registry from './registry';
|
||||
import * as signaturereg from './signaturereg';
|
||||
import * as tokendeployMgr from './tokendeployMgr';
|
||||
import * as tokendeployReg from './tokendeployReg';
|
||||
import * as tokenreg from './tokenreg';
|
||||
import * as verifyEmail from './verifyEmail';
|
||||
import * as verifySms from './verifySms';
|
||||
import * as wallet from './wallet';
|
||||
|
||||
const contracts = [
|
||||
// builtin
|
||||
githubhint,
|
||||
badgereg,
|
||||
dappreg,
|
||||
signaturereg,
|
||||
tokenreg,
|
||||
tokendeployReg,
|
||||
tokendeployMgr,
|
||||
verifyEmail,
|
||||
verifySms,
|
||||
wallet,
|
||||
|
||||
// external
|
||||
gavcoin,
|
||||
jgvoting
|
||||
];
|
||||
|
||||
export {
|
||||
contracts,
|
||||
registry
|
||||
};
|
32
js/src/dapps/chaindeploy/contracts/jg-voting.js
Normal file
32
js/src/dapps/chaindeploy/contracts/jg-voting.js
Normal file
@ -0,0 +1,32 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import abi from './abi/jg-voting';
|
||||
import { compiler, source as sourceUrl, output as byteCode } from './code/jg-voting';
|
||||
|
||||
const isExternal = true;
|
||||
const id = 'jg-voting';
|
||||
const deployParams = [];
|
||||
|
||||
export {
|
||||
abi,
|
||||
byteCode,
|
||||
compiler,
|
||||
deployParams,
|
||||
id,
|
||||
isExternal,
|
||||
sourceUrl
|
||||
};
|
30
js/src/dapps/chaindeploy/contracts/registry.js
Normal file
30
js/src/dapps/chaindeploy/contracts/registry.js
Normal file
@ -0,0 +1,30 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import abi from '~/contracts/abi/registry2';
|
||||
import { compiler, source as sourceUrl, output as byteCode } from './code/registry';
|
||||
|
||||
const id = 'registry';
|
||||
const deployParams = [];
|
||||
|
||||
export {
|
||||
abi,
|
||||
byteCode,
|
||||
compiler,
|
||||
deployParams,
|
||||
id,
|
||||
sourceUrl
|
||||
};
|
30
js/src/dapps/chaindeploy/contracts/signaturereg.js
Normal file
30
js/src/dapps/chaindeploy/contracts/signaturereg.js
Normal file
@ -0,0 +1,30 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import abi from '~/contracts/abi/signaturereg';
|
||||
import { compiler, source as sourceUrl, output as byteCode } from './code/signaturereg';
|
||||
|
||||
const id = 'signaturereg';
|
||||
const deployParams = [];
|
||||
|
||||
export {
|
||||
abi,
|
||||
byteCode,
|
||||
compiler,
|
||||
deployParams,
|
||||
id,
|
||||
sourceUrl
|
||||
};
|
30
js/src/dapps/chaindeploy/contracts/tokendeployMgr.js
Normal file
30
js/src/dapps/chaindeploy/contracts/tokendeployMgr.js
Normal file
@ -0,0 +1,30 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import abi from '~/contracts/abi/basiccoinmanager';
|
||||
import { compiler, source as sourceUrl, output as byteCode } from './code/tokendeploy';
|
||||
|
||||
const id = 'basiccoinmgr';
|
||||
const deployParams = [];
|
||||
|
||||
export {
|
||||
abi,
|
||||
byteCode,
|
||||
compiler,
|
||||
deployParams,
|
||||
id,
|
||||
sourceUrl
|
||||
};
|
28
js/src/dapps/chaindeploy/contracts/tokendeployReg.js
Normal file
28
js/src/dapps/chaindeploy/contracts/tokendeployReg.js
Normal file
@ -0,0 +1,28 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import { abi, sourceUrl, deployParams, compiler, byteCode } from './tokenreg';
|
||||
|
||||
const id = 'basiccoinreg';
|
||||
|
||||
export {
|
||||
abi,
|
||||
byteCode,
|
||||
compiler,
|
||||
deployParams,
|
||||
id,
|
||||
sourceUrl
|
||||
};
|
30
js/src/dapps/chaindeploy/contracts/tokenreg.js
Normal file
30
js/src/dapps/chaindeploy/contracts/tokenreg.js
Normal file
@ -0,0 +1,30 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import abi from '~/contracts/abi/tokenreg';
|
||||
import { compiler, source as sourceUrl, output as byteCode } from './code/tokenreg';
|
||||
|
||||
const id = 'tokenreg';
|
||||
const deployParams = [];
|
||||
|
||||
export {
|
||||
abi,
|
||||
byteCode,
|
||||
compiler,
|
||||
deployParams,
|
||||
id,
|
||||
sourceUrl
|
||||
};
|
37
js/src/dapps/chaindeploy/contracts/verifyEmail.js
Normal file
37
js/src/dapps/chaindeploy/contracts/verifyEmail.js
Normal file
@ -0,0 +1,37 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import abi from '~/contracts/abi/email-verification';
|
||||
import { compiler, source as sourceUrl, output as byteCode } from './code/verifyEmail';
|
||||
|
||||
const isBadge = true;
|
||||
const id = 'emailverification';
|
||||
const deployParams = [];
|
||||
const badgeSource = {
|
||||
imageUrl: 'https://raw.githubusercontent.com/ethcore/dapp-assets/c4721a87cb95375da91f8699438d8d7907b3f5e9/certifications/email-verification.svg',
|
||||
imageHash: '0x5617a14da2a0c210939da6eafb734e60906f64a504c3e107812668860a752dc6'
|
||||
};
|
||||
|
||||
export {
|
||||
abi,
|
||||
badgeSource,
|
||||
byteCode,
|
||||
compiler,
|
||||
deployParams,
|
||||
id,
|
||||
isBadge,
|
||||
sourceUrl
|
||||
};
|
37
js/src/dapps/chaindeploy/contracts/verifySms.js
Normal file
37
js/src/dapps/chaindeploy/contracts/verifySms.js
Normal file
@ -0,0 +1,37 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import abi from '~/contracts/abi/sms-verification';
|
||||
import { compiler, source as sourceUrl, output as byteCode } from './code/verifySms';
|
||||
|
||||
const isBadge = true;
|
||||
const id = 'smsverification';
|
||||
const deployParams = [];
|
||||
const badgeSource = {
|
||||
imageUrl: 'https://raw.githubusercontent.com/ethcore/dapp-assets/1b1beb57ab1f4d3a93a12711b233b5cded791a2f/certifications/sms-verification.svg',
|
||||
imageHash: '0x49fa653c35c0a9ce128579883babd673ad4cfc94bf9f1cfe96a2bbc30a7552c6'
|
||||
};
|
||||
|
||||
export {
|
||||
abi,
|
||||
badgeSource,
|
||||
byteCode,
|
||||
compiler,
|
||||
deployParams,
|
||||
id,
|
||||
isBadge,
|
||||
sourceUrl
|
||||
};
|
29
js/src/dapps/chaindeploy/contracts/wallet.js
Normal file
29
js/src/dapps/chaindeploy/contracts/wallet.js
Normal file
@ -0,0 +1,29 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import { walletCompiler as compiler, walletLibrary as byteCode, walletLibraryABI as abiJson, walletLibraryRegKey as id, walletSource as sourceUrl } from '~/contracts/code/wallet';
|
||||
|
||||
const abi = JSON.parse(abiJson);
|
||||
const deployParams = [];
|
||||
|
||||
export {
|
||||
abi,
|
||||
byteCode,
|
||||
compiler,
|
||||
deployParams,
|
||||
id,
|
||||
sourceUrl
|
||||
};
|
33
js/src/dapps/chaindeploy/dapps/console.js
Normal file
33
js/src/dapps/chaindeploy/dapps/console.js
Normal file
@ -0,0 +1,33 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import builtins from '~/views/Dapps/builtin.json';
|
||||
|
||||
const id = 'console';
|
||||
const app = builtins.find((app) => app.url === id);
|
||||
const hashId = app.id;
|
||||
const source = {
|
||||
imageUrl: 'https://raw.githubusercontent.com/ethcore/console/3ea0dbfefded359ccdbea37bc4cf350c0aa16948/console.jpeg',
|
||||
imageHash: '0xc3962e2eab7afaeb9cd11522381723afbafdc41dc7ba31bee472e187c4459e81'
|
||||
};
|
||||
const name = app.name;
|
||||
|
||||
export {
|
||||
hashId,
|
||||
id,
|
||||
name,
|
||||
source
|
||||
};
|
33
js/src/dapps/chaindeploy/dapps/dappreg.js
Normal file
33
js/src/dapps/chaindeploy/dapps/dappreg.js
Normal file
@ -0,0 +1,33 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import builtins from '~/views/Dapps/builtin.json';
|
||||
|
||||
const id = 'dappreg';
|
||||
const app = builtins.find((app) => app.url === id);
|
||||
const hashId = app.id;
|
||||
const source = {
|
||||
imageUrl: 'https://raw.githubusercontent.com/ethcore/dapp-assets/cdd6ac4f1e2f11619bed72a53ae71217dffe19ad/dapps/legos-64x64.png',
|
||||
imageHash: '0xa8feea35c761cc6c2fe862fe336419f11ca5421f578757720a899b89fc1df154'
|
||||
};
|
||||
const name = app.name;
|
||||
|
||||
export {
|
||||
hashId,
|
||||
id,
|
||||
name,
|
||||
source
|
||||
};
|
41
js/src/dapps/chaindeploy/dapps/gavcoin.js
Normal file
41
js/src/dapps/chaindeploy/dapps/gavcoin.js
Normal file
@ -0,0 +1,41 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import { api } from '../parity';
|
||||
|
||||
const isExternal = true;
|
||||
const id = 'gavcoin';
|
||||
const hashId = api.util.sha3(id);
|
||||
const source = {
|
||||
imageUrl: 'https://raw.githubusercontent.com/ethcore/dapp-assets/9e135f76fe9ba61e2d8ccbd72ed144c26c450780/tokens/gavcoin-64x64.png',
|
||||
imageHash: '0xd40679a3a234d8421c678d64f4df3308859e8ad07ac95ce4a228aceb96955287',
|
||||
manifestUrl: 'https://raw.githubusercontent.com/gavofyork/gavcoin/eb2f8dc4d3ad4dd5f4562690525b7cfedc9681ba/manifest.json',
|
||||
manifestHash: '0xd582c572fbef8015837f2c1a8798f2c3149a1d9d655b4020edb1bbece725371d',
|
||||
contentUrl: {
|
||||
repo: 'gavofyork/gavcoin',
|
||||
commit: '0xeb2f8dc4d3ad4dd5f4562690525b7cfedc9681ba'
|
||||
},
|
||||
contentHash: '0x0b6c7b3fc8dad3edb39fd1465904ce9a11938ef18f08f8115f275047ba249530'
|
||||
};
|
||||
const name = 'GavCoin';
|
||||
|
||||
export {
|
||||
hashId,
|
||||
id,
|
||||
isExternal,
|
||||
name,
|
||||
source
|
||||
};
|
33
js/src/dapps/chaindeploy/dapps/githubhint.js
Normal file
33
js/src/dapps/chaindeploy/dapps/githubhint.js
Normal file
@ -0,0 +1,33 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import builtins from '~/views/Dapps/builtin.json';
|
||||
|
||||
const id = 'githubhint';
|
||||
const app = builtins.find((app) => app.url === id);
|
||||
const hashId = app.id;
|
||||
const source = {
|
||||
imageUrl: 'https://raw.githubusercontent.com/ethcore/dapp-assets/b88e983abaa1a6a6345b8d9448c15b117ddb540e/dapps/link-64x64.jpg',
|
||||
imageHash: '0x6568901e711886e2c61eef1bbc7e2d8d37a27b9eb3e9e270eda8548f2ec796e8'
|
||||
};
|
||||
const name = app.name;
|
||||
|
||||
export {
|
||||
hashId,
|
||||
id,
|
||||
name,
|
||||
source
|
||||
};
|
50
js/src/dapps/chaindeploy/dapps/index.js
Normal file
50
js/src/dapps/chaindeploy/dapps/index.js
Normal file
@ -0,0 +1,50 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import * as consolejs from './console';
|
||||
import * as dappreg from './dappreg';
|
||||
import * as gavcoin from './gavcoin';
|
||||
import * as githubhint from './githubhint';
|
||||
import * as jgvoting from './jg-voting';
|
||||
import * as jgwhenblock from './jg-whenblock';
|
||||
import * as localtx from './localtx';
|
||||
import * as registry from './registry';
|
||||
import * as signaturereg from './signaturereg';
|
||||
import * as tokendeploy from './tokendeploy';
|
||||
import * as tokenreg from './tokenreg';
|
||||
import * as web from './web';
|
||||
|
||||
const apps = [
|
||||
// builtin
|
||||
consolejs,
|
||||
dappreg,
|
||||
githubhint,
|
||||
localtx,
|
||||
registry,
|
||||
signaturereg,
|
||||
tokendeploy,
|
||||
tokenreg,
|
||||
web,
|
||||
|
||||
// external
|
||||
gavcoin,
|
||||
jgvoting,
|
||||
jgwhenblock
|
||||
];
|
||||
|
||||
export {
|
||||
apps
|
||||
};
|
41
js/src/dapps/chaindeploy/dapps/jg-voting.js
Normal file
41
js/src/dapps/chaindeploy/dapps/jg-voting.js
Normal file
@ -0,0 +1,41 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import { api } from '../parity';
|
||||
|
||||
const isExternal = true;
|
||||
const id = 'jg-voting';
|
||||
const hashId = api.util.sha3(id);
|
||||
const source = {
|
||||
imageUrl: 'https://raw.githubusercontent.com/jacogr/dapp-voting/038ff4074544f2babc7aed9c4ac3dc070b85b804/assets/images/vote.jpg',
|
||||
imageHash: '0x3620828e1a745d2714e9f37dc2d47cdab5ef9982190a845b5e7665b7a7767661',
|
||||
manifestUrl: 'https://raw.githubusercontent.com/jacogr/dapp-voting/682f0fe4b86508a1a2487de6c7c61f7b100ba5b2/manifest.json',
|
||||
manifestHash: '0x9b83e01f87d225e7bfdd305c51319504ff9b4cf8d517ca4b64f606762e72f59e',
|
||||
contentUrl: {
|
||||
repo: 'jacogr/dapp-voting',
|
||||
commit: '0x7d941597e862a600a60b9d6ecd3a6f606d96cd7b'
|
||||
},
|
||||
contentHash: '0x9fcc0910f6a8c4e45715d41aea2d287da31bf1d7321003fc66df6a012ce2d753'
|
||||
};
|
||||
const name = 'Yes, No, Maybe';
|
||||
|
||||
export {
|
||||
hashId,
|
||||
id,
|
||||
isExternal,
|
||||
name,
|
||||
source
|
||||
};
|
39
js/src/dapps/chaindeploy/dapps/jg-whenblock.js
Normal file
39
js/src/dapps/chaindeploy/dapps/jg-whenblock.js
Normal file
@ -0,0 +1,39 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
const isExternal = true;
|
||||
const id = 'whenarewethere';
|
||||
const hashId = '0xfef3bfded03695e38a9ff476a0999e1fa421e72d1fb3b55a87d6c2bdb6fc18ef';
|
||||
const source = {
|
||||
imageUrl: 'https://raw.githubusercontent.com/jacogr/dapp-when-are-we-there/167aa4d904c5aa6246d0d6d6f41c4ed8a56889cd/assets/images/clock.jpg',
|
||||
imageHash: '0x2534b44f685b6399bf63f86679128216c43e9a58be1dfb58533923f0bcffeba7',
|
||||
manifestUrl: 'https://raw.githubusercontent.com/jacogr/dapp-when-are-we-there/bf72dc3033711a3ab41bec3c1249638f70bae768/manifest.json',
|
||||
manifestHash: '0xfe26f6a19ea9393d69bc5d8c73c5072ccf126f51c10c135b42d6bf162d774fd9',
|
||||
contentUrl: {
|
||||
repo: 'jacogr/dapp-when-are-we-there',
|
||||
commit: '0xbf72dc3033711a3ab41bec3c1249638f70bae768'
|
||||
},
|
||||
contentHash: '0x3505cbbef5c2243eedba07d340d4abccfaa3cfb799f51827e33c9721a5254d13'
|
||||
};
|
||||
const name = 'When are we there';
|
||||
|
||||
export {
|
||||
hashId,
|
||||
id,
|
||||
isExternal,
|
||||
name,
|
||||
source
|
||||
};
|
33
js/src/dapps/chaindeploy/dapps/localtx.js
Normal file
33
js/src/dapps/chaindeploy/dapps/localtx.js
Normal file
@ -0,0 +1,33 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import builtins from '~/views/Dapps/builtin.json';
|
||||
|
||||
const id = 'localtx';
|
||||
const app = builtins.find((app) => app.url === id);
|
||||
const hashId = app.id;
|
||||
const source = {
|
||||
imageUrl: 'https://raw.githubusercontent.com/ethcore/dapp-assets/cdd6ac4f1e2f11619bed72a53ae71217dffe19ad/dapps/stack-64x64.png',
|
||||
imageHash: '0x22b924801e1971659a51956dcdfc5a2d592d8bdd03780dd72d5bc4c84b595b4c'
|
||||
};
|
||||
const name = app.name;
|
||||
|
||||
export {
|
||||
hashId,
|
||||
id,
|
||||
name,
|
||||
source
|
||||
};
|
33
js/src/dapps/chaindeploy/dapps/registry.js
Normal file
33
js/src/dapps/chaindeploy/dapps/registry.js
Normal file
@ -0,0 +1,33 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import builtins from '~/views/Dapps/builtin.json';
|
||||
|
||||
const id = 'registry';
|
||||
const app = builtins.find((app) => app.url === id);
|
||||
const hashId = app.id;
|
||||
const source = {
|
||||
imageUrl: 'https://raw.githubusercontent.com/ethcore/dapp-assets/b88e983abaa1a6a6345b8d9448c15b117ddb540e/dapps/register-64x64.jpg',
|
||||
imageHash: '0xf7100024052cd78b5e043287c05392b5db0bfce5caedd6d39555d40283ef0a1c'
|
||||
};
|
||||
const name = app.name;
|
||||
|
||||
export {
|
||||
hashId,
|
||||
id,
|
||||
name,
|
||||
source
|
||||
};
|
33
js/src/dapps/chaindeploy/dapps/signaturereg.js
Normal file
33
js/src/dapps/chaindeploy/dapps/signaturereg.js
Normal file
@ -0,0 +1,33 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import builtins from '~/views/Dapps/builtin.json';
|
||||
|
||||
const id = 'signaturereg';
|
||||
const app = builtins.find((app) => app.url === id);
|
||||
const hashId = app.id;
|
||||
const source = {
|
||||
imageUrl: 'https://raw.githubusercontent.com/ethcore/dapp-assets/b88e983abaa1a6a6345b8d9448c15b117ddb540e/dapps/hex-64x64.jpg',
|
||||
imageHash: '0x26f7f2415cd5cbbffa58e8119fdbdd7181cac79119dd7f6ba6ee99d7f4445640'
|
||||
};
|
||||
const name = app.name;
|
||||
|
||||
export {
|
||||
hashId,
|
||||
id,
|
||||
name,
|
||||
source
|
||||
};
|
33
js/src/dapps/chaindeploy/dapps/tokendeploy.js
Normal file
33
js/src/dapps/chaindeploy/dapps/tokendeploy.js
Normal file
@ -0,0 +1,33 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import builtins from '~/views/Dapps/builtin.json';
|
||||
|
||||
const id = 'tokendeploy';
|
||||
const app = builtins.find((app) => app.url === id);
|
||||
const hashId = app.id;
|
||||
const source = {
|
||||
imageUrl: 'https://raw.githubusercontent.com/ethcore/dapp-assets/b88e983abaa1a6a6345b8d9448c15b117ddb540e/dapps/interlock-64x64.png',
|
||||
imageHash: '0xde104baf02aec783e0bffc624514ee267dbcb455382375e3ffa715790c1c939f'
|
||||
};
|
||||
const name = app.name;
|
||||
|
||||
export {
|
||||
hashId,
|
||||
id,
|
||||
name,
|
||||
source
|
||||
};
|
33
js/src/dapps/chaindeploy/dapps/tokenreg.js
Normal file
33
js/src/dapps/chaindeploy/dapps/tokenreg.js
Normal file
@ -0,0 +1,33 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import builtins from '~/views/Dapps/builtin.json';
|
||||
|
||||
const id = 'tokenreg';
|
||||
const app = builtins.find((app) => app.url === id);
|
||||
const hashId = app.id;
|
||||
const source = {
|
||||
imageUrl: 'https://raw.githubusercontent.com/ethcore/dapp-assets/b88e983abaa1a6a6345b8d9448c15b117ddb540e/dapps/coins-64x64.jpg',
|
||||
imageHash: '0xe23d429d15de98c7878d92bc90b79c7afabe1b04c2ad5e3e2c89adc8f439edc9'
|
||||
};
|
||||
const name = app.name;
|
||||
|
||||
export {
|
||||
hashId,
|
||||
id,
|
||||
name,
|
||||
source
|
||||
};
|
33
js/src/dapps/chaindeploy/dapps/web.js
Normal file
33
js/src/dapps/chaindeploy/dapps/web.js
Normal file
@ -0,0 +1,33 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import builtins from '~/views/Dapps/builtin.json';
|
||||
|
||||
const id = 'web';
|
||||
const app = builtins.find((app) => app.url === id);
|
||||
const hashId = app.id;
|
||||
const source = {
|
||||
imageUrl: 'https://raw.githubusercontent.com/ethcore/dapp-assets/ec6138115d0e1f45258969cd90b3b274e0ff2258/dapps/earth-64x64.jpg',
|
||||
imageHash: '0x0b9b62a9262f75461191d4e8bf686c56528cbc0fe885c1f5878052ca8b2f65bf'
|
||||
};
|
||||
const name = app.name;
|
||||
|
||||
export {
|
||||
hashId,
|
||||
id,
|
||||
name,
|
||||
source
|
||||
};
|
21
js/src/dapps/chaindeploy/parity.js
Normal file
21
js/src/dapps/chaindeploy/parity.js
Normal file
@ -0,0 +1,21 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
const api = window.parity.api;
|
||||
|
||||
export {
|
||||
api
|
||||
};
|
714
js/src/dapps/chaindeploy/store.js
Normal file
714
js/src/dapps/chaindeploy/store.js
Normal file
@ -0,0 +1,714 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import { action, computed, observable } from 'mobx';
|
||||
|
||||
import { contracts as contractsInfo, registry as registryInfo } from './contracts';
|
||||
import { apps } from './dapps';
|
||||
import { api } from './parity';
|
||||
import { executeContract, isValidNumber, validateCode } from './utils';
|
||||
|
||||
export default class ContractsStore {
|
||||
@observable apps = null;
|
||||
@observable badges = null;
|
||||
@observable contracts = null;
|
||||
@observable error = null;
|
||||
@observable registry = null;
|
||||
|
||||
constructor () {
|
||||
this.apps = apps;
|
||||
this.badges = contractsInfo.filter((contract) => contract.isBadge);
|
||||
this.contracts = contractsInfo.filter((contract) => !contract.isBadge);
|
||||
this.registry = registryInfo;
|
||||
|
||||
api.subscribe('eth_blockNumber', this.onNewBlockNumber);
|
||||
}
|
||||
|
||||
@computed get contractBadgereg () {
|
||||
return this.contracts.find((contract) => contract.id === 'badgereg');
|
||||
}
|
||||
|
||||
@computed get contractDappreg () {
|
||||
return this.contracts.find((contract) => contract.id === 'dappreg');
|
||||
}
|
||||
|
||||
@computed get contractGithubhint () {
|
||||
return this.contracts.find((contract) => contract.id === 'githubhint');
|
||||
}
|
||||
|
||||
@computed get contractTokenreg () {
|
||||
return this.contracts.find((contract) => contract.id === 'tokenreg');
|
||||
}
|
||||
|
||||
@computed get isBadgeDeploying () {
|
||||
return this.badges
|
||||
.filter((contract) => contract.isDeploying)
|
||||
.length !== 0;
|
||||
}
|
||||
|
||||
@computed get isContractDeploying () {
|
||||
return this.contracts
|
||||
.filter((contract) => contract.isDeploying)
|
||||
.length !== 0;
|
||||
}
|
||||
|
||||
@computed get isDappDeploying () {
|
||||
return this.apps
|
||||
.filter((app) => app.isDeploying)
|
||||
.length !== 0;
|
||||
}
|
||||
|
||||
@computed get haveAllBadges () {
|
||||
return this.badges
|
||||
.filter((contract) => !contract.instance || !contract.hasLatestCode || !contract.badgeImageHash || !contract.badgeImageMatch || !contract.isBadgeRegistered)
|
||||
.length === 0;
|
||||
}
|
||||
|
||||
@computed get haveAllContracts () {
|
||||
return this.contracts
|
||||
.filter((contract) => !contract.instance || !contract.hasLatestCode)
|
||||
.length === 0;
|
||||
}
|
||||
|
||||
@computed get haveAllDapps () {
|
||||
return this.apps
|
||||
.filter((app) => {
|
||||
return !app.isOnChain ||
|
||||
!app.imageHash || !app.imageMatch ||
|
||||
(app.source.contentHash && !app.contentMatch) ||
|
||||
(app.source.manifestHash && !app.manifestMatch);
|
||||
})
|
||||
.length === 0;
|
||||
}
|
||||
|
||||
@action refreshApps = () => {
|
||||
this.apps = [].concat(this.apps.peek());
|
||||
}
|
||||
|
||||
@action refreshContracts = () => {
|
||||
this.badges = [].concat(this.badges.peek());
|
||||
this.contracts = [].concat(this.contracts.peek());
|
||||
}
|
||||
|
||||
@action setError = (error) => {
|
||||
console.error(error);
|
||||
|
||||
this.error = error.message
|
||||
? error.message
|
||||
: error;
|
||||
}
|
||||
|
||||
@action setRegistryAddress = (address, isOnChain = false) => {
|
||||
if (this.registry.address !== address || !this.registry.instance) {
|
||||
console.log(`registry found at ${address}`);
|
||||
|
||||
this.registry = Object.assign({}, this.registry, {
|
||||
address,
|
||||
instance: api.newContract(this.registry.abi, address).instance,
|
||||
isOnChain
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@action setRegistryCode (byteCode) {
|
||||
this.registry.hasLatestCode = validateCode(this.registry.byteCode, byteCode);
|
||||
}
|
||||
|
||||
@action setRegistryDeploying = (isDeploying = false) => {
|
||||
this.registry = Object.assign({}, this.registry, {
|
||||
isDeploying,
|
||||
status: isDeploying
|
||||
? 'Deploying contract'
|
||||
: null
|
||||
});
|
||||
}
|
||||
|
||||
@action setBadgeId = (badge, badgeId) => {
|
||||
badge.badgeId = badgeId;
|
||||
badge.isBadgeRegistered = true;
|
||||
|
||||
this.refreshContracts();
|
||||
}
|
||||
|
||||
@action setBadgeImageHash = (badge, imageHash) => {
|
||||
badge.badgeImageHash = imageHash;
|
||||
badge.badgeImageMatch = badge.badgeSource.imageHash === imageHash;
|
||||
|
||||
this.refreshContracts();
|
||||
}
|
||||
|
||||
@action setContractAddress = (contract, address, isOnChain = false) => {
|
||||
if (contract.address !== address || !contract.instance || contract.isOnChain !== isOnChain) {
|
||||
console.log(`${contract.id} found at ${address}`);
|
||||
|
||||
contract.address = address;
|
||||
contract.instance = api.newContract(contract.abi, address).instance;
|
||||
contract.isOnChain = isOnChain;
|
||||
|
||||
this.refreshContracts();
|
||||
}
|
||||
}
|
||||
|
||||
@action setContractCode (contract, byteCode) {
|
||||
contract.hasLatestCode = validateCode(contract.byteCode, byteCode);
|
||||
|
||||
this.refreshContracts();
|
||||
}
|
||||
|
||||
@action setContractDeploying = (contract, isDeploying = false) => {
|
||||
contract.isDeploying = isDeploying;
|
||||
contract.status = isDeploying
|
||||
? 'Deploying contract'
|
||||
: null;
|
||||
|
||||
this.refreshContracts();
|
||||
}
|
||||
|
||||
@action setContractStatus = (contract, status) => {
|
||||
contract.status = status;
|
||||
|
||||
this.refreshContracts();
|
||||
}
|
||||
|
||||
@action setAppDeploying = (app, isDeploying = false) => {
|
||||
app.isDeploying = isDeploying;
|
||||
app.status = isDeploying
|
||||
? 'Registering app'
|
||||
: null;
|
||||
|
||||
this.refreshApps();
|
||||
}
|
||||
|
||||
@action setAppFound = (app, isOnChain = false) => {
|
||||
if (app.isOnChain !== isOnChain) {
|
||||
console.log(`${app.name} found on dappreg`);
|
||||
|
||||
app.isOnChain = isOnChain;
|
||||
|
||||
this.refreshApps();
|
||||
}
|
||||
}
|
||||
|
||||
@action setAppContentHash = (app, contentHash) => {
|
||||
if (app.contentHash !== contentHash) {
|
||||
console.log(`${app.name} has contentHash ${contentHash}`);
|
||||
|
||||
app.contentHash = contentHash;
|
||||
app.contentMatch = contentHash === app.source.contentHash;
|
||||
|
||||
this.refreshApps();
|
||||
}
|
||||
}
|
||||
|
||||
@action setAppImageHash = (app, imageHash) => {
|
||||
if (app.imageHash !== imageHash) {
|
||||
console.log(`${app.name} has imageHash ${imageHash}`);
|
||||
|
||||
app.imageHash = imageHash;
|
||||
app.imageMatch = imageHash === app.source.imageHash;
|
||||
|
||||
this.refreshApps();
|
||||
}
|
||||
}
|
||||
|
||||
@action setAppManifestHash = (app, manifestHash) => {
|
||||
if (app.manifestHash !== manifestHash) {
|
||||
console.log(`${app.name} has manifestHash ${manifestHash}`);
|
||||
|
||||
app.manifestHash = manifestHash;
|
||||
app.manifestMatch = manifestHash === app.source.manifestHash;
|
||||
|
||||
this.refreshApps();
|
||||
}
|
||||
}
|
||||
|
||||
@action setAppStatus = (app, status) => {
|
||||
console.log(app.id, status);
|
||||
|
||||
app.status = status;
|
||||
|
||||
this.refreshApps();
|
||||
}
|
||||
|
||||
deployApp = (app) => {
|
||||
console.log(`Registering application ${app.id}`);
|
||||
|
||||
this.setAppDeploying(app, true);
|
||||
|
||||
const options = {};
|
||||
const values = [app.hashId];
|
||||
|
||||
return api.parity
|
||||
.defaultAccount()
|
||||
.then((defaultAccount) => {
|
||||
options.from = defaultAccount;
|
||||
|
||||
if (app.isOnChain) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return this.contractDappreg.instance
|
||||
.fee.call({}, [])
|
||||
.then((fee) => {
|
||||
options.value = fee;
|
||||
|
||||
return executeContract(app.id, this.contractDappreg, 'register', options, values);
|
||||
});
|
||||
})
|
||||
.then(() => {
|
||||
if (app.imageHash && app.imageMatch) {
|
||||
return true;
|
||||
}
|
||||
|
||||
this.setAppStatus(app, 'Registering image url');
|
||||
|
||||
return this
|
||||
.registerHash(app.source.imageHash, app.source.imageUrl, options.from)
|
||||
.then(() => this.setAppMeta(app, 'IMG', app.source.imageHash, options.from));
|
||||
})
|
||||
.then(() => {
|
||||
if (!app.source.manifestHash || app.manifestMatch) {
|
||||
return true;
|
||||
}
|
||||
|
||||
this.setAppStatus(app, 'Registering manifest url');
|
||||
|
||||
return this
|
||||
.registerHash(app.source.manifestHash, app.source.manifestUrl, options.from)
|
||||
.then(() => this.setAppMeta(app, 'MANIFEST', app.source.manifestHash, options.from));
|
||||
})
|
||||
.then(() => {
|
||||
if (!app.source.contentHash || app.contentMatch) {
|
||||
return true;
|
||||
}
|
||||
|
||||
this.setAppStatus(app, 'Registering content url');
|
||||
|
||||
return this
|
||||
.registerRepo(app.source.contentHash, app.source.contentUrl, options.from)
|
||||
.then(() => this.setAppMeta(app, 'CONTENT', app.source.contentHash, options.from));
|
||||
})
|
||||
.catch(() => {
|
||||
return null;
|
||||
})
|
||||
.then(() => {
|
||||
this.setAppDeploying(app, false);
|
||||
});
|
||||
}
|
||||
|
||||
deployApps = () => {
|
||||
this.apps
|
||||
.filter((app) => {
|
||||
return !app.isDeploying &&
|
||||
(
|
||||
!app.isOnChain ||
|
||||
(!app.imageHash || !app.imageMatch) ||
|
||||
(app.source.contentHash && !app.contentMatch) ||
|
||||
(app.source.manifestHash && !app.manifestMatch)
|
||||
);
|
||||
})
|
||||
.forEach(this.deployApp);
|
||||
}
|
||||
|
||||
_deployContract = (contract) => {
|
||||
console.log(`Deploying contract ${contract.id}`);
|
||||
|
||||
const options = {
|
||||
data: contract.byteCode
|
||||
};
|
||||
|
||||
return api.parity
|
||||
.defaultAccount()
|
||||
.then((defaultAccount) => {
|
||||
options.from = defaultAccount;
|
||||
|
||||
return api
|
||||
.newContract(contract.abi)
|
||||
.deploy(options, contract.deployParams, (error, data) => {
|
||||
if (error) {
|
||||
console.error(contract.id, error);
|
||||
} else {
|
||||
console.log(contract.id, data);
|
||||
}
|
||||
})
|
||||
.then((contractAddress) => {
|
||||
return [contractAddress, defaultAccount];
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
deployContract = (contract) => {
|
||||
if (contract.hasLatestCode) {
|
||||
return Promise.resolve(false);
|
||||
}
|
||||
|
||||
let defaultAccount = '0x0';
|
||||
|
||||
this.setContractDeploying(contract, true);
|
||||
|
||||
return this
|
||||
._deployContract(contract)
|
||||
.then(([address, _defaultAccount]) => {
|
||||
const isOnChain = contract.isOnChain;
|
||||
|
||||
defaultAccount = _defaultAccount;
|
||||
|
||||
this.setContractAddress(contract, address);
|
||||
|
||||
return isOnChain
|
||||
? true
|
||||
: this.reserveAddress(contract, defaultAccount);
|
||||
})
|
||||
.then(() => {
|
||||
return this.registerAddress(contract, defaultAccount);
|
||||
})
|
||||
.catch(() => {
|
||||
return null;
|
||||
})
|
||||
.then(() => {
|
||||
this.setContractDeploying(contract, false);
|
||||
});
|
||||
}
|
||||
|
||||
deployBadge = (badge) => {
|
||||
let defaultAccount;
|
||||
|
||||
return this
|
||||
.deployContract(badge)
|
||||
.then(() => {
|
||||
this.setContractDeploying(badge, true);
|
||||
|
||||
return api.parity.defaultAccount();
|
||||
})
|
||||
.then((_defaultAccount) => {
|
||||
defaultAccount = _defaultAccount;
|
||||
|
||||
if (badge.isBadgeRegistered) {
|
||||
return true;
|
||||
}
|
||||
|
||||
this.setContractStatus(badge, 'Registering with badgereg');
|
||||
|
||||
return this.registerBadge(badge, defaultAccount);
|
||||
})
|
||||
.then(() => {
|
||||
if (badge.badgeImageMatch) {
|
||||
return true;
|
||||
}
|
||||
|
||||
this.setContractStatus(badge, 'Registering image url');
|
||||
|
||||
return this
|
||||
.registerHash(badge.badgeSource.imageHash, badge.badgeSource.imageUrl, defaultAccount)
|
||||
.then(() => this.registerBadgeImage(badge, badge.badgeSource.imageHash, defaultAccount));
|
||||
})
|
||||
.then(() => {
|
||||
this.setContractDeploying(badge, false);
|
||||
});
|
||||
}
|
||||
|
||||
deployContracts = () => {
|
||||
this.contracts
|
||||
.filter((contract) => !contract.isDeploying && (!contract.instance || !contract.hasLatestCode))
|
||||
.forEach(this.deployContract);
|
||||
}
|
||||
|
||||
deployBadges = () => {
|
||||
this.badges
|
||||
.filter((contract) => !contract.isDeploying && (!contract.instance || !contract.hasLatestCode || !contract.badgeImageHash || !contract.badgeImageMatch || !contract.isBadgeRegistered))
|
||||
.forEach(this.deployBadge);
|
||||
}
|
||||
|
||||
deployRegistry = () => {
|
||||
this.setRegistryDeploying(true);
|
||||
|
||||
return this
|
||||
._deployContract(this.registry)
|
||||
.then(([address]) => {
|
||||
this.setRegistryDeploying(false);
|
||||
this.setRegistryAddress(address);
|
||||
});
|
||||
}
|
||||
|
||||
registerBadge = (badge, fromAddress) => {
|
||||
const options = {
|
||||
from: fromAddress
|
||||
};
|
||||
const values = [badge.address, api.util.sha3.text(badge.id.toLowerCase())];
|
||||
|
||||
return this.contractBadgereg.instance
|
||||
.fee.call({}, [])
|
||||
.then((fee) => {
|
||||
options.value = fee;
|
||||
|
||||
return executeContract(badge.id, this.contractBadgereg, 'register', options, values);
|
||||
});
|
||||
}
|
||||
|
||||
registerBadgeImage = (badge, hash, fromAddress) => {
|
||||
const options = {
|
||||
from: fromAddress
|
||||
};
|
||||
const values = [badge.badgeId, 'IMG', hash];
|
||||
|
||||
this.setContractStatus(badge, 'Setting meta IMG');
|
||||
|
||||
return executeContract(badge.id, this.contractBadgereg, 'setMeta', options, values);
|
||||
}
|
||||
|
||||
setAppMeta = (app, key, meta, fromAddress) => {
|
||||
const options = {
|
||||
from: fromAddress
|
||||
};
|
||||
const values = [app.hashId, key, meta];
|
||||
|
||||
this.setAppStatus(app, `Setting meta ${key}`);
|
||||
|
||||
return executeContract(app.id, this.contractDappreg, 'setMeta', options, values);
|
||||
}
|
||||
|
||||
reserveAddress = (contract, fromAddress) => {
|
||||
const options = { from: fromAddress };
|
||||
const values = [api.util.sha3.text(contract.id.toLowerCase())];
|
||||
|
||||
this.setContractStatus(contract, 'Reserving name');
|
||||
|
||||
return this.registry.instance
|
||||
.fee.call({}, [])
|
||||
.then((value) => {
|
||||
options.value = value;
|
||||
|
||||
return executeContract(contract.id, this.registry, 'reserve', options, values);
|
||||
});
|
||||
}
|
||||
|
||||
registerAddress = (contract, fromAddress) => {
|
||||
const options = { from: fromAddress };
|
||||
const values = [api.util.sha3.text(contract.id.toLowerCase()), 'A', contract.address];
|
||||
|
||||
this.setContractStatus(contract, 'Setting lookup address');
|
||||
|
||||
return executeContract(contract.id, this.registry, 'setAddress', options, values);
|
||||
}
|
||||
|
||||
registerRepo = (hash, content, fromAddress) => {
|
||||
const options = {
|
||||
from: fromAddress
|
||||
};
|
||||
const values = [hash, content.repo || content, content.commit || 0];
|
||||
|
||||
return this.contractGithubhint.instance
|
||||
.entries.call({}, [hash])
|
||||
.then(([imageUrl, commit, owner]) => {
|
||||
if (isValidNumber(owner)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return executeContract(hash, this.contractGithubhint, 'hint', options, values);
|
||||
})
|
||||
.catch(() => false);
|
||||
}
|
||||
|
||||
registerHash = (hash, url, fromAddress) => {
|
||||
const options = {
|
||||
from: fromAddress
|
||||
};
|
||||
const values = [hash, url];
|
||||
|
||||
return this.contractGithubhint.instance
|
||||
.entries.call({}, [hash])
|
||||
.then(([imageUrl, commit, owner]) => {
|
||||
if (isValidNumber(owner)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return executeContract(hash, this.contractGithubhint, 'hintURL', options, values);
|
||||
})
|
||||
.catch(() => false);
|
||||
}
|
||||
|
||||
findRegistry = () => {
|
||||
if (this.registry.address && this.registry.hasLatestCode) {
|
||||
return Promise.resolve(this.registry);
|
||||
}
|
||||
|
||||
return api.parity
|
||||
.registryAddress()
|
||||
.then((address) => {
|
||||
if (isValidNumber(address)) {
|
||||
this.setRegistryAddress(address, true);
|
||||
}
|
||||
|
||||
return api.eth.getCode(address);
|
||||
})
|
||||
.then((byteCode) => {
|
||||
this.setRegistryCode(byteCode);
|
||||
});
|
||||
}
|
||||
|
||||
findApps = () => {
|
||||
if (!this.contractDappreg.instance) {
|
||||
return Promise.resolve(false);
|
||||
}
|
||||
|
||||
return Promise
|
||||
.all(
|
||||
this.apps.map((app) => {
|
||||
return app.isOnChain
|
||||
? Promise.resolve([[0]])
|
||||
: this.contractDappreg.instance.get.call({}, [app.hashId]);
|
||||
})
|
||||
)
|
||||
.then((apps) => {
|
||||
apps.forEach(([_id, owner], index) => {
|
||||
const id = api.util.bytesToHex(_id);
|
||||
|
||||
if (isValidNumber(id)) {
|
||||
this.setAppFound(this.apps[index], true);
|
||||
}
|
||||
});
|
||||
|
||||
return Promise.all(
|
||||
this.apps.map((app) => {
|
||||
return !app.isOnChain || (app.imageHash && app.imageMatch)
|
||||
? Promise.resolve([[0], [0], [0]])
|
||||
: Promise.all([
|
||||
this.contractDappreg.instance.meta.call({}, [app.hashId, 'CONTENT']),
|
||||
this.contractDappreg.instance.meta.call({}, [app.hashId, 'IMG']),
|
||||
this.contractDappreg.instance.meta.call({}, [app.hashId, 'MANIFEST'])
|
||||
]);
|
||||
})
|
||||
);
|
||||
})
|
||||
.then((hashes) => {
|
||||
hashes.forEach(([content, image, manifest], index) => {
|
||||
const contentHash = api.util.bytesToHex(content);
|
||||
const imageHash = api.util.bytesToHex(image);
|
||||
const manifestHash = api.util.bytesToHex(manifest);
|
||||
|
||||
if (isValidNumber(contentHash)) {
|
||||
this.setAppContentHash(this.apps[index], contentHash);
|
||||
}
|
||||
|
||||
if (isValidNumber(imageHash)) {
|
||||
this.setAppImageHash(this.apps[index], imageHash);
|
||||
}
|
||||
|
||||
if (isValidNumber(manifestHash)) {
|
||||
this.setAppManifestHash(this.apps[index], manifestHash);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
findBadges = () => {
|
||||
if (!this.contractBadgereg.instance) {
|
||||
return Promise.resolve(false);
|
||||
}
|
||||
|
||||
return this
|
||||
.findContracts(this.badges)
|
||||
.then(() => {
|
||||
return Promise.all(
|
||||
this.badges.map((badge) => {
|
||||
return badge.isBadgeRegistered
|
||||
? Promise.resolve([0, 0, 0])
|
||||
: this.contractBadgereg.instance.fromAddress.call({}, [badge.address]);
|
||||
})
|
||||
);
|
||||
})
|
||||
.then((badgeInfos) => {
|
||||
badgeInfos.forEach(([id, name, owner], index) => {
|
||||
if (isValidNumber(owner)) {
|
||||
this.setBadgeId(this.badges[index], id);
|
||||
}
|
||||
});
|
||||
|
||||
return Promise
|
||||
.all(
|
||||
this.badges.map((badge) => {
|
||||
return !badge.isBadgeRegistered
|
||||
? Promise.resolve([0])
|
||||
: this.contractBadgereg.instance.meta.call({}, [badge.badgeId, 'IMG']);
|
||||
})
|
||||
);
|
||||
})
|
||||
.then((images) => {
|
||||
images.forEach((imageBytes, index) => {
|
||||
const imageHash = api.util.bytesToHex(imageBytes);
|
||||
|
||||
if (isValidNumber(imageHash)) {
|
||||
this.setBadgeImageHash(this.badges[index], imageHash);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
findContracts = (contracts = this.contracts) => {
|
||||
if (!this.registry.instance) {
|
||||
return Promise.resolve(false);
|
||||
}
|
||||
|
||||
return Promise
|
||||
.all(
|
||||
contracts.map((contract) => {
|
||||
const hashId = api.util.sha3.text(contract.id.toLowerCase());
|
||||
|
||||
return contract.isOnChain
|
||||
? Promise.resolve([0, 0])
|
||||
: Promise.all([
|
||||
this.registry.instance.getAddress.call({}, [hashId, 'A']),
|
||||
this.registry.instance.getOwner.call({}, [hashId])
|
||||
]);
|
||||
})
|
||||
)
|
||||
.then((addresses) => {
|
||||
addresses.forEach(([address, owner], index) => {
|
||||
if (isValidNumber(owner) && isValidNumber(address)) {
|
||||
this.setContractAddress(contracts[index], address, true);
|
||||
}
|
||||
});
|
||||
|
||||
return Promise.all(
|
||||
contracts.map((contract) => {
|
||||
return !contract.address || contract.hasLatestCode
|
||||
? Promise.resolve(null)
|
||||
: api.eth.getCode(contract.address);
|
||||
})
|
||||
);
|
||||
})
|
||||
.then((codes) => {
|
||||
codes.forEach((byteCode, index) => {
|
||||
if (byteCode) {
|
||||
this.setContractCode(contracts[index], byteCode);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
onNewBlockNumber = (error, blockNumber) => {
|
||||
if (error) {
|
||||
return;
|
||||
}
|
||||
|
||||
return this
|
||||
.findRegistry()
|
||||
.then(this.findContracts)
|
||||
.then(this.findApps)
|
||||
.then(this.findBadges)
|
||||
.catch(this.setError);
|
||||
}
|
||||
}
|
82
js/src/dapps/chaindeploy/utils.js
Normal file
82
js/src/dapps/chaindeploy/utils.js
Normal file
@ -0,0 +1,82 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import BigNumber from 'bignumber.js';
|
||||
|
||||
import { api } from './parity';
|
||||
|
||||
export function validateCode (source, retrieved) {
|
||||
const original = source.substr(12);
|
||||
const bytecode = retrieved.substr(12);
|
||||
|
||||
const knownHash = api.util.sha3(original.slice(-1 * bytecode.length));
|
||||
const codeHash = api.util.sha3(bytecode);
|
||||
|
||||
return knownHash === codeHash;
|
||||
}
|
||||
|
||||
export function isValidNumber (number) {
|
||||
return number && !(new BigNumber(number)).isZero();
|
||||
}
|
||||
|
||||
export function executeContract (logId, contract, funcName, options, values) {
|
||||
const func = contract.instance[funcName];
|
||||
|
||||
return func
|
||||
.estimateGas(options, values)
|
||||
.then((gasEst) => {
|
||||
options.gas = gasEst.mul(1.2);
|
||||
|
||||
return trackRequest(
|
||||
func.postTransaction(options, values),
|
||||
(error, data) => {
|
||||
if (error) {
|
||||
console.error(logId, error);
|
||||
} else {
|
||||
console.log(logId, data);
|
||||
}
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
export function trackRequest (promise, callback) {
|
||||
return promise
|
||||
.then((requestId) => {
|
||||
callback(null, { state: 'checkRequest', requestId });
|
||||
|
||||
return api.pollMethod('parity_checkRequest', requestId);
|
||||
})
|
||||
.then((txHash) => {
|
||||
callback(null, { state: 'getTransactionReceipt', txHash });
|
||||
|
||||
return api.pollMethod('eth_getTransactionReceipt', txHash, (receipt) => {
|
||||
if (!receipt || !receipt.blockNumber || receipt.blockNumber.eq(0)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
});
|
||||
})
|
||||
.then((receipt) => {
|
||||
callback(null, { state: 'hasReceipt', receipt });
|
||||
})
|
||||
.catch((error) => {
|
||||
callback(error);
|
||||
|
||||
throw error;
|
||||
});
|
||||
}
|
@ -20,12 +20,15 @@ import { flatten } from 'lodash';
|
||||
|
||||
import * as abis from '~/contracts/abi';
|
||||
import Contracts from '~/contracts';
|
||||
import builtins from '~/views/Dapps/builtin.json';
|
||||
import builtinJson from '~/views/Dapps/builtin.json';
|
||||
|
||||
import Dapp from './dappStore.js';
|
||||
import { deleteDapp, registerDapp, updateDapp } from './utils';
|
||||
|
||||
import { api, trackRequest } from './parity';
|
||||
|
||||
const builtins = builtinJson.filter((app) => app.id);
|
||||
|
||||
let instance = null;
|
||||
|
||||
export default class DappsStore {
|
||||
|
@ -21,7 +21,9 @@ import Contracts from '~/contracts';
|
||||
import { hashToImageUrl } from '~/redux/util';
|
||||
import { bytesToHex } from '~/api/util/format';
|
||||
|
||||
import builtinApps from '~/views/Dapps/builtin.json';
|
||||
import builtinJson from '~/views/Dapps/builtin.json';
|
||||
|
||||
const builtinApps = builtinJson.filter((app) => app.id);
|
||||
|
||||
function getHost (api) {
|
||||
const host = process.env.DAPPS_URL ||
|
||||
|
@ -1,4 +1,12 @@
|
||||
[
|
||||
{
|
||||
"url": "chaindeploy",
|
||||
"name": "Chain Deployment",
|
||||
"description": "Deploy all basic contracts, names & applications to the network",
|
||||
"author": "Parity Team <admin@ethcore.io>",
|
||||
"version": "1.0.0",
|
||||
"visible": false
|
||||
},
|
||||
{
|
||||
"id": "0xf9f2d620c2e08f83e45555247146c62185e4ab7cf82a4b9002a265a0d020348f",
|
||||
"url": "tokendeploy",
|
||||
|
Loading…
Reference in New Issue
Block a user