-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fee Controller: Track smart vault fee model (#16)
Co-authored-by: Facu Spagnuolo <[email protected]>
- Loading branch information
1 parent
e68a092
commit d16b873
Showing
4 changed files
with
108 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
import { Address, BigInt, log } from '@graphprotocol/graph-ts' | ||
|
||
import { | ||
FeeCollectorSet, | ||
FeeController, | ||
FeePercentageSet, | ||
MaxFeePercentageSet, | ||
} from '../types/FeeController/FeeController' | ||
import { SmartVaultFee } from '../types/schema' | ||
|
||
export function handleFeeCollectorSet(event: FeeCollectorSet): void { | ||
const smartVaultFee = loadOrCreateSmartVaultFee(event.params.smartVault.toHexString(), event.address) | ||
let feeCollector = event.params.collector.toHexString() | ||
feeCollector = event.params.collector.equals(Address.zero()) ? feeCollector : getDefaultFeeCollector(event.address) | ||
smartVaultFee.feeCollector = feeCollector | ||
smartVaultFee.save() | ||
} | ||
|
||
export function handleFeePercentageSet(event: FeePercentageSet): void { | ||
const smartVaultFee = loadOrCreateSmartVaultFee(event.params.smartVault.toHexString(), event.address) | ||
smartVaultFee.maxFeePercentage = event.params.pct | ||
smartVaultFee.save() | ||
} | ||
|
||
export function handleMaxFeePercentageSet(event: MaxFeePercentageSet): void { | ||
const smartVaultFee = loadOrCreateSmartVaultFee(event.params.smartVault.toHexString(), event.address) | ||
smartVaultFee.maxFeePercentage = event.params.maxPct | ||
smartVaultFee.save() | ||
} | ||
|
||
function getDefaultFeeCollector(address: Address): string { | ||
const contract = FeeController.bind(address) | ||
const feeControllerCall = contract.try_defaultFeeCollector() | ||
if (!feeControllerCall.reverted) { | ||
return feeControllerCall.value.toHexString() | ||
} | ||
|
||
log.warning('feeController() call reverted for {}', [address.toHexString()]) | ||
return 'Unknown' | ||
} | ||
|
||
export function loadOrCreateSmartVaultFee(smartVaultFeeId: string, address: Address): SmartVaultFee { | ||
let smartVaultFee = SmartVaultFee.load(address.toHexString()) | ||
|
||
if (smartVaultFee == null) { | ||
smartVaultFee = new SmartVaultFee(smartVaultFeeId) | ||
smartVaultFee.smartVault = smartVaultFeeId | ||
smartVaultFee.feeCollector = getDefaultFeeCollector(address) | ||
smartVaultFee.feePercentage = BigInt.zero() | ||
smartVaultFee.maxFeePercentage = BigInt.zero() | ||
smartVaultFee.save() | ||
} | ||
return smartVaultFee | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters