Skip to content

Commit a02d744

Browse files
committed
Add in contracts any in cli. Add in curator unsignal simulation
1 parent 528dcd2 commit a02d744

File tree

8 files changed

+165
-47
lines changed

8 files changed

+165
-47
lines changed

addresses.json

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -360,13 +360,13 @@
360360
],
361361
"creationCodeHash": "0x27b19762861db0d7205933031f5318603d0d44c2f94f2d8ef89871694f4fceee",
362362
"runtimeCodeHash": "0xed96c5619d707fbe2b70980bd85c03aac8b77fc34d90170598dacf76df0809c4",
363-
"txHash": "0x4076305ae5acabd1786244ea3da63dafaf400947cd730fe6a11f6314b7b72a22",
363+
"txHash": "0x503ee5c503d5a45f9e2cb800ed1f9b1f321576b9b3bcfb2e8aa95497da3f3e60",
364364
"proxy": true,
365365
"implementation": {
366366
"address": "0xCfEB869F69431e42cdB54A4F4f105C19C080A601",
367367
"creationCodeHash": "0x7bec2f1b1ae07d9431a8c3166f629ebe5dfc7d43d0514f62de60b1bc6f5a229c",
368368
"runtimeCodeHash": "0x9a82808388ad5583ea8d8ed5b1db11bd0c01aef0b681784c9375946029091ecf",
369-
"txHash": "0x7ffee30597e56d75fcbc7d7875f5a2533934b4e46036e8816518d70fef074416"
369+
"txHash": "0xb7f0b54c76cdd994a21e9cf1468b6550c87ab0b6c9b03fc4db0ad47285fc9f3b"
370370
}
371371
},
372372
"GNS": {
@@ -387,7 +387,7 @@
387387
],
388388
"creationCodeHash": "0x6fa2fd5803eee3482daebb46e5ee7082abd736e456b8e698ba3abe2692eb0ac0",
389389
"runtimeCodeHash": "0xf17df064c930175fed00782cf844d0faf3ee230386f50ea0637669ce7cd468b0",
390-
"txHash": "0xeff059a3f1662b56593f3b31540db4bf7538940b0e120fe76222e43667d7df18"
390+
"txHash": "0x300189ff613cf1e2e30915c828a339b8ec2aa10f54193c3717074d95e6b88744"
391391
},
392392
"GraphToken": {
393393
"address": "0xD833215cBcc3f914bD1C9ece3EE7BF8B14f841bb",
@@ -399,13 +399,13 @@
399399
],
400400
"creationCodeHash": "0x92f69e9909f2b6f4b1e189dca93cb31dda22733ee0a09d43298e6a2a8df2ee69",
401401
"runtimeCodeHash": "0xa794d1444606a3d5578834e8f1406e9bd3486955ac93eeed0c3b5a2d7fb28b76",
402-
"txHash": "0x137c7262ee186434dd76c979c63c596145c84ea7e0d8362d313a94ef99e7a8d6"
402+
"txHash": "0x04bb91d00b5303c64d8411e345bedea78e661d988cbd921934ce85df7c4d43e0"
403403
},
404404
"ServiceRegistry": {
405405
"address": "0x9561C133DD8580860B6b7E504bC5Aa500f0f06a7",
406406
"creationCodeHash": "0x365b21babad64eb7f7bc7d902be9f0c196a63b221743a6a71df73238b969a78e",
407407
"runtimeCodeHash": "0xd0a2b0c2a20cbc493180afa412f85327aec5f658d9e98de242f23d3132fe0223",
408-
"txHash": "0x39dbb3e138adb3adabc5904bd1bee6e34b0835c98b15be13c087df959d216662"
408+
"txHash": "0x13f3357d86dd96be62a8661efd8fa9b55d1f985ae6fa608a77293dc1f97f8fe5"
409409
},
410410
"Curation": {
411411
"address": "0x59d3631c86BbE35EF041872d502F218A39FBa150",
@@ -429,13 +429,13 @@
429429
],
430430
"creationCodeHash": "0x27b19762861db0d7205933031f5318603d0d44c2f94f2d8ef89871694f4fceee",
431431
"runtimeCodeHash": "0xed96c5619d707fbe2b70980bd85c03aac8b77fc34d90170598dacf76df0809c4",
432-
"txHash": "0x53c0a3fdfc806979b57360eec3b8dbddca37dd7cc7ea1e2cd38b87adedf90901",
432+
"txHash": "0x700fb472d61e709cc4a1b5274e7155227fd7120fe1a20bedaba7f2e2b8e57d1b",
433433
"proxy": true,
434434
"implementation": {
435435
"address": "0xe982E462b094850F12AF94d21D470e21bE9D0E9C",
436436
"creationCodeHash": "0x6fae98fdb377aba500431c6a8f98d4b3b5385f073d83f775cab680753513a390",
437437
"runtimeCodeHash": "0x9d0d644107435d7f226a661a2f1074f9294c6437b9e401de4ed958c2472b954c",
438-
"txHash": "0xd9bc2b772178cdb2a90f878eb3a19fa8cb761838c372c4a2a9e67534238c1210"
438+
"txHash": "0x6be2448684ce008b175edda4753f3e1247bb906da5526f4a5d393c737e766797"
439439
}
440440
},
441441
"RewardsManager": {
@@ -448,13 +448,13 @@
448448
],
449449
"creationCodeHash": "0x27b19762861db0d7205933031f5318603d0d44c2f94f2d8ef89871694f4fceee",
450450
"runtimeCodeHash": "0xed96c5619d707fbe2b70980bd85c03aac8b77fc34d90170598dacf76df0809c4",
451-
"txHash": "0x87451daca9d73efffb28c35838e956f646a525b8d66f4e6a8d183c5dc623dd74",
451+
"txHash": "0x35f149678efe305005db468f5e6688cc043b8a5c12730c39569706b5a95dae1b",
452452
"proxy": true,
453453
"implementation": {
454454
"address": "0x630589690929E9cdEFDeF0734717a9eF3Ec7Fcfe",
455455
"creationCodeHash": "0xfcbdd687019bc3866f6985b0a211aa204fcacd376695cffa7c64380c3887b5d8",
456456
"runtimeCodeHash": "0x810e5fd6d9085ecad036d6c363209f4f987a3292ced98688d9c39f28209eedf5",
457-
"txHash": "0x65add0ca70f64528031f0bbe9045bf11b6435db05cc1e211dae105194cf7edbb"
457+
"txHash": "0xdad8671237e021e8594f1c928baae89aade98a8e8d5fa1ec6b6684374558d2f6"
458458
}
459459
},
460460
"Staking": {
@@ -467,13 +467,13 @@
467467
],
468468
"creationCodeHash": "0x27b19762861db0d7205933031f5318603d0d44c2f94f2d8ef89871694f4fceee",
469469
"runtimeCodeHash": "0xed96c5619d707fbe2b70980bd85c03aac8b77fc34d90170598dacf76df0809c4",
470-
"txHash": "0xb992f479be03232156002303ebf6ae5507fdecd9a51d925a1a6a3ab7ee592add",
470+
"txHash": "0x75e6144ceab3032df3bd230d5c784d4660c8868de34f41fb37cc5fe0260bfe29",
471471
"proxy": true,
472472
"implementation": {
473473
"address": "0x2612Af3A521c2df9EAF28422Ca335b04AdF3ac66",
474474
"creationCodeHash": "0x8f60acd822042ee02c7fdd37f7a3f887d3af4128f1c53bcda31fa65230fb231b",
475475
"runtimeCodeHash": "0x48a748afc605b3e1fc3c67bb04e956b67950d5976d20b19d562998cac57c9cca",
476-
"txHash": "0x6af60ecbcaa2f53a56969d41db601a568be837c7350b4b09c41f5148569fd9ce",
476+
"txHash": "0x38705b7ef0bce8c0403f85430aaa3f54019e6891e8a2272a22c41ebcdcd5443e",
477477
"libraries": {
478478
"LibCobbDouglas": "0x67B5656d60a809915323Bf2C40A8bEF15A152e3e"
479479
}
@@ -505,19 +505,19 @@
505505
],
506506
"creationCodeHash": "0x80aefcf962933633dadd5b4b11e2225dd4028e04f67f1388cd0348b8768f6287",
507507
"runtimeCodeHash": "0xa0fd499f4770f404ad06d30ea8f40e887f6f38e583487e5ee978aa3ce4523db9",
508-
"txHash": "0xc13becebdbd080d2ccfba452150d7639c56ca5ee76b4f4e8de96c7f85b5987d5"
508+
"txHash": "0xedf38e1bc227f60f5479733a7ecde2fc5122453cab742d0b3e56fc313d102a48"
509509
},
510510
"Controller": {
511511
"address": "0x5b1869D9A4C187F2EAa108f3062412ecf0526b24",
512512
"creationCodeHash": "0x12fd95eeb25b66f179d359d4ad761b3a67ea2526d85bc21f4bd3abbecf616f5b",
513513
"runtimeCodeHash": "0xa13b72f2a1f7c283d1fddec1b9c6e739cee7007a8988ca2880387f9abe6e4f2e",
514-
"txHash": "0xb8c8590b338679c3a76cc3b78582441b98d2cff01cf686d291cfb0b1e04189d5"
514+
"txHash": "0x0eba8285a759da55fed384c588874a4cc0d0a985486202866de1629d3fc3325f"
515515
},
516516
"BancorFormula": {
517517
"address": "0xe78A0F7E598Cc8b0Bb87894B0F60dD2a88d6a8Ab",
518518
"creationCodeHash": "0x2826b7b3e57b89d22e500ffdccd50bbf48787cf51bc56739b23f94f34970379d",
519519
"runtimeCodeHash": "0xbe050e7d7bbc793dd689b941720e1b1dff2e1e5f94331af014078bc90177b51f",
520-
"txHash": "0xe47679e58808d8c6c842a28de69c35d46be23f29a88ea5dcafab30f9aa97c232"
520+
"txHash": "0x70e22b035f63cdd12a4979a6a79cb3179903d45d5eb250c959329f6f8ea420bd"
521521
}
522522
}
523523
}

