forked from bgd-labs/aave-proposals-v3
-
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.
✨ Onboard AUSD Aave v3 Avalanche (bgd-labs#530)
* feat: USDS BR update * ✨ add ausd aave v3 avalanche * ✨ update md file * 🐛 fix AUSD_LM_ADMIN * Revert "feat: USDS BR update" This reverts commit 4fda313. * 🐛 fix Collateral Enabled md to false * 🔧 change seed amount for 100 AUSD * ✨ generate test + fix issue wrong collector transfer * ⬆️ update aave-helpers lib * ✅ test passed + update diff * Revert "⬆️ update aave-helpers lib" This reverts commit b4b5022. * 🔥 revert lib update * 🐛 update chainlink price feed for capo --------- Co-authored-by: Rozengarden <[email protected]>
- Loading branch information
1 parent
5c967e8
commit b368d23
Showing
6 changed files
with
402 additions
and
0 deletions.
There are no files selected for viewing
112 changes: 112 additions & 0 deletions
112
...anche_OnboardAUSD_20241125_before_AaveV3Avalanche_OnboardAUSD_20241125_after.md
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,112 @@ | ||
## Reserve changes | ||
|
||
### Reserves added | ||
|
||
#### AUSD ([0x00000000eFE302BEAA2b3e6e1b18d08D69a9012a](https://snowtrace.io/address/0x00000000eFE302BEAA2b3e6e1b18d08D69a9012a)) | ||
|
||
| description | value | | ||
| --- | --- | | ||
| decimals | 6 | | ||
| isActive | true | | ||
| isFrozen | false | | ||
| supplyCap | 19,000,000 AUSD | | ||
| borrowCap | 17,400,000 AUSD | | ||
| debtCeiling | 0 $ [0] | | ||
| isSiloed | false | | ||
| isFlashloanable | true | | ||
| oracle | [0x83f32c0882B12Ef16214c417efF11FD9e764bf34](https://snowtrace.io/address/0x83f32c0882B12Ef16214c417efF11FD9e764bf34) | | ||
| oracleDecimals | 8 | | ||
| oracleDescription | Capped AUSD / USD | | ||
| oracleLatestAnswer | 0.99925546 | | ||
| usageAsCollateralEnabled | false | | ||
| ltv | 0 % [0] | | ||
| liquidationThreshold | 0 % [0] | | ||
| liquidationBonus | 0 % | | ||
| liquidationProtocolFee | 0 % [0] | | ||
| reserveFactor | 10 % [1000] | | ||
| aToken | [0x724dc807b04555b71ed48a6896b6F41593b8C637](https://snowtrace.io/address/0x724dc807b04555b71ed48a6896b6F41593b8C637) | | ||
| aTokenImpl | [0x1E81af09001aD208BDa68FF022544dB2102A752d](https://snowtrace.io/address/0x1E81af09001aD208BDa68FF022544dB2102A752d) | | ||
| variableDebtToken | [0xDC1fad70953Bb3918592b6fCc374fe05F5811B6a](https://snowtrace.io/address/0xDC1fad70953Bb3918592b6fCc374fe05F5811B6a) | | ||
| variableDebtTokenImpl | [0xa0d9C1E9E48Ca30c8d8C3B5D69FF5dc1f6DFfC24](https://snowtrace.io/address/0xa0d9C1E9E48Ca30c8d8C3B5D69FF5dc1f6DFfC24) | | ||
| borrowingEnabled | true | | ||
| isBorrowableInIsolation | false | | ||
| interestRateStrategy | [0xCe1C5509f2f4d755aA64B8D135B15ec6F12a93da](https://snowtrace.io/address/0xCe1C5509f2f4d755aA64B8D135B15ec6F12a93da) | | ||
| aTokenName | Aave Avalanche AUSD | | ||
| aTokenSymbol | aAvaAUSD | | ||
| aTokenUnderlyingBalance | 100 AUSD [100000000] | | ||
| id | 12 | | ||
| isPaused | false | | ||
| variableDebtTokenName | Aave Avalanche Variable Debt AUSD | | ||
| variableDebtTokenSymbol | variableDebtAvaAUSD | | ||
| virtualAccountingActive | true | | ||
| virtualBalance | 100 AUSD [100000000] | | ||
| optimalUsageRatio | 90 % | | ||
| maxVariableBorrowRate | 80.5 % | | ||
| baseVariableBorrowRate | 0 % | | ||
| variableRateSlope1 | 5.5 % | | ||
| variableRateSlope2 | 75 % | | ||
| interestRate | ![ir](https://dash.onaave.com/api/static?variableRateSlope1=55000000000000000000000000&variableRateSlope2=750000000000000000000000000&optimalUsageRatio=900000000000000000000000000&baseVariableBorrowRate=0&maxVariableBorrowRate=805000000000000000000000000) | | ||
|
||
|
||
## Raw diff | ||
|
||
```json | ||
{ | ||
"reserves": { | ||
"0x00000000eFE302BEAA2b3e6e1b18d08D69a9012a": { | ||
"from": null, | ||
"to": { | ||
"aToken": "0x724dc807b04555b71ed48a6896b6F41593b8C637", | ||
"aTokenImpl": "0x1E81af09001aD208BDa68FF022544dB2102A752d", | ||
"aTokenName": "Aave Avalanche AUSD", | ||
"aTokenSymbol": "aAvaAUSD", | ||
"aTokenUnderlyingBalance": "100000000", | ||
"borrowCap": 17400000, | ||
"borrowingEnabled": true, | ||
"debtCeiling": 0, | ||
"decimals": 6, | ||
"id": 12, | ||
"interestRateStrategy": "0xCe1C5509f2f4d755aA64B8D135B15ec6F12a93da", | ||
"isActive": true, | ||
"isBorrowableInIsolation": false, | ||
"isFlashloanable": true, | ||
"isFrozen": false, | ||
"isPaused": false, | ||
"isSiloed": false, | ||
"liquidationBonus": 0, | ||
"liquidationProtocolFee": 0, | ||
"liquidationThreshold": 0, | ||
"ltv": 0, | ||
"oracle": "0x83f32c0882B12Ef16214c417efF11FD9e764bf34", | ||
"oracleDecimals": 8, | ||
"oracleDescription": "Capped AUSD / USD", | ||
"oracleLatestAnswer": "99925546", | ||
"reserveFactor": 1000, | ||
"supplyCap": 19000000, | ||
"symbol": "AUSD", | ||
"underlying": "0x00000000eFE302BEAA2b3e6e1b18d08D69a9012a", | ||
"usageAsCollateralEnabled": false, | ||
"variableDebtToken": "0xDC1fad70953Bb3918592b6fCc374fe05F5811B6a", | ||
"variableDebtTokenImpl": "0xa0d9C1E9E48Ca30c8d8C3B5D69FF5dc1f6DFfC24", | ||
"variableDebtTokenName": "Aave Avalanche Variable Debt AUSD", | ||
"variableDebtTokenSymbol": "variableDebtAvaAUSD", | ||
"virtualAccountingActive": true, | ||
"virtualBalance": "100000000" | ||
} | ||
} | ||
}, | ||
"strategies": { | ||
"0x00000000eFE302BEAA2b3e6e1b18d08D69a9012a": { | ||
"from": null, | ||
"to": { | ||
"address": "0xCe1C5509f2f4d755aA64B8D135B15ec6F12a93da", | ||
"baseVariableBorrowRate": "0", | ||
"maxVariableBorrowRate": "805000000000000000000000000", | ||
"optimalUsageRatio": "900000000000000000000000000", | ||
"variableRateSlope1": "55000000000000000000000000", | ||
"variableRateSlope2": "750000000000000000000000000" | ||
} | ||
} | ||
} | ||
} | ||
``` |
72 changes: 72 additions & 0 deletions
72
src/20241125_AaveV3Avalanche_OnboardAUSD/AaveV3Avalanche_OnboardAUSD_20241125.sol
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,72 @@ | ||
// SPDX-License-Identifier: MIT | ||
pragma solidity ^0.8.0; | ||
|
||
import {AaveV3Avalanche} from 'aave-address-book/AaveV3Avalanche.sol'; | ||
import {GovernanceV3Avalanche} from 'aave-address-book/GovernanceV3Avalanche.sol'; | ||
import {AaveV3PayloadAvalanche} from 'aave-helpers/src/v3-config-engine/AaveV3PayloadAvalanche.sol'; | ||
import {EngineFlags} from 'aave-v3-origin/contracts/extensions/v3-config-engine/EngineFlags.sol'; | ||
import {IAaveV3ConfigEngine} from 'aave-v3-origin/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol'; | ||
import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol'; | ||
import {SafeERC20} from 'solidity-utils/contracts/oz-common/SafeERC20.sol'; | ||
import {IEmissionManager} from 'aave-v3-origin/contracts/rewards/interfaces/IEmissionManager.sol'; | ||
/** | ||
* @title Onboard AUSD | ||
* @author ACI | ||
* - Snapshot: https://snapshot.org/#/aave.eth/proposal/0x021b40c7042ce770c0ce1ee5ff63591c132a9f0f12e3a1cb92fa209299793dec | ||
* - Discussion: https://governance.aave.com/t/arfc-onboard-ausd-to-aave-v3-on-avalanche/19689 | ||
*/ | ||
contract AaveV3Avalanche_OnboardAUSD_20241125 is AaveV3PayloadAvalanche { | ||
using SafeERC20 for IERC20; | ||
|
||
address public constant AUSD = 0x00000000eFE302BEAA2b3e6e1b18d08D69a9012a; | ||
uint256 public constant AUSD_SEED_AMOUNT = 100e6; | ||
address public constant AUSD_ADMIN = 0xac140648435d03f784879cd789130F22Ef588Fcd; | ||
|
||
function _postExecute() internal override { | ||
// transfer AUSD seed amount from collector to executor (fix the mistakes of wrong AUSD seed amount reicipient) | ||
AaveV3Avalanche.COLLECTOR.transfer( | ||
AUSD, | ||
GovernanceV3Avalanche.EXECUTOR_LVL_1, | ||
AUSD_SEED_AMOUNT | ||
); | ||
|
||
IERC20(AUSD).forceApprove(address(AaveV3Avalanche.POOL), AUSD_SEED_AMOUNT); | ||
AaveV3Avalanche.POOL.supply(AUSD, AUSD_SEED_AMOUNT, address(AaveV3Avalanche.COLLECTOR), 0); | ||
|
||
(address aAUSD, , ) = AaveV3Avalanche.AAVE_PROTOCOL_DATA_PROVIDER.getReserveTokensAddresses( | ||
AUSD | ||
); | ||
IEmissionManager(AaveV3Avalanche.EMISSION_MANAGER).setEmissionAdmin(AUSD, AUSD_ADMIN); | ||
IEmissionManager(AaveV3Avalanche.EMISSION_MANAGER).setEmissionAdmin(aAUSD, AUSD_ADMIN); | ||
} | ||
|
||
function newListings() public pure override returns (IAaveV3ConfigEngine.Listing[] memory) { | ||
IAaveV3ConfigEngine.Listing[] memory listings = new IAaveV3ConfigEngine.Listing[](1); | ||
|
||
listings[0] = IAaveV3ConfigEngine.Listing({ | ||
asset: AUSD, | ||
assetSymbol: 'AUSD', | ||
priceFeed: 0x83f32c0882B12Ef16214c417efF11FD9e764bf34, | ||
enabledToBorrow: EngineFlags.ENABLED, | ||
borrowableInIsolation: EngineFlags.DISABLED, | ||
withSiloedBorrowing: EngineFlags.DISABLED, | ||
flashloanable: EngineFlags.ENABLED, | ||
ltv: 0, | ||
liqThreshold: 0, | ||
liqBonus: 0, | ||
reserveFactor: 10_00, | ||
supplyCap: 19_000_000, | ||
borrowCap: 17_400_000, | ||
debtCeiling: 0, | ||
liqProtocolFee: 0, | ||
rateStrategyParams: IAaveV3ConfigEngine.InterestRateInputData({ | ||
optimalUsageRatio: 90_00, | ||
baseVariableBorrowRate: 0, | ||
variableRateSlope1: 5_50, | ||
variableRateSlope2: 75_00 | ||
}) | ||
}); | ||
|
||
return listings; | ||
} | ||
} |
54 changes: 54 additions & 0 deletions
54
src/20241125_AaveV3Avalanche_OnboardAUSD/AaveV3Avalanche_OnboardAUSD_20241125.t.sol
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 @@ | ||
// SPDX-License-Identifier: MIT | ||
pragma solidity ^0.8.0; | ||
|
||
import {GovV3Helpers} from 'aave-helpers/src/GovV3Helpers.sol'; | ||
import {AaveV3Avalanche} from 'aave-address-book/AaveV3Avalanche.sol'; | ||
import {IERC20} from 'solidity-utils/contracts/oz-common/interfaces/IERC20.sol'; | ||
import {IEmissionManager} from 'aave-v3-origin/contracts/rewards/interfaces/IEmissionManager.sol'; | ||
|
||
import 'forge-std/Test.sol'; | ||
import {ProtocolV3TestBase, ReserveConfig} from 'aave-helpers/src/ProtocolV3TestBase.sol'; | ||
import {AaveV3Avalanche_OnboardAUSD_20241125} from './AaveV3Avalanche_OnboardAUSD_20241125.sol'; | ||
|
||
/** | ||
* @dev Test for AaveV3Avalanche_OnboardAUSD_20241125 | ||
* command: FOUNDRY_PROFILE=avalanche forge test --match-path=src/20241125_AaveV3Avalanche_OnboardAUSD/AaveV3Avalanche_OnboardAUSD_20241125.t.sol -vv | ||
*/ | ||
contract AaveV3Avalanche_OnboardAUSD_20241125_Test is ProtocolV3TestBase { | ||
AaveV3Avalanche_OnboardAUSD_20241125 internal proposal; | ||
|
||
function setUp() public { | ||
vm.createSelectFork(vm.rpcUrl('avalanche'), 54627124); | ||
proposal = new AaveV3Avalanche_OnboardAUSD_20241125(); | ||
} | ||
|
||
/** | ||
* @dev executes the generic test suite including e2e and config snapshots | ||
*/ | ||
function test_defaultProposalExecution() public { | ||
defaultTest('AaveV3Avalanche_OnboardAUSD_20241125', AaveV3Avalanche.POOL, address(proposal)); | ||
} | ||
|
||
function test_collectorHasAUSDFunds() public { | ||
GovV3Helpers.executePayload(vm, address(proposal)); | ||
(address aTokenAddress, , ) = AaveV3Avalanche | ||
.AAVE_PROTOCOL_DATA_PROVIDER | ||
.getReserveTokensAddresses(proposal.AUSD()); | ||
assertGe(IERC20(aTokenAddress).balanceOf(address(AaveV3Avalanche.COLLECTOR)), 100 * 10 ** 6); | ||
} | ||
|
||
function test_AUSDAdmin() public { | ||
GovV3Helpers.executePayload(vm, address(proposal)); | ||
(address aAUSD, , ) = AaveV3Avalanche.AAVE_PROTOCOL_DATA_PROVIDER.getReserveTokensAddresses( | ||
proposal.AUSD() | ||
); | ||
assertEq( | ||
IEmissionManager(AaveV3Avalanche.EMISSION_MANAGER).getEmissionAdmin(proposal.AUSD()), | ||
proposal.AUSD_ADMIN() | ||
); | ||
assertEq( | ||
IEmissionManager(AaveV3Avalanche.EMISSION_MANAGER).getEmissionAdmin(aAUSD), | ||
proposal.AUSD_ADMIN() | ||
); | ||
} | ||
} |
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,59 @@ | ||
--- | ||
title: "Onboard AUSD" | ||
author: "ACI" | ||
discussions: "https://governance.aave.com/t/arfc-onboard-ausd-to-aave-v3-on-avalanche/19689" | ||
snapshot: "https://snapshot.org/#/aave.eth/proposal/0x021b40c7042ce770c0ce1ee5ff63591c132a9f0f12e3a1cb92fa209299793dec" | ||
--- | ||
|
||
## Simple Summary | ||
|
||
This proposal seeks to onboard AUSD, a secure digital dollar backed 1:1 by USD fiat, to Aave V3 on Avalanche. AUSD, issued by Agora, serves as a stable and liquid alternative to USDT and USDC. With a growing AUM and robust liquidity, AUSD will enhance Aave’s liquidity pool, offering users a reliable and efficient stablecoin option with strong institutional backing. | ||
|
||
## Motivation | ||
|
||
Agora offers AUSD, a digital dollar minted 1:1 with USD fiat. AUSD is designed to be a secure digital currency, utilizing one of the world’s largest custodian banks to safeguard assets. AUSD enables users to participate in trading, lending and payments. It is the most cost-efficient stablecoin to transact with due to its gas-optimized smart contract, making it ideal for traders and payments. | ||
|
||
Agora operates an open partnership model, allowing collaboration with a diverse range of customers who meet KYB (Know Your Business) requirements and operate in jurisdictions we can serve. This approach contrasts with single partnership models (eg. Exchange-Backed Stables), ensuring that AUSD can be widely adopted across different ecosystems, providing liquidity and stability without conflicts of interest. | ||
|
||
AUSD is currently available on Ethereum, Avalanche, Sui and Mantle, garnering $70+ million in TVL and $12+ million in daily DEX volume since contract deployment. The reserve assets are managed by VanEck ($100B+ asset manager) and custodied with one of the largest global banks, ensuring security and safety. AUSD’s unique value proposition also includes zero-fee minting and redemption facilities, making it an attractive asset for all ecosystem participants. | ||
|
||
By integrating AUSD into Aave, users will gain access to a stable, liquid asset that supports trading, lending, and other decentralized finance activities. This integration aligns with Aave’s mission to decentralize finance while offering secure and reliable stablecoin options. | ||
|
||
## Specification | ||
|
||
The table below illustrates the configured risk parameters for **AUSD** | ||
|
||
| Parameter | Value | | ||
| ------------------------- | -----------------------------------------: | | ||
| Isolation Mode | false | | ||
| Borrowable | ENABLED | | ||
| Collateral Enabled | false | | ||
| Supply Cap (AUSD) | 19,000,000 | | ||
| Borrow Cap (AUSD) | 17,400,000 | | ||
| Debt Ceiling | USD 0 | | ||
| LTV | 0 % | | ||
| LT | 0 % | | ||
| Liquidation Bonus | 0 % | | ||
| Liquidation Protocol Fee | 0 % | | ||
| Reserve Factor | 10 % | | ||
| Base Variable Borrow Rate | 0 % | | ||
| Variable Slope 1 | 5.5 % | | ||
| Variable Slope 2 | 75 % | | ||
| Uoptimal | 90 % | | ||
| Flashloanable | ENABLED | | ||
| Siloed Borrowing | DISABLED | | ||
| Borrowable in Isolation | DISABLED | | ||
| Oracle | 0x83f32c0882B12Ef16214c417efF11FD9e764bf34 | | ||
|
||
Additionaly [0xac140648435d03f784879cd789130F22Ef588Fcd](https://snowtrace.io/address/0xac140648435d03f784879cd789130F22Ef588Fcd) has been set as the emission admin for AUSD and the corresponding aToken. | ||
|
||
## References | ||
|
||
- Implementation: [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20241125_AaveV3Avalanche_OnboardAUSD/AaveV3Avalanche_OnboardAUSD_20241125.sol) | ||
- Tests: [AaveV3Avalanche](https://github.com/bgd-labs/aave-proposals-v3/blob/main/src/20241125_AaveV3Avalanche_OnboardAUSD/AaveV3Avalanche_OnboardAUSD_20241125.t.sol) | ||
- [Snapshot](https://snapshot.org/#/aave.eth/proposal/0x021b40c7042ce770c0ce1ee5ff63591c132a9f0f12e3a1cb92fa209299793dec) | ||
- [Discussion](https://governance.aave.com/t/arfc-onboard-ausd-to-aave-v3-on-avalanche/19689) | ||
|
||
## Copyright | ||
|
||
Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). |
57 changes: 57 additions & 0 deletions
57
src/20241125_AaveV3Avalanche_OnboardAUSD/OnboardAUSD_20241125.s.sol
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,57 @@ | ||
// SPDX-License-Identifier: MIT | ||
pragma solidity ^0.8.0; | ||
|
||
import {GovV3Helpers, IPayloadsControllerCore, PayloadsControllerUtils} from 'aave-helpers/src/GovV3Helpers.sol'; | ||
import {GovernanceV3Ethereum} from 'aave-address-book/GovernanceV3Ethereum.sol'; | ||
import {EthereumScript, AvalancheScript} from 'solidity-utils/contracts/utils/ScriptUtils.sol'; | ||
import {AaveV3Avalanche_OnboardAUSD_20241125} from './AaveV3Avalanche_OnboardAUSD_20241125.sol'; | ||
|
||
/** | ||
* @dev Deploy Avalanche | ||
* deploy-command: make deploy-ledger contract=src/20241125_AaveV3Avalanche_OnboardAUSD/OnboardAUSD_20241125.s.sol:DeployAvalanche chain=avalanche | ||
* verify-command: FOUNDRY_PROFILE=avalanche npx catapulta-verify -b broadcast/OnboardAUSD_20241125.s.sol/43114/run-latest.json | ||
*/ | ||
contract DeployAvalanche is AvalancheScript { | ||
function run() external broadcast { | ||
// deploy payloads | ||
address payload0 = GovV3Helpers.deployDeterministic( | ||
type(AaveV3Avalanche_OnboardAUSD_20241125).creationCode | ||
); | ||
|
||
// compose action | ||
IPayloadsControllerCore.ExecutionAction[] | ||
memory actions = new IPayloadsControllerCore.ExecutionAction[](1); | ||
actions[0] = GovV3Helpers.buildAction(payload0); | ||
|
||
// register action at payloadsController | ||
GovV3Helpers.createPayload(actions); | ||
} | ||
} | ||
|
||
/** | ||
* @dev Create Proposal | ||
* command: make deploy-ledger contract=src/20241125_AaveV3Avalanche_OnboardAUSD/OnboardAUSD_20241125.s.sol:CreateProposal chain=mainnet | ||
*/ | ||
contract CreateProposal is EthereumScript { | ||
function run() external { | ||
// create payloads | ||
PayloadsControllerUtils.Payload[] memory payloads = new PayloadsControllerUtils.Payload[](1); | ||
|
||
// compose actions for validation | ||
IPayloadsControllerCore.ExecutionAction[] | ||
memory actionsAvalanche = new IPayloadsControllerCore.ExecutionAction[](1); | ||
actionsAvalanche[0] = GovV3Helpers.buildAction( | ||
type(AaveV3Avalanche_OnboardAUSD_20241125).creationCode | ||
); | ||
payloads[0] = GovV3Helpers.buildAvalanchePayload(vm, actionsAvalanche); | ||
|
||
// create proposal | ||
vm.startBroadcast(); | ||
GovV3Helpers.createProposal( | ||
vm, | ||
payloads, | ||
GovernanceV3Ethereum.VOTING_PORTAL_ETH_POL, | ||
GovV3Helpers.ipfsHashFile(vm, 'src/20241125_AaveV3Avalanche_OnboardAUSD/OnboardAUSD.md') | ||
); | ||
} | ||
} |
Oops, something went wrong.