Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

Deploy new contracts on Testnet #295

Merged
merged 11 commits into from
Dec 14, 2023
13 changes: 12 additions & 1 deletion publish/ABI/ProjectRegistry.json
Original file line number Diff line number Diff line change
Expand Up @@ -394,7 +394,13 @@
"type": "function"
},
{
"inputs": [],
"inputs": [
{
"internalType": "enum ProjectType",
"name": "",
"type": "uint8"
}
],
"name": "creatorRestricted",
"outputs": [
{
Expand Down Expand Up @@ -745,6 +751,11 @@
},
{
"inputs": [
{
"internalType": "enum ProjectType",
"name": "_type",
"type": "uint8"
},
{
"internalType": "bool",
"name": "_creatorRestricted",
Expand Down
220 changes: 104 additions & 116 deletions publish/testnet.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion rust/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ impl Network {
#[inline]
fn contract_parse(name: &str, file: &str, network: Network) -> Result<(Abi, Address), ()> {
let address: Value = serde_json::from_str(network.address()).map_err(|_| ())?;
let contract_address: Address = address[name]["address"]
let contract_address: Address = address["child"][name]["address"]
.as_str()
.ok_or(())?
.parse()
Expand Down
1 change: 0 additions & 1 deletion scripts/config/contracts.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ export default {
IndexerRegistry: [utils.parseEther("1000")],
ConsumerHost: [1], // Fee Percentage, default is 1%
DisputeManager: [utils.parseEther("10000")], // minimumDeposit
EventSyncRootTunnel: ['0x2890bA17EfE978480615e330ecB65333b880928e','0x3d1d3E34f7fB6D26245E6640E1c50710eFFf15bA'],
ChildERC20: ['SubQueryToken', 'SQT', 18, '0x2e5e27d50EFa501D90Ad3638ff8441a0C0C0d75e'],
},
local: {
Expand Down
29 changes: 24 additions & 5 deletions scripts/config/startup.testnet.json
Original file line number Diff line number Diff line change
Expand Up @@ -49,12 +49,13 @@
"token": "0x7E65A71046170A5b1AaB5C5cC64242EDF95CaBEA"
}
],
"tokenDeposit": "1000000000000000000000000000",
"exchange": {
"usdcAddress": "0x7E65A71046170A5b1AaB5C5cC64242EDF95CaBEA",
"amountGive": "1000000",
"amountGet": "5000000000000000000",
"expireDate": 1703681276,
"tokenGiveBalance": "50000000"
"tokenGive": "0xDa9f97B9dE8509938c65DB0F0CB0ff9Ea425E9a0",
"tokenGet": "0x4C779e847b4893345B29cB34225dB0D2fb1C6239",
"amountGive": "1",
"amountGet": "1",
"tokenGiveBalance": "1000000000000000000000000"
},
"QRCreator": ["0xD3c54c8F8B993dD99440bb27862472016794255C"],
"AirdropController": ["0xD3c54c8F8B993dD99440bb27862472016794255C"],
Expand All @@ -71,6 +72,24 @@
],
"multiSign": "0x4ae8fcdddc859e2984ce0b8f4ef490d61a7a9b7f",
"projects": [
{
"name": "Ethereum Node",
"projectMetadata": "QmNrvxwA6isiDt2aicoNp1EqB2e4MarW7HhLDTaaot9etn",
"deploymentId": "Qmdn8iu7p39YR6WKfzECiwywxhUkyXJp68fjEqG4bkLA7z",
"deploymentMetadata": "QmaBm3Htj5yR9xbWWYbyx5ALsxNVn8to4a6FgoJLi3czCc"
},
{
"name": "Eth Private RPC",
"projectMetadata": "QmbK2PaNrMZ9WhpQEPbAMn1btszNpdoAnqPD7P9VGiqEvp",
"deploymentId": "QmTeutqL8wQqzAdG8MNWMXxoz1LDkkRZkY6HEw1HbdT2um",
"deploymentMetadata": "QmbkeHJeUzfxyaPckG6NFkbZMa3g61unMHCWNDCY7yh3vy"
},
{
"name": "Polkadot RPC",
"projectMetadata": "QmZuHNB1cv6QzYCrbyMFX1EWigFWcReGWMzANJM1DpfpYF",
"deploymentId": "QmQTUtMN3Ko6nuY5wTSA14Hc8dGbdqv5981QDyCmoS9hqh",
"deploymentMetadata": "QmbkeHJeUzfxyaPckG6NFkbZMa3g61unMHCWNDCY7yh3vy"
},
{
"name": "Kepler Testnet Dev",
"projectMetadata": "QmSpZaQ34upk8iKSTGdneNmqRh88oU1BvytbLUvhVEKiDZ",
Expand Down
2 changes: 1 addition & 1 deletion scripts/contracts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ import {
Vesting__factory,
PolygonDestination,
PolygonDestination__factory,
ChildERC20__factory
ChildERC20__factory,
} from '../src';

export interface FactoryContstructor {
Expand Down
7 changes: 4 additions & 3 deletions scripts/deployContracts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import { readFileSync, writeFileSync } from 'fs';
import Pino from 'pino';
import sha256 from 'sha256';

import { rootChainMananger } from './rootChainManager';
import CONTRACTS from '../src/contracts';
import {ContractDeployment, ContractDeploymentInner, ContractName, SQContracts, SubqueryNetwork} from '../src/types';
import { getLogger } from './logger';
Expand Down Expand Up @@ -243,8 +244,6 @@ export async function deployRootContracts(
// deploy MockRootChainManager
rootChainManager = await new RootChainManager__factory(wallet).deploy();
}
// tx = await inflationController.setInflationDestination(polygonDestination.address);
// await tx.wait(confirms);

getLogger('Deployer').info('🤞 PolygonDestination');

Expand All @@ -258,7 +257,7 @@ export async function deployRootContracts(
sqtToken.address,
inflationController.address,
vesting.address,
deployment.root['RootChainManager']?.address ?? rootChainManager.address,
rootChainMananger[network]?.address ?? rootChainManager.address,
]);
await tx.wait(confirms);

Expand Down Expand Up @@ -288,6 +287,7 @@ export async function deployContracts(
config = _config;
confirms = options?.confirms ?? 1;
network = options?.network ?? 'local';
logger = getLogger('Child Deployer');

if (options?.history) {
const localDeployment = loadDeployment(network);
Expand Down Expand Up @@ -419,6 +419,7 @@ export async function deployContracts(
});

// Register addresses on settings contract
// FIXME: failed to send this tx
getLogger('SettingContract').info('🤞 Set token addresses');
const txToken = await settings.setBatchAddress([
SQContracts.SQToken,
Expand Down
16 changes: 16 additions & 0 deletions scripts/rootChainManager.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
export const rootChainMananger = {
// TODO: add polygon addresses
mainnet: {
innerAddress: "",
address: "",
bytecodeHash: "",
lastUpdate: ""
},
// mumbai
testnet: {
innerAddress: "0xe45d449909905f82a5e0b0F2afA5953C2E3583Fd",
address: "0xBbD7cBFA79faee899Eaf900F13C9065bF03B1A74",
bytecodeHash: "",
lastUpdate: ""
}
}
79 changes: 51 additions & 28 deletions scripts/startup.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
import { TokenExchange } from './../src/typechain/contracts/TokenExchange';
import { PolygonDestination } from './../src/typechain/contracts/root/PolygonDestination';
import { BigNumber, ContractReceipt, ContractTransaction, Overrides, Wallet, ethers, utils } from 'ethers';
import Pino from 'pino';

import setup from './setup';
import { argv, setupCommon } from './setup';

import Token from '../artifacts/contracts/root/SQToken.sol/SQToken.json';
import { ContractSDK, SubqueryNetwork } from '../build';
import { ContractSDK, PolygonSDK, SubqueryNetwork } from '../build';
import { METADATA_HASH } from '../test/constants';
import startupKeplerConfig from './config/startup.kepler.json';
import startupMainnetConfig from './config/startup.mainnet.json';
Expand All @@ -14,6 +16,8 @@ import { Provider, StaticJsonRpcProvider } from '@ethersproject/providers';
import { MockProvider } from "ethereum-waffle";
import { parseEther } from 'ethers/lib/utils';
import { getLogger } from './logger';
import { networks } from '../src/networks';
import { token } from 'src/typechain/@openzeppelin/contracts';

let startupConfig: any = startupTestnetConfig;
let logger: Pino.Logger;
Expand Down Expand Up @@ -56,6 +60,26 @@ async function getAirdropTimeConfig(provider) {
return { startTime, endTime };
}

async function setupInflation(sdk: PolygonSDK) {
logger = getLogger('Token');
logger.info('Set minter');
//FIXME: error: setMinter is not a function
await sdk.sqToken.setMinter(sdk.inflationController.address);
// logger.info('Set inflationDestination');
// await sendTx((overrides) => sdk.inflationController.setInflationDestination(sdk.polygonDestination.address, overrides));
// logger.info('Set xcRecipient');
// await sendTx((overrides) => sdk.polygonDestination.setXcRecipient(sdk.childToken.address, overrides));
}

async function tokenDeposit(sdk: PolygonSDK) {
logger = getLogger('Token');
const amount = startupConfig.tokenDeposit;
logger.info(`Deposit ${amount} token to Polygon`);
let tx = await sdk.approveDeposit(amount);
await tx.getReceipt();
tx = await sdk.depositFor(amount);
}

export async function createProjects(sdk: ContractSDK, _provider?: StaticJsonRpcProvider) {
if (_provider) provider = _provider;
logger = getLogger('Projects');
Expand Down Expand Up @@ -157,24 +181,13 @@ export async function airdrop(sdk: ContractSDK, _provider?: StaticJsonRpcProvide
console.log('\n');
}

async function setupPermissionExchange(sdk: ContractSDK, wallet: Wallet, _provider?: StaticJsonRpcProvider) {
if (_provider) provider = _provider;
logger = getLogger('Permission Exchange');
async function setupTokenExchange(sdk: ContractSDK) {
logger = getLogger('Token Exchange');
logger.info('Setup exchange order');
const { usdcAddress, amountGive, amountGet, expireDate, tokenGiveBalance } = startupConfig.exchange;
const usdcContract = new ethers.Contract(usdcAddress, Token.abi, provider);
await usdcContract.connect(wallet).increaseAllowance(sdk.permissionedExchange.address, tokenGiveBalance);

const { tokenGive, tokenGet, amountGive, amountGet, tokenGiveBalance } = startupConfig.exchange;
await sendTx((overrides) => sdk.sqToken.increaseAllowance(sdk.tokenExchange.address, tokenGiveBalance, overrides));
await sendTx((overrides) =>
sdk.permissionedExchange.createPairOrders(
usdcAddress,
sdk.sqToken.address,
amountGive,
amountGet,
expireDate,
tokenGiveBalance,
overrides
)
sdk.tokenExchange.sendOrder(tokenGive, tokenGet, amountGive, amountGet, tokenGiveBalance, overrides)
);

console.log('\n');
Expand Down Expand Up @@ -211,9 +224,11 @@ export async function ownerTransfer(sdk: ContractSDK) {
];

for (const contract of contracts) {
// @ts-ignore
const owner = await contract.owner();
if (owner != startupConfig.multiSign) {
logger.info(`Transfer Ownership: ${contract.address}`);
// @ts-ignore
await sendTx((overrides) => contract.transferOwnership(startupConfig.multiSign, overrides));
} else {
console.info(`${contract.address} ownership has already transfered`);
Expand Down Expand Up @@ -288,12 +303,14 @@ async function setupVesting(sdk: ContractSDK) {
}

const main = async () => {
const { wallet, name } = await setup();
provider = wallet.provider;
const network = (argv.network ?? 'testnet') as SubqueryNetwork;
const { wallet, rootProvider, childProvider, overrides } = await setupCommon(networks[network]);
const polygonSdk = await PolygonSDK.create(wallet, {root: rootProvider, child: childProvider}, {network: 'testnet'});

const sdk = ContractSDK.create(wallet, { network: name });
const sdk = ContractSDK.create(wallet.connect(childProvider), { network });
provider = childProvider;

switch (name) {
switch (network) {
case 'mainnet':
startupConfig = startupMainnetConfig;
confirms = 20;
Expand All @@ -303,17 +320,23 @@ const main = async () => {
await ownerTransfer(sdk);
break;
case 'testnet':
confirms = 1;
confirms = 5;
startupConfig = startupTestnetConfig;
// await allocateTokenToIndexers(sdk);
await createProjects(sdk);
// root contracts
await setupInflation(polygonSdk);
// await tokenDeposit(polygonSdk);

// child contracts
// await createProjects(sdk);
// await createPlanTemplates(sdk);
// await setupTokenExchange(sdk);
// await allocateTokenToIndexers(sdk);

// await setupVesting(sdk);
// await airdrop(sdk);
// await setupPermissionExchange(sdk, wallet);
// await setupTokenExchange(sdk);
break;
default:
throw new Error(`Please provide correct network ${name}`);
throw new Error(`Please provide correct network ${network}`);
}

logger = getLogger('Contract Setup');
Expand Down
15 changes: 14 additions & 1 deletion src/polygonSDK.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ import { DEPLOYMENT_DETAILS } from './deployments';
import {
ERC20,
SQToken,
InflationController,
PolygonDestination,
SQToken__factory
} from './typechain';
import {
CONTRACT_FACTORY, ContractDeployment, PolygonSdkOptions,
Expand All @@ -22,14 +25,24 @@ export class PolygonSDK {

readonly sqToken: SQToken;
readonly childToken: ERC20;
readonly inflationController: InflationController;
readonly polygonDestination: PolygonDestination;
// TODO: add vesting contract

private _posClient: POSClient;
private signerAddress?: string;

constructor(private readonly wallet: Signer, private readonly providers: {root: AbstractProvider, child: AbstractProvider}, public readonly options: PolygonSdkOptions) {
assert(this.options.deploymentDetails || DEPLOYMENT_DETAILS[options.network],' missing contract deployment info');
this._contractDeployments = this.options.deploymentDetails ?? DEPLOYMENT_DETAILS[options.network]!;
this.sqToken = CONTRACT_FACTORY.SQToken.connect(this._contractDeployments.root.SQToken!.address, this.wallet.connect(providers.root)) as SQToken;

const rootWallet = this.wallet.connect(providers.root);
const { SQToken, InflationController, PolygonDestination } = this._contractDeployments.root;
this.sqToken = SQToken__factory.connect(SQToken!.address, rootWallet) as SQToken;
this.inflationController = CONTRACT_FACTORY.InflationController.connect(InflationController!.address, rootWallet) as InflationController;
this.polygonDestination = CONTRACT_FACTORY.PolygonDestination.connect(PolygonDestination!.address, rootWallet) as PolygonDestination;
this.childToken = CONTRACT_FACTORY.ChildERC20.connect(this._contractDeployments.child.SQToken!.address, this.wallet.connect(providers.child)) as ERC20;

this._posClient = new POSClient();
}

Expand Down
3 changes: 2 additions & 1 deletion src/sdk.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ import {
RewardsHelper,
RewardsPool,
RewardsStaking,
SQToken,
ServiceAgreementExtra,
ServiceAgreementRegistry,
Settings,
Expand All @@ -32,6 +31,7 @@ import {
StateChannel,
VSQToken,
Vesting,
TokenExchange
} from './typechain';
import {
CONTRACT_FACTORY,
Expand Down Expand Up @@ -77,6 +77,7 @@ export class ContractSDK {
readonly consumerRegistry!: ConsumerRegistry;
readonly priceOracle!: PriceOracle;
readonly vSQToken!: VSQToken;
readonly tokenExchange!: TokenExchange;

constructor(private readonly signerOrProvider: AbstractProvider | Signer, public readonly options: SdkOptions) {
assert(this.options.deploymentDetails || DEPLOYMENT_DETAILS[options.network],' missing contract deployment info');
Expand Down
Loading