cli/commands/contracts/any.ts

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
import consola from 'consola'
2+
import yargs, { Argv } from 'yargs'
3+
import { ContractFunction } from 'ethers'
4+
5+
import { getContractAt, sendTransaction } from '../../network'
6+
import { loadEnv, CLIArgs, CLIEnvironment } from '../../env'
7+
8+
const logger = consola.create({})
9+
10+
export const any = async (cli: CLIEnvironment, cliArgs: CLIArgs): Promise<void> => {
11+
const contract = cliArgs.contract
12+
const func = cliArgs.func
13+
const addressEntry = cli.addressBook.getEntry(contract)
14+
const params = cliArgs.params.toString().split(',')
15+
const attachedContract = getContractAt(contract, addressEntry.address).connect(cli.wallet)
16+
17+
if (cliArgs.type == 'get') {
18+
logger.log(`Getting ${func}...`)
19+
const contractFn: ContractFunction = attachedContract.functions[func]
20+
const value = await contractFn(...params)
21+
logger.success(`${func} = ${value}`)
22+
} else if (cliArgs.type == 'set') {
23+
logger.log(`Setting ${func}...`)
24+
await sendTransaction(cli.wallet, attachedContract, func, ...params)
25+
}
26+
}
27+
28+
export const anyCommand = {
29+
command: 'any',
30+
describe: 'Call a getter or a setter, on any contract',
31+
builder: (yargs: Argv): yargs.Argv => {
32+
return yargs
33+
.option('type', {
34+
description: 'Choose get or set',
35+
type: 'string',
36+
requiresArg: true,
37+
demandOption: true,
38+
})
39+
.option('contract', {
40+
description: 'Name of contract, case sensitive',
41+
type: 'string',
42+
requiresArg: true,
43+
demandOption: true,
44+
})
45+
.option('func', {
46+
description: 'Name of function',
47+
type: 'string',
48+
requiresArg: true,
49+
demandOption: true,
50+
})
51+
.option('params', {
52+
description: 'All parameters, comma separated',
53+
type: 'string',
54+
requiresArg: true,
55+
demandOption: true,
56+
})
57+
},
58+
handler: async (argv: CLIArgs): Promise<void> => {
59+
return any(await loadEnv(argv), argv)
60+
},
61+
}

