@windingtree/wt-read-api
Version:
API to interact with the Winding Tree platform
115 lines (103 loc) • 4.36 kB
JavaScript
const Web3 = require('web3');
const TruffleContract = require('truffle-contract');
const CuratedListContract = require('@windingtree/trust-clue-curated-list/build/contracts/CuratedList.json');
const LifDeposit = require('@windingtree/trust-clue-lif-deposit/build/contracts/LifDeposit.json');
const LifTokenTest = require('@windingtree/lif-token/build/contracts/LifTokenTest.json');
const ENS = require('@ensdomains/ens/build/contracts/ENSRegistry.json');
const PublicResolver = require('@ensdomains/resolver/build/contracts/PublicResolver.json');
const TestRegistrar = require('@ensdomains/ens/build/contracts/TestRegistrar.json');
const namehash = require('eth-ens-namehash');
const getContractWithProvider = (metadata, provider) => {
const contract = TruffleContract(metadata);
contract.setProvider(provider);
return contract;
};
const provider = new Web3.providers.HttpProvider('http://localhost:8545');
const web3 = new Web3(provider);
const deployCuratedListTrustClue = async () => {
const listContract = getContractWithProvider(CuratedListContract, provider);
const accounts = await web3.eth.getAccounts();
const curatedList = await listContract.new({
from: accounts[0],
gas: 6000000,
});
await curatedList.addMember(accounts[0], {
from: accounts[0],
gas: 6000000,
});
return curatedList;
};
const deployEnsRegistry = async () => {
const ensContract = getContractWithProvider(ENS, provider);
const accounts = await web3.eth.getAccounts();
const ens = await ensContract.new({
from: accounts[0],
gas: 4700000,
});
return ens;
};
const setupEnsRegistry = async (ensContract, tokenContract) => {
const resolverContract = getContractWithProvider(PublicResolver, provider);
const registrarContract = getContractWithProvider(TestRegistrar, provider);
const accounts = await web3.eth.getAccounts();
const txOptions = {
from: accounts[0],
gas: 4700000,
};
const publicResolver = await resolverContract.new(ensContract.address, txOptions);
await ensContract.setSubnodeOwner('0x0', web3.utils.sha3('eth'), accounts[0], txOptions);
await ensContract.setResolver(namehash.hash('eth'), publicResolver.address, txOptions);
const testRegistrar = await registrarContract.new(ensContract.address, namehash.hash('eth'), {
from: accounts[0],
gas: 4700000,
});
await ensContract.setSubnodeOwner('0x0', web3.utils.sha3('eth'), testRegistrar.address, txOptions);
await testRegistrar.register(web3.utils.sha3('windingtree'), accounts[0], txOptions);
await ensContract.setSubnodeOwner(namehash.hash('windingtree.eth'), web3.utils.sha3('token'), accounts[0], txOptions);
await ensContract.setResolver(namehash.hash('token.windingtree.eth'), publicResolver.address, txOptions);
await publicResolver.setAddr(namehash.hash('token.windingtree.eth'), tokenContract.address, txOptions);
};
const deployLifToken = async () => {
const accounts = await web3.eth.getAccounts();
const contract = getContractWithProvider(LifTokenTest, provider);
const tokenContract = await contract.new({
from: accounts[0],
gas: 6000000,
});
await tokenContract.faucetLif({
from: accounts[0],
gas: 600000,
});
return tokenContract;
};
const deployLifDeposit = async (tokenContract, ensContract) => {
const accounts = await web3.eth.getAccounts();
const contract = getContractWithProvider(LifDeposit, provider);
const depositContract = await contract.new(ensContract.address, {
from: accounts[0],
gas: 6000000,
});
await tokenContract.approve(depositContract.address, web3.utils.toWei('100', 'wei'), {
from: accounts[0],
gas: 6000000,
});
// TODO make this more dynamic
await depositContract.addDeposit('0x63E2AfcC43C5327b0422F4b7b13E00cC62C8505C', web3.utils.toWei('12', 'wei'), {
from: accounts[0],
gas: 6000000,
});
return depositContract;
};
const deployLifDepositTrustClue = async () => {
const ensRegistry = await deployEnsRegistry();
console.log(`ENS registry deployed to ${ensRegistry.address}`);
const lifToken = await deployLifToken();
console.log(`LIF token with faucet deployed to ${lifToken.address}`);
await setupEnsRegistry(ensRegistry, lifToken);
return deployLifDeposit(lifToken, ensRegistry);
};
module.exports = {
deployLifToken,
deployCuratedListTrustClue,
deployLifDepositTrustClue,
};