mirror of
https://github.com/Instadapp/aave-protocol-v2.git
synced 2024-07-29 21:47:30 +00:00
Added tests for debt tokens upgradeability
This commit is contained in:
parent
3247fb8784
commit
7b51fde8e7
|
@ -467,5 +467,17 @@
|
|||
"address": "0x501A498e8FDA589038d6526C2153a9fdc9d8eDD2",
|
||||
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
|
||||
}
|
||||
},
|
||||
"MockStableDebtToken": {
|
||||
"buidlerevm": {
|
||||
"address": "0x6aaF7e94e099291a94ed8E245c90f4766CE9bB7C",
|
||||
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
|
||||
}
|
||||
},
|
||||
"MockVariableDebtToken": {
|
||||
"buidlerevm": {
|
||||
"address": "0x40A939911b662656C0EE71c19B954DB1911Dc8e3",
|
||||
"deployer": "0xc783df8a850f42e7F7e57013759C285caa701eB6"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -258,7 +258,7 @@ export const deployStableDebtToken = async ([
|
|||
symbol,
|
||||
underlyingAsset,
|
||||
poolAddress,
|
||||
]: [string, string, string, tEthereumAddress, tEthereumAddress]) => {
|
||||
]: [string, string, tEthereumAddress, tEthereumAddress]) => {
|
||||
const token = await deployContract<StableDebtToken>(eContractid.StableDebtToken, [
|
||||
poolAddress,
|
||||
underlyingAsset,
|
||||
|
@ -274,7 +274,7 @@ export const deployVariableDebtToken = async ([
|
|||
symbol,
|
||||
underlyingAsset,
|
||||
poolAddress,
|
||||
]: [string, string, string, tEthereumAddress, tEthereumAddress]) => {
|
||||
]: [string, string, tEthereumAddress, tEthereumAddress]) => {
|
||||
const token = await deployContract<VariableDebtToken>(eContractid.VariableDebtToken, [
|
||||
poolAddress,
|
||||
underlyingAsset,
|
||||
|
|
|
@ -38,6 +38,8 @@ export enum eContractid {
|
|||
WalletBalanceProvider = 'WalletBalanceProvider',
|
||||
AToken = 'AToken',
|
||||
MockAToken = 'MockAToken',
|
||||
MockStableDebtToken = 'MockStableDebtToken',
|
||||
MockVariableDebtToken = 'MockVariableDebtToken',
|
||||
AaveProtocolTestHelpers = 'AaveProtocolTestHelpers',
|
||||
IERC20Detailed = 'IERC20Detailed',
|
||||
StableDebtToken = 'StableDebtToken',
|
||||
|
|
|
@ -1,12 +1,17 @@
|
|||
import {expect} from 'chai';
|
||||
import {makeSuite, TestEnv} from './helpers/make-suite';
|
||||
import {ProtocolErrors, eContractid} from '../helpers/types';
|
||||
import {deployGenericAToken, getAToken, deployContract} from '../helpers/contracts-helpers';
|
||||
import {deployGenericAToken, getAToken, deployContract, getContract} from '../helpers/contracts-helpers';
|
||||
import {MockAToken} from '../types/MockAToken';
|
||||
import { MockStableDebtToken } from '../types/MockStableDebtToken';
|
||||
import { MockVariableDebtToken } from '../types/MockVariableDebtToken';
|
||||
|
||||
makeSuite('Upgradeability', (testEnv: TestEnv) => {
|
||||
const {INVALID_POOL_MANAGER_CALLER_MSG} = ProtocolErrors;
|
||||
let newATokenAddress: string;
|
||||
let newStableTokenAddress: string;
|
||||
let newVariableTokenAddress: string;
|
||||
|
||||
|
||||
before('deploying instances', async () => {
|
||||
const {dai, pool} = testEnv;
|
||||
|
@ -17,7 +22,24 @@ makeSuite('Upgradeability', (testEnv: TestEnv) => {
|
|||
'aDAI',
|
||||
]);
|
||||
|
||||
const stableDebtTokenInstance = await deployContract<MockStableDebtToken>(eContractid.MockStableDebtToken, [
|
||||
pool.address,
|
||||
dai.address,
|
||||
'Aave stable debt bearing DAI updated',
|
||||
'stableDebtDAI',
|
||||
]);
|
||||
|
||||
const variableDebtTokenInstance = await deployContract<MockVariableDebtToken>(eContractid.MockVariableDebtToken, [
|
||||
pool.address,
|
||||
dai.address,
|
||||
'Aave variable debt bearing DAI updated',
|
||||
'variableDebtDAI',
|
||||
]);
|
||||
|
||||
newATokenAddress = aTokenInstance.address;
|
||||
newVariableTokenAddress = variableDebtTokenInstance.address;
|
||||
newStableTokenAddress = stableDebtTokenInstance.address;
|
||||
|
||||
});
|
||||
|
||||
it('Tries to update the DAI Atoken implementation with a different address than the lendingPoolManager', async () => {
|
||||
|
@ -39,4 +61,53 @@ makeSuite('Upgradeability', (testEnv: TestEnv) => {
|
|||
|
||||
expect(tokenName).to.be.eq('Aave Interest bearing DAI updated', 'Invalid token name');
|
||||
});
|
||||
|
||||
it('Tries to update the DAI Stable debt token implementation with a different address than the lendingPoolManager', async () => {
|
||||
const {dai, configurator, users} = testEnv;
|
||||
|
||||
await expect(
|
||||
configurator.connect(users[1].signer).updateStableDebtToken(dai.address, newStableTokenAddress)
|
||||
).to.be.revertedWith(INVALID_POOL_MANAGER_CALLER_MSG);
|
||||
});
|
||||
|
||||
it('Upgrades the DAI stable debt token implementation ', async () => {
|
||||
const {dai, configurator, pool} = testEnv;
|
||||
|
||||
const name = await (await getAToken(newATokenAddress)).name();
|
||||
|
||||
await configurator.updateStableDebtToken(dai.address, newStableTokenAddress);
|
||||
|
||||
const {stableDebtTokenAddress} = await pool.getReserveTokensAddresses(dai.address);
|
||||
|
||||
const debtToken = await getContract<MockStableDebtToken>(eContractid.MockStableDebtToken, stableDebtTokenAddress);
|
||||
|
||||
const tokenName = await debtToken.name();
|
||||
|
||||
expect(tokenName).to.be.eq('Aave stable debt bearing DAI updated', 'Invalid token name');
|
||||
});
|
||||
|
||||
it('Tries to update the DAI variable debt token implementation with a different address than the lendingPoolManager', async () => {
|
||||
const {dai, configurator, users} = testEnv;
|
||||
|
||||
await expect(
|
||||
configurator.connect(users[1].signer).updateVariableDebtToken(dai.address, newVariableTokenAddress)
|
||||
).to.be.revertedWith(INVALID_POOL_MANAGER_CALLER_MSG);
|
||||
});
|
||||
|
||||
it('Upgrades the DAI variable debt token implementation ', async () => {
|
||||
const {dai, configurator, pool} = testEnv;
|
||||
|
||||
const name = await (await getAToken(newATokenAddress)).name();
|
||||
|
||||
await configurator.updateVariableDebtToken(dai.address, newVariableTokenAddress);
|
||||
|
||||
const {variableDebtTokenAddress} = await pool.getReserveTokensAddresses(dai.address);
|
||||
|
||||
const debtToken = await getContract<MockStableDebtToken>(eContractid.MockStableDebtToken, variableDebtTokenAddress);
|
||||
|
||||
const tokenName = await debtToken.name();
|
||||
|
||||
expect(tokenName).to.be.eq('Aave variable debt bearing DAI updated', 'Invalid token name');
|
||||
});
|
||||
|
||||
});
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -27,6 +27,16 @@ const _abi = [
|
|||
internalType: "address",
|
||||
name: "_underlyingAssetAddress",
|
||||
type: "address"
|
||||
},
|
||||
{
|
||||
internalType: "string",
|
||||
name: "_name",
|
||||
type: "string"
|
||||
},
|
||||
{
|
||||
internalType: "string",
|
||||
name: "_symbol",
|
||||
type: "string"
|
||||
}
|
||||
],
|
||||
stateMutability: "nonpayable",
|
||||
|
|
File diff suppressed because one or more lines are too long
84
types/LendingPoolConfigurator.d.ts
vendored
84
types/LendingPoolConfigurator.d.ts
vendored
|
@ -101,9 +101,25 @@ interface LendingPoolConfiguratorInterface extends Interface {
|
|||
updateAToken: TypedFunctionDescription<{
|
||||
encode([_reserve, _implementation]: [string, string]): string;
|
||||
}>;
|
||||
|
||||
updateStableDebtToken: TypedFunctionDescription<{
|
||||
encode([_reserve, _implementation]: [string, string]): string;
|
||||
}>;
|
||||
|
||||
updateVariableDebtToken: TypedFunctionDescription<{
|
||||
encode([_reserve, _implementation]: [string, string]): string;
|
||||
}>;
|
||||
};
|
||||
|
||||
events: {
|
||||
ATokenUpgraded: TypedEventDescription<{
|
||||
encodeTopics([_reserve, _proxy, _implementation]: [
|
||||
null,
|
||||
null,
|
||||
null
|
||||
]): string[];
|
||||
}>;
|
||||
|
||||
BorrowingDisabledOnReserve: TypedEventDescription<{
|
||||
encodeTopics([_reserve]: [string | null]): string[];
|
||||
}>;
|
||||
|
@ -171,6 +187,14 @@ interface LendingPoolConfiguratorInterface extends Interface {
|
|||
encodeTopics([_reserve]: [string | null]): string[];
|
||||
}>;
|
||||
|
||||
StableDebtTokenUpgraded: TypedEventDescription<{
|
||||
encodeTopics([_reserve, _proxy, _implementation]: [
|
||||
null,
|
||||
null,
|
||||
null
|
||||
]): string[];
|
||||
}>;
|
||||
|
||||
StableRateDisabledOnReserve: TypedEventDescription<{
|
||||
encodeTopics([_reserve]: [string | null]): string[];
|
||||
}>;
|
||||
|
@ -178,6 +202,14 @@ interface LendingPoolConfiguratorInterface extends Interface {
|
|||
StableRateEnabledOnReserve: TypedEventDescription<{
|
||||
encodeTopics([_reserve]: [string | null]): string[];
|
||||
}>;
|
||||
|
||||
VariableDebtTokenUpgraded: TypedEventDescription<{
|
||||
encodeTopics([_reserve, _proxy, _implementation]: [
|
||||
null,
|
||||
null,
|
||||
null
|
||||
]): string[];
|
||||
}>;
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -313,6 +345,18 @@ export class LendingPoolConfigurator extends Contract {
|
|||
_implementation: string,
|
||||
overrides?: TransactionOverrides
|
||||
): Promise<ContractTransaction>;
|
||||
|
||||
updateStableDebtToken(
|
||||
_reserve: string,
|
||||
_implementation: string,
|
||||
overrides?: TransactionOverrides
|
||||
): Promise<ContractTransaction>;
|
||||
|
||||
updateVariableDebtToken(
|
||||
_reserve: string,
|
||||
_implementation: string,
|
||||
overrides?: TransactionOverrides
|
||||
): Promise<ContractTransaction>;
|
||||
};
|
||||
|
||||
CONFIGURATOR_REVISION(): Promise<BigNumber>;
|
||||
|
@ -426,7 +470,25 @@ export class LendingPoolConfigurator extends Contract {
|
|||
overrides?: TransactionOverrides
|
||||
): Promise<ContractTransaction>;
|
||||
|
||||
updateStableDebtToken(
|
||||
_reserve: string,
|
||||
_implementation: string,
|
||||
overrides?: TransactionOverrides
|
||||
): Promise<ContractTransaction>;
|
||||
|
||||
updateVariableDebtToken(
|
||||
_reserve: string,
|
||||
_implementation: string,
|
||||
overrides?: TransactionOverrides
|
||||
): Promise<ContractTransaction>;
|
||||
|
||||
filters: {
|
||||
ATokenUpgraded(
|
||||
_reserve: null,
|
||||
_proxy: null,
|
||||
_implementation: null
|
||||
): EventFilter;
|
||||
|
||||
BorrowingDisabledOnReserve(_reserve: string | null): EventFilter;
|
||||
|
||||
BorrowingEnabledOnReserve(
|
||||
|
@ -475,9 +537,21 @@ export class LendingPoolConfigurator extends Contract {
|
|||
|
||||
ReserveUnfreezed(_reserve: string | null): EventFilter;
|
||||
|
||||
StableDebtTokenUpgraded(
|
||||
_reserve: null,
|
||||
_proxy: null,
|
||||
_implementation: null
|
||||
): EventFilter;
|
||||
|
||||
StableRateDisabledOnReserve(_reserve: string | null): EventFilter;
|
||||
|
||||
StableRateEnabledOnReserve(_reserve: string | null): EventFilter;
|
||||
|
||||
VariableDebtTokenUpgraded(
|
||||
_reserve: null,
|
||||
_proxy: null,
|
||||
_implementation: null
|
||||
): EventFilter;
|
||||
};
|
||||
|
||||
estimate: {
|
||||
|
@ -549,5 +623,15 @@ export class LendingPoolConfigurator extends Contract {
|
|||
unfreezeReserve(_reserve: string): Promise<BigNumber>;
|
||||
|
||||
updateAToken(_reserve: string, _implementation: string): Promise<BigNumber>;
|
||||
|
||||
updateStableDebtToken(
|
||||
_reserve: string,
|
||||
_implementation: string
|
||||
): Promise<BigNumber>;
|
||||
|
||||
updateVariableDebtToken(
|
||||
_reserve: string,
|
||||
_implementation: string
|
||||
): Promise<BigNumber>;
|
||||
};
|
||||
}
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
390
types/MockStableDebtToken.d.ts
vendored
Normal file
390
types/MockStableDebtToken.d.ts
vendored
Normal file
|
@ -0,0 +1,390 @@
|
|||
/* Generated by ts-generator ver. 0.0.8 */
|
||||
/* tslint:disable */
|
||||
|
||||
import { Contract, ContractTransaction, EventFilter, Signer } from "ethers";
|
||||
import { Listener, Provider } from "ethers/providers";
|
||||
import { Arrayish, BigNumber, BigNumberish, Interface } from "ethers/utils";
|
||||
import {
|
||||
TransactionOverrides,
|
||||
TypedEventDescription,
|
||||
TypedFunctionDescription
|
||||
} from ".";
|
||||
|
||||
interface MockStableDebtTokenInterface extends Interface {
|
||||
functions: {
|
||||
DEBT_TOKEN_REVISION: TypedFunctionDescription<{ encode([]: []): string }>;
|
||||
|
||||
allowance: TypedFunctionDescription<{
|
||||
encode([owner, spender]: [string, string]): string;
|
||||
}>;
|
||||
|
||||
approve: TypedFunctionDescription<{
|
||||
encode([spender, _amount]: [string, BigNumberish]): string;
|
||||
}>;
|
||||
|
||||
balanceOf: TypedFunctionDescription<{
|
||||
encode([account]: [string]): string;
|
||||
}>;
|
||||
|
||||
burn: TypedFunctionDescription<{
|
||||
encode([_user, _amount]: [string, BigNumberish]): string;
|
||||
}>;
|
||||
|
||||
decimals: TypedFunctionDescription<{ encode([]: []): string }>;
|
||||
|
||||
decreaseAllowance: TypedFunctionDescription<{
|
||||
encode([spender, subtractedValue]: [string, BigNumberish]): string;
|
||||
}>;
|
||||
|
||||
getAverageStableRate: TypedFunctionDescription<{ encode([]: []): string }>;
|
||||
|
||||
getUserLastUpdated: TypedFunctionDescription<{
|
||||
encode([_user]: [string]): string;
|
||||
}>;
|
||||
|
||||
getUserStableRate: TypedFunctionDescription<{
|
||||
encode([_user]: [string]): string;
|
||||
}>;
|
||||
|
||||
increaseAllowance: TypedFunctionDescription<{
|
||||
encode([spender, addedValue]: [string, BigNumberish]): string;
|
||||
}>;
|
||||
|
||||
initialize: TypedFunctionDescription<{
|
||||
encode([_decimals, _name, _symbol]: [
|
||||
BigNumberish,
|
||||
string,
|
||||
string
|
||||
]): string;
|
||||
}>;
|
||||
|
||||
mint: TypedFunctionDescription<{
|
||||
encode([_user, _amount, _rate]: [
|
||||
string,
|
||||
BigNumberish,
|
||||
BigNumberish
|
||||
]): string;
|
||||
}>;
|
||||
|
||||
name: TypedFunctionDescription<{ encode([]: []): string }>;
|
||||
|
||||
principalBalanceOf: TypedFunctionDescription<{
|
||||
encode([_user]: [string]): string;
|
||||
}>;
|
||||
|
||||
symbol: TypedFunctionDescription<{ encode([]: []): string }>;
|
||||
|
||||
totalSupply: TypedFunctionDescription<{ encode([]: []): string }>;
|
||||
|
||||
transfer: TypedFunctionDescription<{
|
||||
encode([recipient, _amount]: [string, BigNumberish]): string;
|
||||
}>;
|
||||
|
||||
transferFrom: TypedFunctionDescription<{
|
||||
encode([sender, recipient, _amount]: [
|
||||
string,
|
||||
string,
|
||||
BigNumberish
|
||||
]): string;
|
||||
}>;
|
||||
|
||||
underlyingAssetAddress: TypedFunctionDescription<{
|
||||
encode([]: []): string;
|
||||
}>;
|
||||
};
|
||||
|
||||
events: {
|
||||
Approval: TypedEventDescription<{
|
||||
encodeTopics([owner, spender, value]: [
|
||||
string | null,
|
||||
string | null,
|
||||
null
|
||||
]): string[];
|
||||
}>;
|
||||
|
||||
Transfer: TypedEventDescription<{
|
||||
encodeTopics([from, to, value]: [
|
||||
string | null,
|
||||
string | null,
|
||||
null
|
||||
]): string[];
|
||||
}>;
|
||||
|
||||
burnDebt: TypedEventDescription<{
|
||||
encodeTopics([
|
||||
_user,
|
||||
_amount,
|
||||
_previousBalance,
|
||||
_currentBalance,
|
||||
_balanceIncrease
|
||||
]: [null, null, null, null, null]): string[];
|
||||
}>;
|
||||
|
||||
mintDebt: TypedEventDescription<{
|
||||
encodeTopics([
|
||||
_user,
|
||||
_amount,
|
||||
_previousBalance,
|
||||
_currentBalance,
|
||||
_balanceIncrease,
|
||||
_newRate
|
||||
]: [null, null, null, null, null, null]): string[];
|
||||
}>;
|
||||
};
|
||||
}
|
||||
|
||||
export class MockStableDebtToken extends Contract {
|
||||
connect(signerOrProvider: Signer | Provider | string): MockStableDebtToken;
|
||||
attach(addressOrName: string): MockStableDebtToken;
|
||||
deployed(): Promise<MockStableDebtToken>;
|
||||
|
||||
on(event: EventFilter | string, listener: Listener): MockStableDebtToken;
|
||||
once(event: EventFilter | string, listener: Listener): MockStableDebtToken;
|
||||
addListener(
|
||||
eventName: EventFilter | string,
|
||||
listener: Listener
|
||||
): MockStableDebtToken;
|
||||
removeAllListeners(eventName: EventFilter | string): MockStableDebtToken;
|
||||
removeListener(eventName: any, listener: Listener): MockStableDebtToken;
|
||||
|
||||
interface: MockStableDebtTokenInterface;
|
||||
|
||||
functions: {
|
||||
DEBT_TOKEN_REVISION(): Promise<BigNumber>;
|
||||
|
||||
allowance(owner: string, spender: string): Promise<BigNumber>;
|
||||
|
||||
approve(
|
||||
spender: string,
|
||||
_amount: BigNumberish,
|
||||
overrides?: TransactionOverrides
|
||||
): Promise<ContractTransaction>;
|
||||
|
||||
balanceOf(account: string): Promise<BigNumber>;
|
||||
|
||||
burn(
|
||||
_user: string,
|
||||
_amount: BigNumberish,
|
||||
overrides?: TransactionOverrides
|
||||
): Promise<ContractTransaction>;
|
||||
|
||||
decimals(): Promise<number>;
|
||||
|
||||
decreaseAllowance(
|
||||
spender: string,
|
||||
subtractedValue: BigNumberish,
|
||||
overrides?: TransactionOverrides
|
||||
): Promise<ContractTransaction>;
|
||||
|
||||
getAverageStableRate(): Promise<BigNumber>;
|
||||
|
||||
getUserLastUpdated(_user: string): Promise<number>;
|
||||
|
||||
getUserStableRate(_user: string): Promise<BigNumber>;
|
||||
|
||||
increaseAllowance(
|
||||
spender: string,
|
||||
addedValue: BigNumberish,
|
||||
overrides?: TransactionOverrides
|
||||
): Promise<ContractTransaction>;
|
||||
|
||||
initialize(
|
||||
_decimals: BigNumberish,
|
||||
_name: string,
|
||||
_symbol: string,
|
||||
overrides?: TransactionOverrides
|
||||
): Promise<ContractTransaction>;
|
||||
|
||||
mint(
|
||||
_user: string,
|
||||
_amount: BigNumberish,
|
||||
_rate: BigNumberish,
|
||||
overrides?: TransactionOverrides
|
||||
): Promise<ContractTransaction>;
|
||||
|
||||
name(): Promise<string>;
|
||||
|
||||
principalBalanceOf(_user: string): Promise<BigNumber>;
|
||||
|
||||
symbol(): Promise<string>;
|
||||
|
||||
totalSupply(): Promise<BigNumber>;
|
||||
|
||||
transfer(
|
||||
recipient: string,
|
||||
_amount: BigNumberish,
|
||||
overrides?: TransactionOverrides
|
||||
): Promise<ContractTransaction>;
|
||||
|
||||
transferFrom(
|
||||
sender: string,
|
||||
recipient: string,
|
||||
_amount: BigNumberish,
|
||||
overrides?: TransactionOverrides
|
||||
): Promise<ContractTransaction>;
|
||||
|
||||
underlyingAssetAddress(): Promise<string>;
|
||||
};
|
||||
|
||||
DEBT_TOKEN_REVISION(): Promise<BigNumber>;
|
||||
|
||||
allowance(owner: string, spender: string): Promise<BigNumber>;
|
||||
|
||||
approve(
|
||||
spender: string,
|
||||
_amount: BigNumberish,
|
||||
overrides?: TransactionOverrides
|
||||
): Promise<ContractTransaction>;
|
||||
|
||||
balanceOf(account: string): Promise<BigNumber>;
|
||||
|
||||
burn(
|
||||
_user: string,
|
||||
_amount: BigNumberish,
|
||||
overrides?: TransactionOverrides
|
||||
): Promise<ContractTransaction>;
|
||||
|
||||
decimals(): Promise<number>;
|
||||
|
||||
decreaseAllowance(
|
||||
spender: string,
|
||||
subtractedValue: BigNumberish,
|
||||
overrides?: TransactionOverrides
|
||||
): Promise<ContractTransaction>;
|
||||
|
||||
getAverageStableRate(): Promise<BigNumber>;
|
||||
|
||||
getUserLastUpdated(_user: string): Promise<number>;
|
||||
|
||||
getUserStableRate(_user: string): Promise<BigNumber>;
|
||||
|
||||
increaseAllowance(
|
||||
spender: string,
|
||||
addedValue: BigNumberish,
|
||||
overrides?: TransactionOverrides
|
||||
): Promise<ContractTransaction>;
|
||||
|
||||
initialize(
|
||||
_decimals: BigNumberish,
|
||||
_name: string,
|
||||
_symbol: string,
|
||||
overrides?: TransactionOverrides
|
||||
): Promise<ContractTransaction>;
|
||||
|
||||
mint(
|
||||
_user: string,
|
||||
_amount: BigNumberish,
|
||||
_rate: BigNumberish,
|
||||
overrides?: TransactionOverrides
|
||||
): Promise<ContractTransaction>;
|
||||
|
||||
name(): Promise<string>;
|
||||
|
||||
principalBalanceOf(_user: string): Promise<BigNumber>;
|
||||
|
||||
symbol(): Promise<string>;
|
||||
|
||||
totalSupply(): Promise<BigNumber>;
|
||||
|
||||
transfer(
|
||||
recipient: string,
|
||||
_amount: BigNumberish,
|
||||
overrides?: TransactionOverrides
|
||||
): Promise<ContractTransaction>;
|
||||
|
||||
transferFrom(
|
||||
sender: string,
|
||||
recipient: string,
|
||||
_amount: BigNumberish,
|
||||
overrides?: TransactionOverrides
|
||||
): Promise<ContractTransaction>;
|
||||
|
||||
underlyingAssetAddress(): Promise<string>;
|
||||
|
||||
filters: {
|
||||
Approval(
|
||||
owner: string | null,
|
||||
spender: string | null,
|
||||
value: null
|
||||
): EventFilter;
|
||||
|
||||
Transfer(from: string | null, to: string | null, value: null): EventFilter;
|
||||
|
||||
burnDebt(
|
||||
_user: null,
|
||||
_amount: null,
|
||||
_previousBalance: null,
|
||||
_currentBalance: null,
|
||||
_balanceIncrease: null
|
||||
): EventFilter;
|
||||
|
||||
mintDebt(
|
||||
_user: null,
|
||||
_amount: null,
|
||||
_previousBalance: null,
|
||||
_currentBalance: null,
|
||||
_balanceIncrease: null,
|
||||
_newRate: null
|
||||
): EventFilter;
|
||||
};
|
||||
|
||||
estimate: {
|
||||
DEBT_TOKEN_REVISION(): Promise<BigNumber>;
|
||||
|
||||
allowance(owner: string, spender: string): Promise<BigNumber>;
|
||||
|
||||
approve(spender: string, _amount: BigNumberish): Promise<BigNumber>;
|
||||
|
||||
balanceOf(account: string): Promise<BigNumber>;
|
||||
|
||||
burn(_user: string, _amount: BigNumberish): Promise<BigNumber>;
|
||||
|
||||
decimals(): Promise<BigNumber>;
|
||||
|
||||
decreaseAllowance(
|
||||
spender: string,
|
||||
subtractedValue: BigNumberish
|
||||
): Promise<BigNumber>;
|
||||
|
||||
getAverageStableRate(): Promise<BigNumber>;
|
||||
|
||||
getUserLastUpdated(_user: string): Promise<BigNumber>;
|
||||
|
||||
getUserStableRate(_user: string): Promise<BigNumber>;
|
||||
|
||||
increaseAllowance(
|
||||
spender: string,
|
||||
addedValue: BigNumberish
|
||||
): Promise<BigNumber>;
|
||||
|
||||
initialize(
|
||||
_decimals: BigNumberish,
|
||||
_name: string,
|
||||
_symbol: string
|
||||
): Promise<BigNumber>;
|
||||
|
||||
mint(
|
||||
_user: string,
|
||||
_amount: BigNumberish,
|
||||
_rate: BigNumberish
|
||||
): Promise<BigNumber>;
|
||||
|
||||
name(): Promise<BigNumber>;
|
||||
|
||||
principalBalanceOf(_user: string): Promise<BigNumber>;
|
||||
|
||||
symbol(): Promise<BigNumber>;
|
||||
|
||||
totalSupply(): Promise<BigNumber>;
|
||||
|
||||
transfer(recipient: string, _amount: BigNumberish): Promise<BigNumber>;
|
||||
|
||||
transferFrom(
|
||||
sender: string,
|
||||
recipient: string,
|
||||
_amount: BigNumberish
|
||||
): Promise<BigNumber>;
|
||||
|
||||
underlyingAssetAddress(): Promise<BigNumber>;
|
||||
};
|
||||
}
|
600
types/MockStableDebtTokenFactory.ts
Normal file
600
types/MockStableDebtTokenFactory.ts
Normal file
File diff suppressed because one or more lines are too long
362
types/MockVariableDebtToken.d.ts
vendored
Normal file
362
types/MockVariableDebtToken.d.ts
vendored
Normal file
|
@ -0,0 +1,362 @@
|
|||
/* Generated by ts-generator ver. 0.0.8 */
|
||||
/* tslint:disable */
|
||||
|
||||
import { Contract, ContractTransaction, EventFilter, Signer } from "ethers";
|
||||
import { Listener, Provider } from "ethers/providers";
|
||||
import { Arrayish, BigNumber, BigNumberish, Interface } from "ethers/utils";
|
||||
import {
|
||||
TransactionOverrides,
|
||||
TypedEventDescription,
|
||||
TypedFunctionDescription
|
||||
} from ".";
|
||||
|
||||
interface MockVariableDebtTokenInterface extends Interface {
|
||||
functions: {
|
||||
DEBT_TOKEN_REVISION: TypedFunctionDescription<{ encode([]: []): string }>;
|
||||
|
||||
allowance: TypedFunctionDescription<{
|
||||
encode([owner, spender]: [string, string]): string;
|
||||
}>;
|
||||
|
||||
approve: TypedFunctionDescription<{
|
||||
encode([spender, _amount]: [string, BigNumberish]): string;
|
||||
}>;
|
||||
|
||||
balanceOf: TypedFunctionDescription<{ encode([_user]: [string]): string }>;
|
||||
|
||||
burn: TypedFunctionDescription<{
|
||||
encode([_user, _amount]: [string, BigNumberish]): string;
|
||||
}>;
|
||||
|
||||
decimals: TypedFunctionDescription<{ encode([]: []): string }>;
|
||||
|
||||
decreaseAllowance: TypedFunctionDescription<{
|
||||
encode([spender, subtractedValue]: [string, BigNumberish]): string;
|
||||
}>;
|
||||
|
||||
getUserIndex: TypedFunctionDescription<{
|
||||
encode([_user]: [string]): string;
|
||||
}>;
|
||||
|
||||
increaseAllowance: TypedFunctionDescription<{
|
||||
encode([spender, addedValue]: [string, BigNumberish]): string;
|
||||
}>;
|
||||
|
||||
initialize: TypedFunctionDescription<{
|
||||
encode([_decimals, _name, _symbol]: [
|
||||
BigNumberish,
|
||||
string,
|
||||
string
|
||||
]): string;
|
||||
}>;
|
||||
|
||||
mint: TypedFunctionDescription<{
|
||||
encode([_user, _amount]: [string, BigNumberish]): string;
|
||||
}>;
|
||||
|
||||
name: TypedFunctionDescription<{ encode([]: []): string }>;
|
||||
|
||||
principalBalanceOf: TypedFunctionDescription<{
|
||||
encode([_user]: [string]): string;
|
||||
}>;
|
||||
|
||||
symbol: TypedFunctionDescription<{ encode([]: []): string }>;
|
||||
|
||||
totalSupply: TypedFunctionDescription<{ encode([]: []): string }>;
|
||||
|
||||
transfer: TypedFunctionDescription<{
|
||||
encode([recipient, _amount]: [string, BigNumberish]): string;
|
||||
}>;
|
||||
|
||||
transferFrom: TypedFunctionDescription<{
|
||||
encode([sender, recipient, _amount]: [
|
||||
string,
|
||||
string,
|
||||
BigNumberish
|
||||
]): string;
|
||||
}>;
|
||||
|
||||
underlyingAssetAddress: TypedFunctionDescription<{
|
||||
encode([]: []): string;
|
||||
}>;
|
||||
};
|
||||
|
||||
events: {
|
||||
Approval: TypedEventDescription<{
|
||||
encodeTopics([owner, spender, value]: [
|
||||
string | null,
|
||||
string | null,
|
||||
null
|
||||
]): string[];
|
||||
}>;
|
||||
|
||||
Transfer: TypedEventDescription<{
|
||||
encodeTopics([from, to, value]: [
|
||||
string | null,
|
||||
string | null,
|
||||
null
|
||||
]): string[];
|
||||
}>;
|
||||
|
||||
burnDebt: TypedEventDescription<{
|
||||
encodeTopics([
|
||||
_user,
|
||||
_amount,
|
||||
_previousBalance,
|
||||
_currentBalance,
|
||||
_balanceIncrease,
|
||||
_index
|
||||
]: [null, null, null, null, null, null]): string[];
|
||||
}>;
|
||||
|
||||
mintDebt: TypedEventDescription<{
|
||||
encodeTopics([
|
||||
_user,
|
||||
_amount,
|
||||
_previousBalance,
|
||||
_currentBalance,
|
||||
_balanceIncrease,
|
||||
_index
|
||||
]: [null, null, null, null, null, null]): string[];
|
||||
}>;
|
||||
};
|
||||
}
|
||||
|
||||
export class MockVariableDebtToken extends Contract {
|
||||
connect(signerOrProvider: Signer | Provider | string): MockVariableDebtToken;
|
||||
attach(addressOrName: string): MockVariableDebtToken;
|
||||
deployed(): Promise<MockVariableDebtToken>;
|
||||
|
||||
on(event: EventFilter | string, listener: Listener): MockVariableDebtToken;
|
||||
once(event: EventFilter | string, listener: Listener): MockVariableDebtToken;
|
||||
addListener(
|
||||
eventName: EventFilter | string,
|
||||
listener: Listener
|
||||
): MockVariableDebtToken;
|
||||
removeAllListeners(eventName: EventFilter | string): MockVariableDebtToken;
|
||||
removeListener(eventName: any, listener: Listener): MockVariableDebtToken;
|
||||
|
||||
interface: MockVariableDebtTokenInterface;
|
||||
|
||||
functions: {
|
||||
DEBT_TOKEN_REVISION(): Promise<BigNumber>;
|
||||
|
||||
allowance(owner: string, spender: string): Promise<BigNumber>;
|
||||
|
||||
approve(
|
||||
spender: string,
|
||||
_amount: BigNumberish,
|
||||
overrides?: TransactionOverrides
|
||||
): Promise<ContractTransaction>;
|
||||
|
||||
balanceOf(_user: string): Promise<BigNumber>;
|
||||
|
||||
burn(
|
||||
_user: string,
|
||||
_amount: BigNumberish,
|
||||
overrides?: TransactionOverrides
|
||||
): Promise<ContractTransaction>;
|
||||
|
||||
decimals(): Promise<number>;
|
||||
|
||||
decreaseAllowance(
|
||||
spender: string,
|
||||
subtractedValue: BigNumberish,
|
||||
overrides?: TransactionOverrides
|
||||
): Promise<ContractTransaction>;
|
||||
|
||||
getUserIndex(_user: string): Promise<BigNumber>;
|
||||
|
||||
increaseAllowance(
|
||||
spender: string,
|
||||
addedValue: BigNumberish,
|
||||
overrides?: TransactionOverrides
|
||||
): Promise<ContractTransaction>;
|
||||
|
||||
initialize(
|
||||
_decimals: BigNumberish,
|
||||
_name: string,
|
||||
_symbol: string,
|
||||
overrides?: TransactionOverrides
|
||||
): Promise<ContractTransaction>;
|
||||
|
||||
mint(
|
||||
_user: string,
|
||||
_amount: BigNumberish,
|
||||
overrides?: TransactionOverrides
|
||||
): Promise<ContractTransaction>;
|
||||
|
||||
name(): Promise<string>;
|
||||
|
||||
principalBalanceOf(_user: string): Promise<BigNumber>;
|
||||
|
||||
symbol(): Promise<string>;
|
||||
|
||||
totalSupply(): Promise<BigNumber>;
|
||||
|
||||
transfer(
|
||||
recipient: string,
|
||||
_amount: BigNumberish,
|
||||
overrides?: TransactionOverrides
|
||||
): Promise<ContractTransaction>;
|
||||
|
||||
transferFrom(
|
||||
sender: string,
|
||||
recipient: string,
|
||||
_amount: BigNumberish,
|
||||
overrides?: TransactionOverrides
|
||||
): Promise<ContractTransaction>;
|
||||
|
||||
underlyingAssetAddress(): Promise<string>;
|
||||
};
|
||||
|
||||
DEBT_TOKEN_REVISION(): Promise<BigNumber>;
|
||||
|
||||
allowance(owner: string, spender: string): Promise<BigNumber>;
|
||||
|
||||
approve(
|
||||
spender: string,
|
||||
_amount: BigNumberish,
|
||||
overrides?: TransactionOverrides
|
||||
): Promise<ContractTransaction>;
|
||||
|
||||
balanceOf(_user: string): Promise<BigNumber>;
|
||||
|
||||
burn(
|
||||
_user: string,
|
||||
_amount: BigNumberish,
|
||||
overrides?: TransactionOverrides
|
||||
): Promise<ContractTransaction>;
|
||||
|
||||
decimals(): Promise<number>;
|
||||
|
||||
decreaseAllowance(
|
||||
spender: string,
|
||||
subtractedValue: BigNumberish,
|
||||
overrides?: TransactionOverrides
|
||||
): Promise<ContractTransaction>;
|
||||
|
||||
getUserIndex(_user: string): Promise<BigNumber>;
|
||||
|
||||
increaseAllowance(
|
||||
spender: string,
|
||||
addedValue: BigNumberish,
|
||||
overrides?: TransactionOverrides
|
||||
): Promise<ContractTransaction>;
|
||||
|
||||
initialize(
|
||||
_decimals: BigNumberish,
|
||||
_name: string,
|
||||
_symbol: string,
|
||||
overrides?: TransactionOverrides
|
||||
): Promise<ContractTransaction>;
|
||||
|
||||
mint(
|
||||
_user: string,
|
||||
_amount: BigNumberish,
|
||||
overrides?: TransactionOverrides
|
||||
): Promise<ContractTransaction>;
|
||||
|
||||
name(): Promise<string>;
|
||||
|
||||
principalBalanceOf(_user: string): Promise<BigNumber>;
|
||||
|
||||
symbol(): Promise<string>;
|
||||
|
||||
totalSupply(): Promise<BigNumber>;
|
||||
|
||||
transfer(
|
||||
recipient: string,
|
||||
_amount: BigNumberish,
|
||||
overrides?: TransactionOverrides
|
||||
): Promise<ContractTransaction>;
|
||||
|
||||
transferFrom(
|
||||
sender: string,
|
||||
recipient: string,
|
||||
_amount: BigNumberish,
|
||||
overrides?: TransactionOverrides
|
||||
): Promise<ContractTransaction>;
|
||||
|
||||
underlyingAssetAddress(): Promise<string>;
|
||||
|
||||
filters: {
|
||||
Approval(
|
||||
owner: string | null,
|
||||
spender: string | null,
|
||||
value: null
|
||||
): EventFilter;
|
||||
|
||||
Transfer(from: string | null, to: string | null, value: null): EventFilter;
|
||||
|
||||
burnDebt(
|
||||
_user: null,
|
||||
_amount: null,
|
||||
_previousBalance: null,
|
||||
_currentBalance: null,
|
||||
_balanceIncrease: null,
|
||||
_index: null
|
||||
): EventFilter;
|
||||
|
||||
mintDebt(
|
||||
_user: null,
|
||||
_amount: null,
|
||||
_previousBalance: null,
|
||||
_currentBalance: null,
|
||||
_balanceIncrease: null,
|
||||
_index: null
|
||||
): EventFilter;
|
||||
};
|
||||
|
||||
estimate: {
|
||||
DEBT_TOKEN_REVISION(): Promise<BigNumber>;
|
||||
|
||||
allowance(owner: string, spender: string): Promise<BigNumber>;
|
||||
|
||||
approve(spender: string, _amount: BigNumberish): Promise<BigNumber>;
|
||||
|
||||
balanceOf(_user: string): Promise<BigNumber>;
|
||||
|
||||
burn(_user: string, _amount: BigNumberish): Promise<BigNumber>;
|
||||
|
||||
decimals(): Promise<BigNumber>;
|
||||
|
||||
decreaseAllowance(
|
||||
spender: string,
|
||||
subtractedValue: BigNumberish
|
||||
): Promise<BigNumber>;
|
||||
|
||||
getUserIndex(_user: string): Promise<BigNumber>;
|
||||
|
||||
increaseAllowance(
|
||||
spender: string,
|
||||
addedValue: BigNumberish
|
||||
): Promise<BigNumber>;
|
||||
|
||||
initialize(
|
||||
_decimals: BigNumberish,
|
||||
_name: string,
|
||||
_symbol: string
|
||||
): Promise<BigNumber>;
|
||||
|
||||
mint(_user: string, _amount: BigNumberish): Promise<BigNumber>;
|
||||
|
||||
name(): Promise<BigNumber>;
|
||||
|
||||
principalBalanceOf(_user: string): Promise<BigNumber>;
|
||||
|
||||
symbol(): Promise<BigNumber>;
|
||||
|
||||
totalSupply(): Promise<BigNumber>;
|
||||
|
||||
transfer(recipient: string, _amount: BigNumberish): Promise<BigNumber>;
|
||||
|
||||
transferFrom(
|
||||
sender: string,
|
||||
recipient: string,
|
||||
_amount: BigNumberish
|
||||
): Promise<BigNumber>;
|
||||
|
||||
underlyingAssetAddress(): Promise<BigNumber>;
|
||||
};
|
||||
}
|
573
types/MockVariableDebtTokenFactory.ts
Normal file
573
types/MockVariableDebtTokenFactory.ts
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -134,4 +134,4 @@ const _abi = [
|
|||
];
|
||||
|
||||
const _bytecode =
|
||||
"0x608060405234801561001057600080fd5b506040516108bc3803806108bc8339818101604052602081101561003357600080fd5b5051600080546001600160a01b039092166001600160a01b0319909216919091179055610857806100656000396000f3fe6080604052600436106100385760003560e01c80639e3c930914610083578063b59b28ef1461014f578063f7888aec146102d35761007e565b3661007e5761004633610320565b61007c576040805162461bcd60e51b8152602060048201526002602482015261191960f11b604482015290519081900360640190fd5b005b600080fd5b34801561008f57600080fd5b506100b6600480360360208110156100a657600080fd5b50356001600160a01b031661035c565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156100fa5781810151838201526020016100e2565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015610139578181015183820152602001610121565b5050505090500194505050505060405180910390f35b34801561015b57600080fd5b506102836004803603604081101561017257600080fd5b81019060208101813564010000000081111561018d57600080fd5b82018360208201111561019f57600080fd5b803590602001918460208302840111640100000000831117156101c157600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561021157600080fd5b82018360208201111561022357600080fd5b8035906020019184602083028401116401000000008311171561024557600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061064d945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102bf5781810151838201526020016102a7565b505050509050019250505060405180910390f35b3480156102df57600080fd5b5061030e600480360360408110156102f657600080fd5b506001600160a01b0381358116916020013516610777565b60408051918252519081900360200190f35b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061035457508115155b949350505050565b60608060008060009054906101000a90046001600160a01b03166001600160a01b0316630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156103ae57600080fd5b505afa1580156103c2573d6000803e3d6000fd5b505050506040513d60208110156103d857600080fd5b505160408051630240bc6b60e21b815290519192506060916001600160a01b03841691630902f1ac916004808301926000929190829003018186803b15801561042057600080fd5b505afa158015610434573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561045d57600080fd5b810190808051604051939291908464010000000082111561047d57600080fd5b90830190602082018581111561049257600080fd5b82518660208202830111640100000000821117156104af57600080fd5b82525081516020918201928201910280838360005b838110156104dc5781810151838201526020016104c4565b5050505090500160405250505090506060815167ffffffffffffffff8111801561050557600080fd5b5060405190808252806020026020018201604052801561052f578160200160208202803683370190505b50905060005b8251811015610641576000846001600160a01b0316633e15014185848151811061055b57fe5b60200260200101516040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b031681526020019150506101406040518083038186803b1580156105aa57600080fd5b505afa1580156105be573d6000803e3d6000fd5b505050506040513d6101408110156105d557600080fd5b5061010001519050806106025760008383815181106105f057fe5b60200260200101818152505050610639565b61061f8885848151811061061257fe5b6020026020010151610777565b83838151811061062b57fe5b602002602001018181525050505b600101610535565b50909350915050915091565b606080825184510267ffffffffffffffff8111801561066b57600080fd5b50604051908082528060200260200182016040528015610695578160200160208202803683370190505b50905060005b845181101561076d5760005b84518110156107645760008551830290506106dd8683815181106106c757fe5b60200260200101516001600160a01b0316610320565b61071e576040805162461bcd60e51b815260206004820152600d60248201526c24a72b20a624a22faa27a5a2a760991b604482015290519081900360640190fd5b61074187848151811061072d57fe5b602002602001015187848151811061061257fe5b848383018151811061074f57fe5b602002602001018181525050506001016106a7565b5060010161069b565b5090505b92915050565b600061078b826001600160a01b0316610320565b1561081957816001600160a01b03166370a08231846040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156107e657600080fd5b505afa1580156107fa573d6000803e3d6000fd5b505050506040513d602081101561081057600080fd5b50519050610771565b50600061077156fea26469706673582212200c49fc45bf8d6aedaf3cd09ab09eb29f7e718ec1bbd6342feaa0ae4422f04e7464736f6c63430006080033";
|
||||
"0x608060405234801561001057600080fd5b506040516108bc3803806108bc8339818101604052602081101561003357600080fd5b5051600080546001600160a01b039092166001600160a01b0319909216919091179055610857806100656000396000f3fe6080604052600436106100385760003560e01c80639e3c930914610083578063b59b28ef1461014f578063f7888aec146102d35761007e565b3661007e5761004633610320565b61007c576040805162461bcd60e51b8152602060048201526002602482015261191960f11b604482015290519081900360640190fd5b005b600080fd5b34801561008f57600080fd5b506100b6600480360360208110156100a657600080fd5b50356001600160a01b031661035c565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156100fa5781810151838201526020016100e2565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015610139578181015183820152602001610121565b5050505090500194505050505060405180910390f35b34801561015b57600080fd5b506102836004803603604081101561017257600080fd5b81019060208101813564010000000081111561018d57600080fd5b82018360208201111561019f57600080fd5b803590602001918460208302840111640100000000831117156101c157600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561021157600080fd5b82018360208201111561022357600080fd5b8035906020019184602083028401116401000000008311171561024557600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061064d945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102bf5781810151838201526020016102a7565b505050509050019250505060405180910390f35b3480156102df57600080fd5b5061030e600480360360408110156102f657600080fd5b506001600160a01b0381358116916020013516610777565b60408051918252519081900360200190f35b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061035457508115155b949350505050565b60608060008060009054906101000a90046001600160a01b03166001600160a01b0316630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156103ae57600080fd5b505afa1580156103c2573d6000803e3d6000fd5b505050506040513d60208110156103d857600080fd5b505160408051630240bc6b60e21b815290519192506060916001600160a01b03841691630902f1ac916004808301926000929190829003018186803b15801561042057600080fd5b505afa158015610434573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561045d57600080fd5b810190808051604051939291908464010000000082111561047d57600080fd5b90830190602082018581111561049257600080fd5b82518660208202830111640100000000821117156104af57600080fd5b82525081516020918201928201910280838360005b838110156104dc5781810151838201526020016104c4565b5050505090500160405250505090506060815167ffffffffffffffff8111801561050557600080fd5b5060405190808252806020026020018201604052801561052f578160200160208202803683370190505b50905060005b8251811015610641576000846001600160a01b0316633e15014185848151811061055b57fe5b60200260200101516040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b031681526020019150506101406040518083038186803b1580156105aa57600080fd5b505afa1580156105be573d6000803e3d6000fd5b505050506040513d6101408110156105d557600080fd5b5061010001519050806106025760008383815181106105f057fe5b60200260200101818152505050610639565b61061f8885848151811061061257fe5b6020026020010151610777565b83838151811061062b57fe5b602002602001018181525050505b600101610535565b50909350915050915091565b606080825184510267ffffffffffffffff8111801561066b57600080fd5b50604051908082528060200260200182016040528015610695578160200160208202803683370190505b50905060005b845181101561076d5760005b84518110156107645760008551830290506106dd8683815181106106c757fe5b60200260200101516001600160a01b0316610320565b61071e576040805162461bcd60e51b815260206004820152600d60248201526c24a72b20a624a22faa27a5a2a760991b604482015290519081900360640190fd5b61074187848151811061072d57fe5b602002602001015187848151811061061257fe5b848383018151811061074f57fe5b602002602001018181525050506001016106a7565b5060010161069b565b5090505b92915050565b600061078b826001600160a01b0316610320565b1561081957816001600160a01b03166370a08231846040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156107e657600080fd5b505afa1580156107fa573d6000803e3d6000fd5b505050506040513d602081101561081057600080fd5b50519050610771565b50600061077156fea264697066735822122034fc927b8c23c0caa3ecab84fba4ad99d8060c0991fa524bf75ee93544a094eb64736f6c63430006080033";
|
||||
|
|
Loading…
Reference in New Issue
Block a user