meritocracy/config/contracts.js

218 lines
7.2 KiB
JavaScript
Raw Normal View History

2019-03-12 13:31:11 +00:00
const options = require("../app/js/contributors");
function getContributors () {
var addresses = options.map(a => a.value);
if ( new Set(addresses).size !== addresses.length ) {
throw 'duplicates in options';
}
return addresses;
}
const OG_IPFS_HASH = 'QmfWJJYFBJReu2rzTDzkBKXHazE52GVWrTcVNKdcupnxNH';
2019-02-02 16:04:55 +00:00
module.exports = {
// default applies to all environments
default: {
// Blockchain node to deploy the contracts
deployment: {
host: "localhost", // Host of the blockchain node
port: 8546, // Port of the blockchain node
type: "ws" // Type of connection (ws or rpc),
2019-02-02 16:04:55 +00:00
// Accounts to use instead of the default account to populate your wallet
// The order here corresponds to the order of `web3.eth.getAccounts`, so the first one is the `defaultAccount`
/*,accounts: [
{
privateKey: "your_private_key",
balance: "5 ether" // You can set the balance of the account in the dev environment
// Balances are in Wei, but you can specify the unit with its name
},
{
privateKeyFile: "path/to/file", // Either a keystore or a list of keys, separated by , or ;
password: "passwordForTheKeystore" // Needed to decrypt the keystore file
},
{
mnemonic: "12 word mnemonic",
addressIndex: "0", // Optionnal. The index to start getting the address
numAddresses: "1", // Optionnal. The number of addresses to get
hdpath: "m/44'/60'/0'/0/" // Optionnal. HD derivation path
},
{
"nodeAccounts": true // Uses the Ethereum node's accounts
}
]*/
2019-02-02 16:04:55 +00:00
},
// order of connections the dapp should connect to
dappConnection: [
"$WEB3", // uses pre existing web3 object if available (e.g in Mist)
"ws://localhost:8546",
"http://localhost:8545"
],
// Automatically call `ethereum.enable` if true.
// If false, the following code must run before sending any transaction: `await EmbarkJS.enableEthereum();`
// Default value is true.
// dappAutoEnable: true,
2019-02-02 16:04:55 +00:00
gas: "auto",
// Strategy for the deployment of the contracts:
// - implicit will try to deploy all the contracts located inside the contracts directory
// or the directory configured for the location of the contracts. This is default one
// when not specified
// - explicit will only attempt to deploy the contracts that are explicity specified inside the
// contracts section.
//strategy: 'implicit',
2019-03-12 13:31:11 +00:00
strategy: 'explicit',
2019-02-02 16:04:55 +00:00
contracts: {
"MiniMeToken": { "deploy": false },
"MiniMeTokenFactory": {
},
"SNT": {
"instanceOf": "MiniMeToken",
"args": [
"$MiniMeTokenFactory",
"0x0000000000000000000000000000000000000000",
0,
"TestMiniMeToken",
18,
"STT",
true
]
},
"Meritocracy": {
"args": ["$SNT", 66, OG_IPFS_HASH]
2019-02-02 16:04:55 +00:00
}
}
},
// default environment, merges with the settings in default
// assumed to be the intended environment by `embark run`
development: {
dappConnection: [
2019-02-18 05:51:18 +00:00
"$WEB3", // uses pre existing web3 object if available (e.g in Mist)
2019-02-02 16:04:55 +00:00
"ws://localhost:8546",
"http://localhost:8545",
],
deployment: {
// The order here corresponds to the order of `web3.eth.getAccounts`, so the first one is the `defaultAccount`
accounts: [
{
nodeAccounts: true
},
{
mnemonic: "foster gesture flock merge beach plate dish view friend leave drink valley shield list enemy",
balance: "5 ether",
numAddresses: "10"
}
]
2019-02-02 16:04:55 +00:00
},
afterDeploy: async (deps) => {
try {
const {SNT, Meritocracy} = deps.contracts;
const addresses = await deps.web3.eth.getAccounts();
const mainAccount = addresses[0];
const balance = await SNT.methods.balanceOf(mainAccount).call();
if (balance !== '0') {
return;
}
const tokens = '1000000000000000000000';
console.log('Generating tokens for the main account...');
const generateTokens = SNT.methods.generateTokens(mainAccount, tokens);
let gas = await generateTokens.estimateGas({from: mainAccount});
await generateTokens.send({from: mainAccount, gas});
// Add All Contributors
console.log('Adding all tokens...');
const addContributors = Meritocracy.methods.addContributors(getContributors());
gas = await addContributors.estimateGas({from: mainAccount});
await addContributors.send({from: mainAccount, gas});
// Allocate Owner Tokens
console.log('Approving token transfer...');
const approve = SNT.methods.approve(Meritocracy.options.address, tokens);
gas = await approve.estimateGas({from: mainAccount});
await approve.send({from: mainAccount, gas});
console.log('Allocating tokens...');
const allocate = Meritocracy.methods.allocate(tokens);
gas = await allocate.estimateGas({from: mainAccount});
await allocate.send({from: mainAccount, gas});
console.log('All done!')
} catch (e) {
console.log("------- Error in after deploy ------- ");
console.dir(e);
}
}
2019-02-02 16:04:55 +00:00
},
// merges with the settings in default
// used with "embark run privatenet"
privatenet: {
},
// merges with the settings in default
// used with "embark run testnet"
testnet: {
2019-03-12 13:31:11 +00:00
contracts: {
"MiniMeToken": { "deploy": false },
"MiniMeTokenFactory": {
"address": "0x6bfa86a71a7dbc68566d5c741f416e3009804279"
},
"SNT": {
"address": "0xc55cF4B03948D7EBc8b9E8BAD92643703811d162"
},
"Meritocracy": {
2019-03-21 23:21:05 +00:00
"address": "0xf40f9418D8236f373eB27f91Cc1a01739EB8c301"
2019-03-12 13:31:11 +00:00
}
},
deployment: {
accounts: [{
mnemonic: "your ropsten mnemonic here",
numAddresses: "10"
}]
},
"afterDeploy": [
// Add All Contributors
2019-03-21 23:21:05 +00:00
// "Meritocracy.methods.addContributors([" + getContributors().toString() + "]).send()",
2019-03-12 13:31:11 +00:00
]
2019-02-02 16:04:55 +00:00
},
// merges with the settings in default
// used with "embark run livenet"
livenet: {
2019-03-21 23:21:05 +00:00
contracts: {
"MiniMeToken": { "deploy": false },
"MiniMeTokenFactory": {
"address": "0xa1c957c0210397d2d0296341627b74411756d476"
},
"SNT": {
"address": "0x744d70fdbe2ba4cf95131626614a1763df805b9e"
},
"Meritocracy": {
"address": "0x3d8ec98c08b55ec42310aace562e077d784591d6"
}
},
deployment: {
accounts: [{
mnemonic: "your mainnet mnemonic here",
numAddresses: "10"
}]
},
"afterDeploy": [
// Add All Contributors
// "Meritocracy.methods.addContributors([" + getContributors().toString() + "]).send()",
]
2019-02-02 16:04:55 +00:00
},
// you can name an environment with specific settings and then specify with
// "embark run custom_name" or "embark blockchain custom_name"
//custom_name: {
//}
};