cli/commands/contracts/graphToken.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,16 @@ export const approve = async (cli: CLIEnvironment, cliArgs: CLIArgs): Promise<vo
4242
await sendTransaction(cli.wallet, graphToken, 'approve', ...[account, amount])
4343
}
4444

45+
export const allowance = async (cli: CLIEnvironment, cliArgs: CLIArgs): Promise<void> => {
46+
const account = cliArgs.account
47+
const spender = cliArgs.spender
48+
const graphToken = cli.contracts.GraphToken
49+
50+
logger.log(`Checking ${account} allowance set for spender ${spender}...`)
51+
const res = await graphToken.allowance(account, spender)
52+
logger.success(`allowance = ${res}`)
53+
}
54+
4555
export const graphTokenCommand = {
4656
command: 'graphToken',
4757
describe: 'Graph Token contract calls',
@@ -128,6 +138,28 @@ export const graphTokenCommand = {
128138
return approve(await loadEnv(argv), argv)
129139
},
130140
})
141+
.command({
142+
command: 'allowance',
143+
describe: 'Check GRT allowance',
144+
builder: (yargs: Argv) => {
145+
return yargs
146+
.option('account', {
147+
description: 'The account who gave an allowance',
148+
type: 'string',
149+
requiresArg: true,
150+
demandOption: true,
151+
})
152+
.option('spender', {
153+
description: 'The spender',
154+
type: 'string',
155+
requiresArg: true,
156+
demandOption: true,
157+
})
158+
},
159+
handler: async (argv: CLIArgs): Promise<void> => {
160+
return allowance(await loadEnv(argv), argv)
161+
},
162+
})
131163
},
132164
handler: (): void => {
133165
yargs.showHelp()

cli/commands/contracts/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { gnsCommand } from './gns'
88
import { graphTokenCommand } from './graphToken'
99
import { gdaiCommand } from './gsr-gdai'
1010
import { stakingCommand } from './staking'
11+
import { anyCommand } from './any'
1112

1213
import { CLIArgs } from '../../env'
1314

@@ -24,6 +25,7 @@ export const contractsCommand = {
2425
.command(graphTokenCommand)
2526
.command(gdaiCommand)
2627
.command(stakingCommand)
28+
.command(anyCommand)
2729
},
2830
handler: (argv: CLIArgs): void => {
2931
yargs.showHelp()

cli/commands/simulations/curatorSimulation.ts

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
import consola from 'consola'
2-
import { parseGRT } from '@graphprotocol/common-ts'
2+
import { parseGRT, formatGRT } from '@graphprotocol/common-ts'
33
import yargs, { Argv } from 'yargs'
44

55
import { sendTransaction } from '../../network'
66
import { loadEnv, CLIArgs, CLIEnvironment } from '../../env'
77
import { parseCreateSubgraphsCSV, CurateSimulationTransaction, parseUnsignalCSV } from './parseCSV'
88
import { pinMetadataToIPFS, IPFS } from '../../helpers'
9+
import { BigNumber } from 'ethers'
910

1011
const logger = consola.create({})
1112

13+
export const toBN = (value: string | number): BigNumber => BigNumber.from(value)
14+
1215
const createSubgraphs = async (
1316
cli: CLIEnvironment,
1417
txData: CurateSimulationTransaction[],
@@ -29,11 +32,11 @@ const createSubgraphs = async (
2932
subgraph.subgraph,
3033
)
3134
logger.log(`Publishing new subgraph: ${subgraph.subgraph.displayName}`)
32-
logger.log(cli.wallet.address)
33-
logger.log(graphAccount)
34-
logger.log(subgraphDeploymentIDBytes)
35-
logger.log(versionHashBytes)
36-
logger.log(subgraphHashBytes)
35+
logger.log(` Sender: ${cli.wallet.address}`)
36+
logger.log(` Graph Account: ${graphAccount}`)
37+
logger.log(` Subgraph Deployment ID: ${subgraphDeploymentIDBytes}`)
38+
logger.log(` Version Hash: ${versionHashBytes}`)
39+
logger.log(` Subgraph Hash: ${subgraphHashBytes}`)
3740

3841
await sendTransaction(
3942
cli.wallet,
@@ -58,6 +61,7 @@ const curateOnSubgraphs = async (
5861
const gns = cli.contracts.GNS
5962

6063
logger.log(`Minting nSignal for ${graphAccount}-${firstSubgraphNumber}...`)
64+
// TODO - this fails on gas estimate, might need to hardcode it in, but this happens for other funcs too
6165
await sendTransaction(
6266
cli.wallet,
6367
gns,
@@ -69,22 +73,37 @@ const curateOnSubgraphs = async (
6973
}
7074

7175
const createAndSignal = async (cli: CLIEnvironment, cliArgs: CLIArgs): Promise<void> => {
76+
// First approve the GNS
77+
const maxUint = '115792089237316195423570985008687907853269984665640564039457584007913129639935'
78+
const gnsAddr = cli.contracts.GNS.address
79+
const graphToken = cli.contracts.GraphToken
80+
81+
logger.log(`Approving MAX tokens for user GNS to spend on behalf of ${cli.walletAddress}...`)
82+
await sendTransaction(cli.wallet, graphToken, 'approve', ...[gnsAddr, maxUint])
83+
7284
const txData = parseCreateSubgraphsCSV(__dirname + cliArgs.path)
73-
logger.log(`Running the curation simulator`)
85+
logger.log(`Running createAndSignal for ${txData.length} subgraphs`)
7486
await createSubgraphs(cli, txData)
7587
await curateOnSubgraphs(cli, txData, cliArgs.firstSubgraphNumber)
7688
}
7789

7890
const unsignal = async (cli: CLIEnvironment, cliArgs: CLIArgs): Promise<void> => {
7991
const txData = parseUnsignalCSV(__dirname + cliArgs.path)
92+
const gns = cli.contracts.GNS
93+
8094
logger.log(`Burning nSignal for ${txData.length} accounts...`)
8195
for (let i = 0; i < txData.length; i++) {
96+
logger.log(`Getting nSignal balance...`)
97+
const nBalance = toBN(
98+
(await gns.getCuratorNSignal(cli.walletAddress, i, cli.walletAddress)).toString(),
99+
)
100+
const burnPercent = toBN(txData[i].amount)
101+
const burnAmount = nBalance.mul(burnPercent).div(toBN(100))
102+
82103
const account = txData[i].account
83104
const subgraphNumber = txData[i].subgraphNumber
84-
const nSignal = parseGRT(txData[i].amount)
85-
const gns = cli.contracts.GNS
86-
logger.log(`Burning nSignal for ${account}-${subgraphNumber}...`)
87-
await sendTransaction(cli.wallet, gns, 'burnNSignal', ...[account, subgraphNumber, nSignal])
105+
logger.log(`Burning ${formatGRT(burnAmount)} nSignal for ${account}-${subgraphNumber}...`)
106+
await sendTransaction(cli.wallet, gns, 'burnNSignal', ...[account, subgraphNumber, burnAmount])
88107
}
89108
}
90109
export const curatorSimulationCommand = {
Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
1-
Account,Subgraph Number,Amount
2-
0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1,0,300000
3-
0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1,1,100000
4-
0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1,2,100000
5-
0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1,3,100000
6-
0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1,4,100000
7-
0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1,5,50000
8-
0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1,6,25000
9-
0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1,7,80000
10-
0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1,8,150000
11-
0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1,9,150000
12-
0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1,10,150000
13-
0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1,11,150000
14-
0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1,12,200000
15-
0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1,13,200000
16-
0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1,14,200000
17-
0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1,15,100000
18-
0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1,16,200000
19-
0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1,17,200000
1+
Account,Subgraph Number,Amount (percentage)
2+
0x23D1B1823e6Cb5229137424f88C70fdA1539F1F9,0,10
3+
0x23D1B1823e6Cb5229137424f88C70fdA1539F1F9,1,20
4+
0x23D1B1823e6Cb5229137424f88C70fdA1539F1F9,2,100
5+
0x23D1B1823e6Cb5229137424f88C70fdA1539F1F9,3,40
6+
0x23D1B1823e6Cb5229137424f88C70fdA1539F1F9,4,50
7+
0x23D1B1823e6Cb5229137424f88C70fdA1539F1F9,5,70
8+
0x23D1B1823e6Cb5229137424f88C70fdA1539F1F9,6,12
9+
0x23D1B1823e6Cb5229137424f88C70fdA1539F1F9,7,88
10+
0x23D1B1823e6Cb5229137424f88C70fdA1539F1F9,8,17
11+
0x23D1B1823e6Cb5229137424f88C70fdA1539F1F9,9,23
12+
0x23D1B1823e6Cb5229137424f88C70fdA1539F1F9,10,45
13+
0x23D1B1823e6Cb5229137424f88C70fdA1539F1F9,11,55
14+
0x23D1B1823e6Cb5229137424f88C70fdA1539F1F9,12,65
15+
0x23D1B1823e6Cb5229137424f88C70fdA1539F1F9,13,99
16+
0x23D1B1823e6Cb5229137424f88C70fdA1539F1F9,14,1
17+
0x23D1B1823e6Cb5229137424f88C70fdA1539F1F9,15,2
18+
0x23D1B1823e6Cb5229137424f88C70fdA1539F1F9,16,30
19+
0x23D1B1823e6Cb5229137424f88C70fdA1539F1F9,17,44

cli/network.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,9 +92,13 @@ export const sendTransaction = async (
9292
const receipt = await sender.provider.waitForTransaction(tx.hash)
9393
const networkName = (await sender.provider.getNetwork()).name
9494
if (networkName === 'kovan' || networkName === 'rinkeby') {
95-
logger.success(`Transaction mined 'https://${networkName}.etherscan.io/tx/${tx.hash}'`)
95+
receipt.status // 1 = success, 0 = failure
96+
? logger.success(`Transaction succeeded: 'https://${networkName}.etherscan.io/tx/${tx.hash}'`)
97+
: logger.warn(`Transaction failed: 'https://${networkName}.etherscan.io/tx/${tx.hash}'`)
9698
} else {
97-
logger.success(`Transaction mined ${tx.hash}`)
99+
receipt.status
100+
? logger.success(`Transaction succeeded: ${tx.hash}`)
101+
: logger.warn(`Transaction failed: ${tx.hash}`)
98102
}
99103
return receipt
100104
}

package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)