Skip to content

Commit a8e7eee

Browse files
authored
Merge pull request #824 from graphprotocol/tmigone/exponential-rebates-rebased
feat(rebates): change query fee rebates mechanism to use exponential formula [rebased]
2 parents c501141 + 31e8121 commit a8e7eee

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

79 files changed

+1787
-1598
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ addresses-local.json
2525
localNetwork.json
2626
arbitrum-addresses-local.json
2727
tx-*.log
28+
addresses-fork.json
2829

2930
# Keys
3031
.keystore

cli/commands/contracts/staking.ts

Lines changed: 0 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -56,15 +56,6 @@ export const closeAllocation = async (cli: CLIEnvironment, cliArgs: CLIArgs): Pr
5656
await sendTransaction(cli.wallet, staking, 'closeAllocation', [allocationID, poi])
5757
}
5858

59-
export const claim = async (cli: CLIEnvironment, cliArgs: CLIArgs): Promise<void> => {
60-
const allocationID = cliArgs.allocationID
61-
const restake = cliArgs.restake
62-
const staking = cli.contracts.Staking
63-
64-
logger.info(`Claiming allocation ${allocationID} with restake = ${restake}...`)
65-
await sendTransaction(cli.wallet, staking, 'claim', [allocationID, restake])
66-
}
67-
6859
export const delegate = async (cli: CLIEnvironment, cliArgs: CLIArgs): Promise<void> => {
6960
const indexer = cliArgs.indexer
7061
const amount = parseGRT(cliArgs.amount)
@@ -229,28 +220,6 @@ export const stakingCommand = {
229220
return closeAllocation(await loadEnv(argv), argv)
230221
},
231222
})
232-
.command({
233-
command: 'claim',
234-
describe: 'Claim rebate',
235-
builder: (yargs: Argv) => {
236-
return yargs
237-
.option('allocationID', {
238-
description: 'The allocation claimed from the rebate pool',
239-
type: 'string',
240-
requiresArg: true,
241-
demandOption: true,
242-
})
243-
.option('restake', {
244-
description: 'True if you are restaking the fees, rather than withdrawing',
245-
type: 'boolean',
246-
requiresArg: true,
247-
demandOption: true,
248-
})
249-
},
250-
handler: async (argv: CLIArgs): Promise<void> => {
251-
return claim(await loadEnv(argv), argv)
252-
},
253-
})
254223
.command({
255224
command: 'delegate',
256225
describe: 'Delegate GRT',

cli/commands/protocol/get.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ export const gettersList = {
1111
// Staking
1212
'staking-slasher': { contract: 'Staking', name: 'slashers' },
1313
'staking-thawing-period': { contract: 'Staking', name: 'thawingPeriod' },
14-
'staking-dispute-epochs': { contract: 'Staking', name: 'channelDisputeEpochs' },
1514
'staking-max-allocation-epochs': { contract: 'Staking', name: 'maxAllocationEpochs' },
1615
'staking-delegation-ratio': { contract: 'Staking', name: 'delegationRatio' },
1716
'staking-delegation-parameters-cooldown': {

cli/commands/protocol/set.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,9 @@ export const settersList = {
1111
// Staking
1212
'staking-slasher': { contract: 'Staking', name: 'setSlasher' },
1313
'staking-thawing-period': { contract: 'Staking', name: 'setThawingPeriod' },
14-
'staking-dispute-epochs': { contract: 'Staking', name: 'setChannelDisputeEpochs' },
1514
'staking-max-allocation-epochs': { contract: 'Staking', name: 'setMaxAllocationEpochs' },
1615
'staking-protocol-percentage': { contract: 'Staking', name: 'setProtocolPercentage' },
17-
'staking-delegation-ratio': { contract: 'Staking', name: 'setDelegationRatio' },
16+
'staking-delegation-parameters': { contract: 'Staking', name: 'setDelegationParameters' },
1817
'staking-delegation-parameters-cooldown': {
1918
contract: 'Staking',
2019
name: 'setDelegationParametersCooldown',

cli/config.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,16 @@ export function getContractConfig(
7777
if (name.startsWith('init')) {
7878
const initList = Object.entries(contractConfig.init) as Array<Array<string>>
7979
for (const [initName, initValue] of initList) {
80+
// This allows passing structs as constructor params
81+
// We can't however inject CLI env variables into struct params
82+
const value =
83+
typeof initValue === 'object'
84+
? Object.values(initValue)
85+
: parseConfigValue(initValue, addressBook, cli)
86+
8087
contractParams.push({
8188
name: initName,
82-
value: parseConfigValue(initValue, addressBook, cli),
89+
value: value,
8390
} as {
8491
name: string
8592
value: string

cli/network.ts

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ export const getChainID = (): number => {
3838

3939
export const hashHexString = (input: string): string => keccak256(`0x${input.replace(/^0x/, '')}`)
4040

41-
type ContractParam = string | BigNumber | number
41+
type ContractParam = string | BigNumber | number | { [key: string]: any }
4242
type DeployResult = {
4343
contract: Contract
4444
creationCodeHash: string
@@ -68,7 +68,12 @@ export const isContractDeployed = async (
6868

6969
if (checkCreationCode) {
7070
const savedCreationCodeHash = addressEntry.creationCodeHash
71-
const creationCodeHash = hashHexString(artifact.bytecode)
71+
let creationCodeHash: string
72+
try {
73+
creationCodeHash = hashHexString(artifact.bytecode)
74+
} catch (error) {
75+
// Noop - assume contract is not deployed
76+
}
7277
if (!savedCreationCodeHash || savedCreationCodeHash !== creationCodeHash) {
7378
logger.warn(`creationCodeHash in our address book doesn't match ${name} artifacts`)
7479
logger.info(`${savedCreationCodeHash} !== ${creationCodeHash}`)
@@ -315,6 +320,34 @@ export const deployContractAndSave = async (
315320
return deployResult.contract
316321
}
317322

323+
export const deployContractImplementationAndSave = async (
324+
name: string,
325+
args: Array<ContractParam>,
326+
sender: Signer,
327+
addressBook: AddressBook,
328+
): Promise<Contract> => {
329+
// Deploy the contract
330+
const deployResult = await deployContract(name, args, sender)
331+
332+
// Save address entry
333+
const entry = addressBook.getEntry(name)
334+
entry.implementation = {
335+
address: deployResult.contract.address,
336+
constructorArgs: args.length === 0 ? undefined : args.map((e) => e.toString()),
337+
creationCodeHash: deployResult.creationCodeHash,
338+
runtimeCodeHash: deployResult.runtimeCodeHash,
339+
txHash: deployResult.txHash,
340+
libraries:
341+
deployResult.libraries && Object.keys(deployResult.libraries).length > 0
342+
? deployResult.libraries
343+
: undefined,
344+
}
345+
addressBook.setEntry(name, entry)
346+
logger.info('> Contract saved to address book')
347+
348+
return deployResult.contract
349+
}
350+
318351
export const deployContractWithProxyAndSave = async (
319352
name: string,
320353
args: Array<ContractParam>,

config/graph.arbitrum-goerli.yml

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -108,12 +108,14 @@ contracts:
108108
thawingPeriod: 6646 # in blocks
109109
protocolPercentage: 10000 # in parts per million
110110
curationPercentage: 100000 # in parts per million
111-
channelDisputeEpochs: 2 # in epochs
112111
maxAllocationEpochs: 4 # in epochs
113112
delegationUnbondingPeriod: 12 # in epochs
114113
delegationRatio: 16 # delegated stake to indexer stake multiplier
115-
rebateAlphaNumerator: 77 # rebateAlphaNumerator / rebateAlphaDenominator
116-
rebateAlphaDenominator: 100 # rebateAlphaNumerator / rebateAlphaDenominator
114+
rebateParameters:
115+
alphaNumerator: 100 # alphaNumerator / alphaDenominator
116+
alphaDenominator: 100 # alphaNumerator / alphaDenominator
117+
lambdaNumerator: 60 # lambdaNumerator / lambdaDenominator
118+
lambdaDenominator: 100 # lambdaNumerator / lambdaDenominator
117119
extensionImpl: "${{StakingExtension.address}}"
118120
calls:
119121
- fn: "setDelegationTaxPercentage"

config/graph.arbitrum-localhost.yml

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
general:
2-
arbitrator: &arbitrator "0x4237154FE0510FdE3575656B60c68a01B9dCDdF8" # Arbitration Council
3-
governor: &governor "0x1257227a2ECA34834940110f7B5e341A5143A2c4" # Graph Council
4-
authority: &authority "0x12B8D08b116E1E3cc29eE9Cf42bB0AA8129C3215" # Authority that signs payment vouchers
5-
availabilityOracle: &availabilityOracle "0x7694a48065f063a767a962610C6717c59F36b445" # Subgraph Availability Oracle
6-
pauseGuardian: &pauseGuardian "0x601060e0DC5349AA55EC73df5A58cB0FC1cD2e3C" # Protocol pause guardian
7-
allocationExchangeOwner: &allocationExchangeOwner "0xbD38F7b67a591A5cc7D642e1026E5095B819d952" # Allocation Exchange owner
2+
arbitrator: &arbitrator "0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0" # Arbitration Council
3+
governor: &governor "0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b" # Graph Council
4+
authority: &authority "0xE11BA2b4D45Eaed5996Cd0823791E0C93114882d" # Authority that signs payment vouchers
5+
availabilityOracle: &availabilityOracle "0xd03ea8624C8C5987235048901fB614fDcA89b117" # Subgraph Availability Oracle
6+
pauseGuardian: &pauseGuardian "0x95cED938F7991cd0dFcb48F0a06a40FA1aF46EBC" # Protocol pause guardian
7+
allocationExchangeOwner: &allocationExchangeOwner "0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9" # Allocation Exchange owner
88

99
contracts:
1010
Controller:
@@ -108,12 +108,14 @@ contracts:
108108
thawingPeriod: 6646 # in blocks
109109
protocolPercentage: 10000 # in parts per million
110110
curationPercentage: 100000 # in parts per million
111-
channelDisputeEpochs: 2 # in epochs
112111
maxAllocationEpochs: 4 # in epochs
113112
delegationUnbondingPeriod: 12 # in epochs
114113
delegationRatio: 16 # delegated stake to indexer stake multiplier
115-
rebateAlphaNumerator: 77 # rebateAlphaNumerator / rebateAlphaDenominator
116-
rebateAlphaDenominator: 100 # rebateAlphaNumerator / rebateAlphaDenominator
114+
rebateParameters:
115+
alphaNumerator: 100 # alphaNumerator / alphaDenominator
116+
alphaDenominator: 100 # alphaNumerator / alphaDenominator
117+
lambdaNumerator: 60 # lambdaNumerator / lambdaDenominator
118+
lambdaDenominator: 100 # lambdaNumerator / lambdaDenominator
117119
extensionImpl: "${{StakingExtension.address}}"
118120
calls:
119121
- fn: "setDelegationTaxPercentage"

config/graph.arbitrum-one.yml

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -108,12 +108,14 @@ contracts:
108108
thawingPeriod: 186092 # in blocks
109109
protocolPercentage: 10000 # in parts per million
110110
curationPercentage: 100000 # in parts per million
111-
channelDisputeEpochs: 7 # in epochs
112111
maxAllocationEpochs: 28 # in epochs
113112
delegationUnbondingPeriod: 28 # in epochs
114113
delegationRatio: 16 # delegated stake to indexer stake multiplier
115-
rebateAlphaNumerator: 77 # rebateAlphaNumerator / rebateAlphaDenominator
116-
rebateAlphaDenominator: 100 # rebateAlphaNumerator / rebateAlphaDenominator
114+
rebateParameters:
115+
alphaNumerator: 100 # alphaNumerator / alphaDenominator
116+
alphaDenominator: 100 # alphaNumerator / alphaDenominator
117+
lambdaNumerator: 60 # lambdaNumerator / lambdaDenominator
118+
lambdaDenominator: 100 # lambdaNumerator / lambdaDenominator
117119
extensionImpl: "${{StakingExtension.address}}"
118120
calls:
119121
- fn: "setDelegationTaxPercentage"

config/graph.goerli.yml

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,12 +111,14 @@ contracts:
111111
thawingPeriod: 6646 # in blocks
112112
protocolPercentage: 10000 # in parts per million
113113
curationPercentage: 100000 # in parts per million
114-
channelDisputeEpochs: 2 # in epochs
115114
maxAllocationEpochs: 4 # in epochs
116115
delegationUnbondingPeriod: 12 # in epochs
117116
delegationRatio: 16 # delegated stake to indexer stake multiplier
118-
rebateAlphaNumerator: 77 # rebateAlphaNumerator / rebateAlphaDenominator
119-
rebateAlphaDenominator: 100 # rebateAlphaNumerator / rebateAlphaDenominator
117+
rebateParameters:
118+
alphaNumerator: 100 # alphaNumerator / alphaDenominator
119+
alphaDenominator: 100 # alphaNumerator / alphaDenominator
120+
lambdaNumerator: 60 # lambdaNumerator / lambdaDenominator
121+
lambdaDenominator: 100 # lambdaNumerator / lambdaDenominator
120122
extensionImpl: "${{StakingExtension.address}}"
121123
calls:
122124
- fn: "setDelegationTaxPercentage"

0 commit comments

Comments
 (0)