diff --git a/examples/polygonMusd.svg b/examples/polygonMusd.svg index 1d7113ea..579381e3 100644 --- a/examples/polygonMusd.svg +++ b/examples/polygonMusd.svg @@ -1,1111 +1,1087 @@ - - - + + UmlClassDiagram - + 0 - -Initializable - -Private: -   initialized: bool -   initializing: bool -   ______gap: uint256[] - -Private: -    isConstructor(): bool -Public: -    <<modifier>> initializer() + +Initializable + +Private: +   initialized: bool +   initializing: bool +   ______gap: uint256[50] + +Private: +    isConstructor(): bool +Public: +    <<modifier>> initializer() 1 - -<<Abstract>> -Context - - - -Internal: -    _msgSender(): (payable: address) -    _msgData(): bytes + +<<Abstract>> +Context + +Internal: +    _msgSender(): (payable: address) +    _msgData(): bytes 2 - -<<Interface>> -IERC20 - - - -External: -     totalSupply(): uint256 -     balanceOf(account: address): uint256 -     transfer(recipient: address, amount: uint256): bool -     allowance(owner: address, spender: address): uint256 -     approve(spender: address, amount: uint256): bool -     transferFrom(sender: address, recipient: address, amount: uint256): bool -Public: -    <<event>> Transfer(from: address, to: address, value: uint256) -    <<event>> Approval(owner: address, spender: address, value: uint256) + +<<Interface>> +IERC20 + +External: +     totalSupply(): uint256 +     balanceOf(account: address): uint256 +     transfer(recipient: address, amount: uint256): bool +     allowance(owner: address, spender: address): uint256 +     approve(spender: address, amount: uint256): bool +     transferFrom(sender: address, recipient: address, amount: uint256): bool +Public: +    <<event>> Transfer(from: address, to: address, value: uint256) +    <<event>> Approval(owner: address, spender: address, value: uint256) 3 - -ERC205 - -Private: -   _balances: mapping(address=>uint256) -   _allowances: mapping(address=>mapping(address=>uint256)) -   _totalSupply: uint256 - -Internal: -    _transfer(sender: address, recipient: address, amount: uint256) -    _mint(account: address, amount: uint256) -    _burn(account: address, amount: uint256) -    _approve(owner: address, spender: address, amount: uint256) -Public: -    totalSupply(): uint256 -    balanceOf(account: address): uint256 -    transfer(recipient: address, amount: uint256): bool -    allowance(owner: address, spender: address): uint256 -    approve(spender: address, amount: uint256): bool -    transferFrom(sender: address, recipient: address, amount: uint256): bool -    increaseAllowance(spender: address, addedValue: uint256): bool -    decreaseAllowance(spender: address, subtractedValue: uint256): bool + +ERC205 + +Private: +   _balances: mapping(address=>uint256) +   _allowances: mapping(address=>mapping(address=>uint256)) +   _totalSupply: uint256 + +Internal: +    _transfer(sender: address, recipient: address, amount: uint256) +    _mint(account: address, amount: uint256) +    _burn(account: address, amount: uint256) +    _approve(owner: address, spender: address, amount: uint256) +Public: +    totalSupply(): uint256 +    balanceOf(account: address): uint256 +    transfer(recipient: address, amount: uint256): bool +    allowance(owner: address, spender: address): uint256 +    approve(spender: address, amount: uint256): bool +    transferFrom(sender: address, recipient: address, amount: uint256): bool +    increaseAllowance(spender: address, addedValue: uint256): bool +    decreaseAllowance(spender: address, subtractedValue: uint256): bool 3->1 - - + + 3->2 - - + + 4 - -<<Abstract>> -InitializableERC20Detailed - -Private: -   _name: string -   _symbol: string -   _decimals: uint8 - -Internal: -    _initialize(nameArg: string, symbolArg: string, decimalsArg: uint8) -Public: -    name(): string -    symbol(): string -    decimals(): uint8 + +<<Abstract>> +InitializableERC20Detailed + +Private: +   _name: string +   _symbol: string +   _decimals: uint8 + +Internal: +    _initialize(nameArg: string, symbolArg: string, decimalsArg: uint8) +Public: +    name(): string +    symbol(): string +    decimals(): uint8 4->2 - - + + 5 - -<<Abstract>> -InitializableToken - - - -Internal: -    _initialize(_nameArg: string, _symbolArg: string) + +<<Abstract>> +InitializableToken + +Internal: +    _initialize(_nameArg: string, _symbolArg: string) 5->3 - - + + 5->4 - - + + 6 - -ModuleKeys - -Internal: -   KEY_GOVERNANCE: bytes32 -   KEY_STAKING: bytes32 -   KEY_PROXY_ADMIN: bytes32 -   KEY_ORACLE_HUB: bytes32 -   KEY_MANAGER: bytes32 -   KEY_RECOLLATERALISER: bytes32 -   KEY_META_TOKEN: bytes32 -   KEY_SAVINGS_MANAGER: bytes32 -   KEY_LIQUIDATOR: bytes32 -   KEY_INTEREST_VALIDATOR: bytes32 - - + +ModuleKeys + +Internal: +   KEY_GOVERNANCE: bytes32 +   KEY_STAKING: bytes32 +   KEY_PROXY_ADMIN: bytes32 +   KEY_ORACLE_HUB: bytes32 +   KEY_MANAGER: bytes32 +   KEY_RECOLLATERALISER: bytes32 +   KEY_META_TOKEN: bytes32 +   KEY_SAVINGS_MANAGER: bytes32 +   KEY_LIQUIDATOR: bytes32 +   KEY_INTEREST_VALIDATOR: bytes32 7 - -<<Interface>> -INexus - - - -External: -     governor(): address -     getModule(key: bytes32): address -     proposeModule(_key: bytes32, _addr: address) -     cancelProposedModule(_key: bytes32) -     acceptProposedModule(_key: bytes32) -     acceptProposedModules(_keys: bytes32[]) -     requestLockModule(_key: bytes32) -     cancelLockModule(_key: bytes32) -     lockModule(_key: bytes32) + +<<Interface>> +INexus + +External: +     governor(): address +     getModule(key: bytes32): address +     proposeModule(_key: bytes32, _addr: address) +     cancelProposedModule(_key: bytes32) +     acceptProposedModule(_key: bytes32) +     acceptProposedModules(_keys: bytes32[]) +     requestLockModule(_key: bytes32) +     cancelLockModule(_key: bytes32) +     lockModule(_key: bytes32) 8 - -<<Abstract>> -ImmutableModule - -Public: -   nexus: INexus - -Internal: -    _onlyGovernor() -    _governor(): address -    _governance(): address -    _savingsManager(): address -    _recollateraliser(): address -    _liquidator(): address -    _proxyAdmin(): address -Public: -    <<modifier>> onlyGovernor() -    <<modifier>> onlyGovernance() -    constructor(_nexus: address) + +<<Abstract>> +ImmutableModule + +Public: +   nexus: INexus + +Internal: +    _onlyGovernor() +    _governor(): address +    _governance(): address +    _savingsManager(): address +    _recollateraliser(): address +    _liquidator(): address +    _proxyAdmin(): address +Public: +    <<modifier>> onlyGovernor() +    <<modifier>> onlyGovernance() +    constructor(_nexus: address) 8->6 - - + + 8->7 - - + + 9 - -InitializableReentrancyGuard - -Private: -   _notEntered: bool - -Internal: -    _initializeReentrancyGuard() -Public: -    <<modifier>> nonReentrant() + +InitializableReentrancyGuard + +Private: +   _notEntered: bool + +Internal: +    _initializeReentrancyGuard() +Public: +    <<modifier>> nonReentrant() 10 - -<<Struct>> -BassetPersonal - -addr: address -integrator: address -hasTxFee: bool -status: BassetStatus - - + +<<Struct>> +BassetPersonal + +addr: address +integrator: address +hasTxFee: bool +status: BassetStatus 13 - -<<Enum>> -BassetStatus - -Default: 0 -Normal: 1 -BrokenBelowPeg: 2 -BrokenAbovePeg: 3 -Blacklisted: 4 -Liquidating: 5 -Liquidated: 6 -Failed: 7 - - + +<<Enum>> +BassetStatus + +Default: 0 +Normal: 1 +BrokenBelowPeg: 2 +BrokenAbovePeg: 3 +Blacklisted: 4 +Liquidating: 5 +Liquidated: 6 +Failed: 7 10->13 - - + + 11 - -<<Struct>> -BassetData - -ratio: uint128 -vaultBalance: uint128 - - + +<<Struct>> +BassetData + +ratio: uint128 +vaultBalance: uint128 12 - -<<Abstract>> -IMasset - - - -External: -    <<abstract>> mint(_input: address, _inputQuantity: uint256, _minOutputQuantity: uint256, _recipient: address): (mintOutput: uint256) -    <<abstract>> mintMulti(_inputs: address[], _inputQuantities: uint256[], _minOutputQuantity: uint256, _recipient: address): (mintOutput: uint256) -    <<abstract>> getMintOutput(_input: address, _inputQuantity: uint256): (mintOutput: uint256) -    <<abstract>> getMintMultiOutput(_inputs: address[], _inputQuantities: uint256[]): (mintOutput: uint256) -    <<abstract>> swap(_input: address, _output: address, _inputQuantity: uint256, _minOutputQuantity: uint256, _recipient: address): (swapOutput: uint256) -    <<abstract>> getSwapOutput(_input: address, _output: address, _inputQuantity: uint256): (swapOutput: uint256) -    <<abstract>> redeem(_output: address, _mAssetQuantity: uint256, _minOutputQuantity: uint256, _recipient: address): (outputQuantity: uint256) -    <<abstract>> redeemMasset(_mAssetQuantity: uint256, _minOutputQuantities: uint256[], _recipient: address): (outputQuantities: uint256[]) -    <<abstract>> redeemExactBassets(_outputs: address[], _outputQuantities: uint256[], _maxMassetQuantity: uint256, _recipient: address): (mAssetRedeemed: uint256) -    <<abstract>> getRedeemOutput(_output: address, _mAssetQuantity: uint256): (bAssetOutput: uint256) -    <<abstract>> getRedeemExactBassetsOutput(_outputs: address[], _outputQuantities: uint256[]): (mAssetAmount: uint256) -    <<abstract>> getBasket(): (bool, bool) -    <<abstract>> getBasset(_token: address): (personal: BassetPersonal, data: BassetData) -    <<abstract>> getBassets(): (personal: BassetPersonal[], data: BassetData[]) -    <<abstract>> bAssetIndexes(address): uint8 -    <<abstract>> getPrice(): (price: uint256, k: uint256) -    <<abstract>> collectInterest(): (swapFeesGained: uint256, newSupply: uint256) -    <<abstract>> collectPlatformInterest(): (mintAmount: uint256, newSupply: uint256) -    <<abstract>> setCacheSize(_cacheSize: uint256) -    <<abstract>> setFees(_swapFee: uint256, _redemptionFee: uint256) -    <<abstract>> setTransferFeesFlag(_bAsset: address, _flag: bool) -    <<abstract>> migrateBassets(_bAssets: address[], _newIntegration: address) + +<<Abstract>> +IMasset + +External: +    <<abstract>> mint(_input: address, _inputQuantity: uint256, _minOutputQuantity: uint256, _recipient: address): (mintOutput: uint256) +    <<abstract>> mintMulti(_inputs: address[], _inputQuantities: uint256[], _minOutputQuantity: uint256, _recipient: address): (mintOutput: uint256) +    <<abstract>> getMintOutput(_input: address, _inputQuantity: uint256): (mintOutput: uint256) +    <<abstract>> getMintMultiOutput(_inputs: address[], _inputQuantities: uint256[]): (mintOutput: uint256) +    <<abstract>> swap(_input: address, _output: address, _inputQuantity: uint256, _minOutputQuantity: uint256, _recipient: address): (swapOutput: uint256) +    <<abstract>> getSwapOutput(_input: address, _output: address, _inputQuantity: uint256): (swapOutput: uint256) +    <<abstract>> redeem(_output: address, _mAssetQuantity: uint256, _minOutputQuantity: uint256, _recipient: address): (outputQuantity: uint256) +    <<abstract>> redeemMasset(_mAssetQuantity: uint256, _minOutputQuantities: uint256[], _recipient: address): (outputQuantities: uint256[]) +    <<abstract>> redeemExactBassets(_outputs: address[], _outputQuantities: uint256[], _maxMassetQuantity: uint256, _recipient: address): (mAssetRedeemed: uint256) +    <<abstract>> getRedeemOutput(_output: address, _mAssetQuantity: uint256): (bAssetOutput: uint256) +    <<abstract>> getRedeemExactBassetsOutput(_outputs: address[], _outputQuantities: uint256[]): (mAssetAmount: uint256) +    <<abstract>> getBasket(): (bool, bool) +    <<abstract>> getBasset(_token: address): (personal: BassetPersonal, data: BassetData) +    <<abstract>> getBassets(): (personal: BassetPersonal[], data: BassetData[]) +    <<abstract>> bAssetIndexes(address): uint8 +    <<abstract>> getPrice(): (price: uint256, k: uint256) +    <<abstract>> collectInterest(): (swapFeesGained: uint256, newSupply: uint256) +    <<abstract>> collectPlatformInterest(): (mintAmount: uint256, newSupply: uint256) +    <<abstract>> setCacheSize(_cacheSize: uint256) +    <<abstract>> setFees(_swapFee: uint256, _redemptionFee: uint256) +    <<abstract>> setTransferFeesFlag(_bAsset: address, _flag: bool) +    <<abstract>> migrateBassets(_bAssets: address[], _newIntegration: address) 12->10 - - + + 12->11 - - + + 14 - -<<Struct>> -BasketState - -undergoingRecol: bool -failed: bool - - + +<<Struct>> +BasketState + +undergoingRecol: bool +failed: bool 15 - -<<Struct>> -FeederConfig - -supply: uint256 -a: uint256 -limits: WeightLimits - - + +<<Struct>> +FeederConfig + +supply: uint256 +a: uint256 +limits: WeightLimits 18 - -<<Struct>> -WeightLimits - -min: uint128 -max: uint128 - - + +<<Struct>> +WeightLimits + +min: uint128 +max: uint128 15->18 - - + + 16 - -<<Struct>> -InvariantConfig - -supply: uint256 -a: uint256 -limits: WeightLimits -recolFee: uint256 - - + +<<Struct>> +InvariantConfig + +supply: uint256 +a: uint256 +limits: WeightLimits +recolFee: uint256 16->18 - - + + 17 - -<<Struct>> -BasicConfig - -a: uint256 -limits: WeightLimits - - + +<<Struct>> +BasicConfig + +a: uint256 +limits: WeightLimits 17->18 - - + + 19 - -<<Struct>> -AmpData - -initialA: uint64 -targetA: uint64 -rampStartTime: uint64 -rampEndTime: uint64 - - + +<<Struct>> +AmpData + +initialA: uint64 +targetA: uint64 +rampStartTime: uint64 +rampEndTime: uint64 20 - -<<Struct>> -FeederData - -swapFee: uint256 -redemptionFee: uint256 -govFee: uint256 -pendingFees: uint256 -cacheSize: uint256 -bAssetPersonal: BassetPersonal[] -bAssetData: BassetData[] -ampData: AmpData -weightLimits: WeightLimits - - + +<<Struct>> +FeederData + +swapFee: uint256 +redemptionFee: uint256 +govFee: uint256 +pendingFees: uint256 +cacheSize: uint256 +bAssetPersonal: BassetPersonal[] +bAssetData: BassetData[] +ampData: AmpData +weightLimits: WeightLimits + + + +20->10 + + - + +20->11 + + + + + 20->18 - - + + - + 20->19 - - + + 21 - -<<Struct>> -MassetData - -swapFee: uint256 -redemptionFee: uint256 -cacheSize: uint256 -surplus: uint256 -bAssetPersonal: BassetPersonal[] -bAssetData: BassetData[] -basket: BasketState -ampData: AmpData -weightLimits: WeightLimits - - + +<<Struct>> +MassetData + +swapFee: uint256 +redemptionFee: uint256 +cacheSize: uint256 +surplus: uint256 +bAssetPersonal: BassetPersonal[] +bAssetData: BassetData[] +basket: BasketState +ampData: AmpData +weightLimits: WeightLimits + + + +21->10 + + + + + +21->11 + + - + 21->14 - - + + - + 21->18 - - + + - + 21->19 - - + + 22 - -<<Struct>> -AssetData - -idx: uint8 -amt: uint256 -personal: BassetPersonal - - + +<<Struct>> +AssetData + +idx: uint8 +amt: uint256 +personal: BassetPersonal - + 22->10 - - + + 23 - -<<Struct>> -Asset - -idx: uint8 -addr: address -exists: bool - - + +<<Struct>> +Asset + +idx: uint8 +addr: address +exists: bool 24 - -<<Library>> -SafeCast - - - -Internal: -    toUint128(value: uint256): uint128 -    toUint64(value: uint256): uint64 -    toUint32(value: uint256): uint32 -    toUint16(value: uint256): uint16 -    toUint8(value: uint256): uint8 -    toUint256(value: int256): uint256 -    toInt128(value: int256): int128 -    toInt64(value: int256): int64 -    toInt32(value: int256): int32 -    toInt16(value: int256): int16 -    toInt8(value: int256): int8 -    toInt256(value: uint256): int256 + +<<Library>> +SafeCast + +Internal: +    toUint128(value: uint256): uint128 +    toUint64(value: uint256): uint64 +    toUint32(value: uint256): uint32 +    toUint16(value: uint256): uint16 +    toUint8(value: uint256): uint8 +    toUint256(value: int256): uint256 +    toInt128(value: int256): int128 +    toInt64(value: int256): int64 +    toInt32(value: int256): int32 +    toInt16(value: int256): int16 +    toInt8(value: int256): int8 +    toInt256(value: uint256): int256 25 - -<<Library>> -StableMath - -Private: -   FULL_SCALE: uint256 -   RATIO_SCALE: uint256 - -Internal: -    getFullScale(): uint256 -    getRatioScale(): uint256 -    scaleInteger(x: uint256): uint256 -    mulTruncate(x: uint256, y: uint256): uint256 -    mulTruncateScale(x: uint256, y: uint256, scale: uint256): uint256 -    mulTruncateCeil(x: uint256, y: uint256): uint256 -    divPrecisely(x: uint256, y: uint256): uint256 -    mulRatioTruncate(x: uint256, ratio: uint256): (c: uint256) -    mulRatioTruncateCeil(x: uint256, ratio: uint256): uint256 -    divRatioPrecisely(x: uint256, ratio: uint256): (c: uint256) -    min(x: uint256, y: uint256): uint256 -    max(x: uint256, y: uint256): uint256 -    clamp(x: uint256, upperBound: uint256): uint256 + +<<Library>> +StableMath + +Private: +   FULL_SCALE: uint256 +   RATIO_SCALE: uint256 + +Internal: +    getFullScale(): uint256 +    getRatioScale(): uint256 +    scaleInteger(x: uint256): uint256 +    mulTruncate(x: uint256, y: uint256): uint256 +    mulTruncateScale(x: uint256, y: uint256, scale: uint256): uint256 +    mulTruncateCeil(x: uint256, y: uint256): uint256 +    divPrecisely(x: uint256, y: uint256): uint256 +    mulRatioTruncate(x: uint256, ratio: uint256): (c: uint256) +    mulRatioTruncateCeil(x: uint256, ratio: uint256): uint256 +    divRatioPrecisely(x: uint256, ratio: uint256): (c: uint256) +    min(x: uint256, y: uint256): uint256 +    max(x: uint256, y: uint256): uint256 +    clamp(x: uint256, upperBound: uint256): uint256 26 - -<<Interface>> -IPlatformIntegration - - - -External: -     deposit(_bAsset: address, _amount: uint256, isTokenFeeCharged: bool): (quantityDeposited: uint256) -     withdraw(_receiver: address, _bAsset: address, _amount: uint256, _hasTxFee: bool) -     withdraw(_receiver: address, _bAsset: address, _amount: uint256, _totalAmount: uint256, _hasTxFee: bool) -     withdrawRaw(_receiver: address, _bAsset: address, _amount: uint256) -     checkBalance(_bAsset: address): (balance: uint256) -     bAssetToPToken(_bAsset: address): (pToken: address) + +<<Interface>> +IPlatformIntegration + +External: +     deposit(_bAsset: address, _amount: uint256, isTokenFeeCharged: bool): (quantityDeposited: uint256) +     withdraw(_receiver: address, _bAsset: address, _amount: uint256, _hasTxFee: bool) +     withdraw(_receiver: address, _bAsset: address, _amount: uint256, _totalAmount: uint256, _hasTxFee: bool) +     withdrawRaw(_receiver: address, _bAsset: address, _amount: uint256) +     checkBalance(_bAsset: address): (balance: uint256) +     bAssetToPToken(_bAsset: address): (pToken: address) 27 - -<<Library>> -Root - - - -Internal: -    sqrt(x: uint256): (y: uint256) + +<<Library>> +Root + +Internal: +    sqrt(x: uint256): (y: uint256) 28 - -<<Library>> -Address - - - -Private: -    _verifyCallResult(success: bool, returndata: bytes, errorMessage: string): bytes -Internal: -    isContract(account: address): bool -    sendValue(recipient: address, amount: uint256) -    functionCall(target: address, data: bytes): bytes -    functionCall(target: address, data: bytes, errorMessage: string): bytes -    functionCallWithValue(target: address, data: bytes, value: uint256): bytes -    functionCallWithValue(target: address, data: bytes, value: uint256, errorMessage: string): bytes -    functionStaticCall(target: address, data: bytes): bytes -    functionStaticCall(target: address, data: bytes, errorMessage: string): bytes -    functionDelegateCall(target: address, data: bytes): bytes -    functionDelegateCall(target: address, data: bytes, errorMessage: string): bytes + +<<Library>> +Address + +Private: +    _verifyCallResult(success: bool, returndata: bytes, errorMessage: string): bytes +Internal: +    isContract(account: address): bool +    sendValue(recipient: address, amount: uint256) +    functionCall(target: address, data: bytes): bytes +    functionCall(target: address, data: bytes, errorMessage: string): bytes +    functionCallWithValue(target: address, data: bytes, value: uint256): bytes +    functionCallWithValue(target: address, data: bytes, value: uint256, errorMessage: string): bytes +    functionStaticCall(target: address, data: bytes): bytes +    functionStaticCall(target: address, data: bytes, errorMessage: string): bytes +    functionDelegateCall(target: address, data: bytes): bytes +    functionDelegateCall(target: address, data: bytes, errorMessage: string): bytes 29 - -<<Library>> -SafeERC20 - - - -Private: -    _callOptionalReturn(token: IERC20, data: bytes) -Internal: -    safeTransfer(token: IERC20, to: address, value: uint256) -    safeTransferFrom(token: IERC20, from: address, to: address, value: uint256) -    safeApprove(token: IERC20, spender: address, value: uint256) -    safeIncreaseAllowance(token: IERC20, spender: address, value: uint256) -    safeDecreaseAllowance(token: IERC20, spender: address, value: uint256) + +<<Library>> +SafeERC20 + +Private: +    _callOptionalReturn(token: IERC20, data: bytes) +Internal: +    safeTransfer(token: IERC20, to: address, value: uint256) +    safeTransferFrom(token: IERC20, from: address, to: address, value: uint256) +    safeApprove(token: IERC20, spender: address, value: uint256) +    safeIncreaseAllowance(token: IERC20, spender: address, value: uint256) +    safeDecreaseAllowance(token: IERC20, spender: address, value: uint256) - + 29->2 - - + + - + 29->28 - - + + 30 - -<<Library>> -MassetHelpers - - - -Internal: -    transferReturnBalance(_sender: address, _recipient: address, _bAsset: address, _qty: uint256): (receivedQty: uint256, recipientBalance: uint256) -    safeInfiniteApprove(_asset: address, _spender: address) + +<<Library>> +MassetHelpers + +Internal: +    transferReturnBalance(_sender: address, _recipient: address, _bAsset: address, _qty: uint256): (receivedQty: uint256, recipientBalance: uint256) +    safeInfiniteApprove(_asset: address, _spender: address) - + 30->2 - - + + - + 30->29 - - + + 31 - -<<Library>> -MassetLogic - -Internal: -   A_PRECISION: uint256 - -Internal: -    _getDeducted(_bData: BassetData[], _config: InvariantConfig, _input: uint256, _redemptionFee: uint256): (deductedInput: uint256, scaledFee: uint256) -    _depositTokens(_bAsset: BassetPersonal, _bAssetRatio: uint256, _quantity: uint256, _maxCache: uint256): (quantityDeposited: uint256) -    _withdrawTokens(_quantity: uint256, _personal: BassetPersonal, _data: BassetData, _recipient: address, _maxCache: uint256) -    _getCacheDetails(_data: MassetData, _supply: uint256): (maxCache: uint256) -    _getSwapFee(_k0: uint256, _k1: uint256, _feeRate: uint256, _config: InvariantConfig): (k2: uint256, scaledSwapFee: uint256) -    _getFee(_grossMassetQuantity: uint256, _config: InvariantConfig, _feeRate: uint256, _k0: uint256): (redemption: uint256, scaledFee: uint256) -    _computeMintOutput(_x: uint256[], _sum: uint256, _k: uint256, _config: InvariantConfig): (mintAmount: uint256) -    _getReserves(_bAssets: BassetData[]): (x: uint256[], sum: uint256) -    _inBounds(_x: uint256[], _sum: uint256, _limits: WeightLimits): (inBounds: bool) -    _invariant(_x: uint256[], _sum: uint256, _a: uint256): (k: uint256) -    _hasConverged(_k: uint256, _kPrev: uint256): bool -    _solveInvariant(_x: uint256[], _a: uint256, _idx: uint8, _targetK: uint256): (y: uint256) -External: -    mint(_data: MassetData, _config: InvariantConfig, _input: Asset, _inputQuantity: uint256, _minOutputQuantity: uint256): (mintOutput: uint256) -    mintMulti(_data: MassetData, _config: InvariantConfig, _indices: uint8[], _inputQuantities: uint256[], _minOutputQuantity: uint256): (mintOutput: uint256) -    swap(_data: MassetData, _config: InvariantConfig, _input: Asset, _output: Asset, _inputQuantity: uint256, _minOutputQuantity: uint256, _recipient: address): (swapOutput: uint256, scaledFee: uint256) -    redeem(_data: MassetData, _config: InvariantConfig, _output: Asset, _inputQuantity: uint256, _minOutputQuantity: uint256, _recipient: address): (bAssetQuantity: uint256, scaledFee: uint256) -    redeemProportionately(_data: MassetData, _config: InvariantConfig, _inputQuantity: uint256, _minOutputQuantities: uint256[], _recipient: address): (scaledFee: uint256, outputs: address[], outputQuantities: uint256[]) -    redeemExactBassets(_data: MassetData, _config: InvariantConfig, _indices: uint8[], _outputQuantities: uint256[], _maxMassetQuantity: uint256, _recipient: address): (mAssetQuantity: uint256, fee: uint256) -Public: -    computeMint(_bAssets: BassetData[], _i: uint8, _rawInput: uint256, _config: InvariantConfig): (mintAmount: uint256) -    computeMintMulti(_bAssets: BassetData[], _indices: uint8[], _rawInputs: uint256[], _config: InvariantConfig): (mintAmount: uint256) -    computeSwap(_bAssets: BassetData[], _i: uint8, _o: uint8, _rawInput: uint256, _feeRate: uint256, _config: InvariantConfig): (bAssetOutputQuantity: uint256, scaledSwapFee: uint256) -    computeRedeem(_bAssets: BassetData[], _o: uint8, _grossMassetQuantity: uint256, _config: InvariantConfig, _feeRate: uint256): (rawOutputUnits: uint256, scaledFee: uint256) -    computeRedeemExact(_bAssets: BassetData[], _indices: uint8[], _rawOutputs: uint256[], _config: InvariantConfig, _feeRate: uint256): (grossMasset: uint256, fee: uint256) -    computePrice(_bAssets: BassetData[], _config: InvariantConfig): (price: uint256, k: uint256) + +<<Library>> +MassetLogic + +Internal: +   A_PRECISION: uint256 + +Internal: +    _getDeducted(_bData: BassetData[], _config: InvariantConfig, _input: uint256, _redemptionFee: uint256): (deductedInput: uint256, scaledFee: uint256) +    _depositTokens(_bAsset: BassetPersonal, _bAssetRatio: uint256, _quantity: uint256, _maxCache: uint256): (quantityDeposited: uint256) +    _withdrawTokens(_quantity: uint256, _personal: BassetPersonal, _data: BassetData, _recipient: address, _maxCache: uint256) +    _getCacheDetails(_data: MassetData, _supply: uint256): (maxCache: uint256) +    _getSwapFee(_k0: uint256, _k1: uint256, _feeRate: uint256, _config: InvariantConfig): (k2: uint256, scaledSwapFee: uint256) +    _getFee(_grossMassetQuantity: uint256, _config: InvariantConfig, _feeRate: uint256, _k0: uint256): (redemption: uint256, scaledFee: uint256) +    _computeMintOutput(_x: uint256[], _sum: uint256, _k: uint256, _config: InvariantConfig): (mintAmount: uint256) +    _getReserves(_bAssets: BassetData[]): (x: uint256[], sum: uint256) +    _inBounds(_x: uint256[], _sum: uint256, _limits: WeightLimits): (inBounds: bool) +    _invariant(_x: uint256[], _sum: uint256, _a: uint256): (k: uint256) +    _hasConverged(_k: uint256, _kPrev: uint256): bool +    _solveInvariant(_x: uint256[], _a: uint256, _idx: uint8, _targetK: uint256): (y: uint256) +External: +    mint(_data: MassetData, _config: InvariantConfig, _input: Asset, _inputQuantity: uint256, _minOutputQuantity: uint256): (mintOutput: uint256) +    mintMulti(_data: MassetData, _config: InvariantConfig, _indices: uint8[], _inputQuantities: uint256[], _minOutputQuantity: uint256): (mintOutput: uint256) +    swap(_data: MassetData, _config: InvariantConfig, _input: Asset, _output: Asset, _inputQuantity: uint256, _minOutputQuantity: uint256, _recipient: address): (swapOutput: uint256, scaledFee: uint256) +    redeem(_data: MassetData, _config: InvariantConfig, _output: Asset, _inputQuantity: uint256, _minOutputQuantity: uint256, _recipient: address): (bAssetQuantity: uint256, scaledFee: uint256) +    redeemProportionately(_data: MassetData, _config: InvariantConfig, _inputQuantity: uint256, _minOutputQuantities: uint256[], _recipient: address): (scaledFee: uint256, outputs: address[], outputQuantities: uint256[]) +    redeemExactBassets(_data: MassetData, _config: InvariantConfig, _indices: uint8[], _outputQuantities: uint256[], _maxMassetQuantity: uint256, _recipient: address): (mAssetQuantity: uint256, fee: uint256) +Public: +    computeMint(_bAssets: BassetData[], _i: uint8, _rawInput: uint256, _config: InvariantConfig): (mintAmount: uint256) +    computeMintMulti(_bAssets: BassetData[], _indices: uint8[], _rawInputs: uint256[], _config: InvariantConfig): (mintAmount: uint256) +    computeSwap(_bAssets: BassetData[], _i: uint8, _o: uint8, _rawInput: uint256, _feeRate: uint256, _config: InvariantConfig): (bAssetOutputQuantity: uint256, scaledSwapFee: uint256) +    computeRedeem(_bAssets: BassetData[], _o: uint8, _grossMassetQuantity: uint256, _config: InvariantConfig, _feeRate: uint256): (rawOutputUnits: uint256, scaledFee: uint256) +    computeRedeemExact(_bAssets: BassetData[], _indices: uint8[], _rawOutputs: uint256[], _config: InvariantConfig, _feeRate: uint256): (grossMasset: uint256, fee: uint256) +    computePrice(_bAssets: BassetData[], _config: InvariantConfig): (price: uint256, k: uint256) - + 31->2 - - + + - + 31->10 - - + + - + 31->11 - - + + - + 31->16 - - + + - + 31->18 - - + + - + 31->21 - - + + - + 31->23 - - + + - + 31->24 - - + + - + 31->25 - - + + - + 31->26 - - + + - + 31->27 - - + + - + 31->29 - - + + - + 31->30 - - + + 32 - -<<Abstract>> -IInvariantValidator - - - -External: -    <<abstract>> computeMint(_bAssets: BassetData[], _i: uint8, _rawInput: uint256, _config: InvariantConfig): uint256 -    <<abstract>> computeMintMulti(_bAssets: BassetData[], _indices: uint8[], _rawInputs: uint256[], _config: InvariantConfig): uint256 -    <<abstract>> computeSwap(_bAssets: BassetData[], _i: uint8, _o: uint8, _rawInput: uint256, _feeRate: uint256, _config: InvariantConfig): (uint256, uint256) -    <<abstract>> computeRedeem(_bAssets: BassetData[], _i: uint8, _mAssetQuantity: uint256, _config: InvariantConfig): uint256 -    <<abstract>> computeRedeemExact(_bAssets: BassetData[], _indices: uint8[], _rawOutputs: uint256[], _config: InvariantConfig): uint256 -Public: -    <<abstract>> computePrice(_bAssets: BassetData[], _config: InvariantConfig): (price: uint256, k: uint256) + +<<Abstract>> +IInvariantValidator + +External: +    <<abstract>> computeMint(_bAssets: BassetData[], _i: uint8, _rawInput: uint256, _config: InvariantConfig): uint256 +    <<abstract>> computeMintMulti(_bAssets: BassetData[], _indices: uint8[], _rawInputs: uint256[], _config: InvariantConfig): uint256 +    <<abstract>> computeSwap(_bAssets: BassetData[], _i: uint8, _o: uint8, _rawInput: uint256, _feeRate: uint256, _config: InvariantConfig): (uint256, uint256) +    <<abstract>> computeRedeem(_bAssets: BassetData[], _i: uint8, _mAssetQuantity: uint256, _config: InvariantConfig): uint256 +    <<abstract>> computeRedeemExact(_bAssets: BassetData[], _indices: uint8[], _rawOutputs: uint256[], _config: InvariantConfig): uint256 +Public: +    <<abstract>> computePrice(_bAssets: BassetData[], _config: InvariantConfig): (price: uint256, k: uint256) + + + +32->11 + + - + 32->16 - - + + 33 - -<<Interface>> -IBasicToken - - - -External: -     decimals(): uint8 + +<<Interface>> +IBasicToken + +External: +     decimals(): uint8 34 - -<<Library>> -MassetManager - -Private: -   MIN_RAMP_TIME: uint256 -   MAX_A: uint256 - -Internal: -    _getAssetIndex(_bAssetPersonal: BassetPersonal[], _bAssetIndexes: mapping(address=>uint8), _asset: address): (idx: uint8) -External: -    addBasset(_bAssetPersonal: BassetPersonal[], _bAssetData: BassetData[], _bAssetIndexes: mapping(address=>uint8), _bAsset: address, _integration: address, _mm: uint256, _hasTxFee: bool) -    collectPlatformInterest(_bAssetPersonal: BassetPersonal[], _bAssetData: BassetData[]): (indices: uint8[], rawGains: uint256[]) -    setTransferFeesFlag(_bAssetPersonal: BassetPersonal[], _bAssetIndexes: mapping(address=>uint8), _bAsset: address, _flag: bool) -    migrateBassets(_bAssetPersonal: BassetPersonal[], _bAssetIndexes: mapping(address=>uint8), _bAssets: address[], _newIntegration: address) -    handlePegLoss(_basket: BasketState, _bAssetPersonal: BassetPersonal[], _bAssetIndexes: mapping(address=>uint8), _bAsset: address, _belowPeg: bool) -    negateIsolation(_basket: BasketState, _bAssetPersonal: BassetPersonal[], _bAssetIndexes: mapping(address=>uint8), _bAsset: address) -    startRampA(_ampData: AmpData, _targetA: uint256, _rampEndTime: uint256, _currentA: uint256, _precision: uint256) -    stopRampA(_ampData: AmpData, _currentA: uint256) -Public: -    <<event>> BassetsMigrated(bAssets: address[], newIntegrator: address) -    <<event>> TransferFeeEnabled(bAsset: address, enabled: bool) -    <<event>> BassetAdded(bAsset: address, integrator: address) -    <<event>> BassetStatusChanged(bAsset: address, status: BassetStatus) -    <<event>> BasketStatusChanged() -    <<event>> StartRampA(currentA: uint256, targetA: uint256, startTime: uint256, rampEndTime: uint256) -    <<event>> StopRampA(currentA: uint256, time: uint256) + +<<Library>> +MassetManager + +Private: +   MIN_RAMP_TIME: uint256 +   MAX_A: uint256 + +Internal: +    _getAssetIndex(_bAssetPersonal: BassetPersonal[], _bAssetIndexes: mapping(address=>uint8), _asset: address): (idx: uint8) +External: +    addBasset(_bAssetPersonal: BassetPersonal[], _bAssetData: BassetData[], _bAssetIndexes: mapping(address=>uint8), _bAsset: address, _integration: address, _mm: uint256, _hasTxFee: bool) +    collectPlatformInterest(_bAssetPersonal: BassetPersonal[], _bAssetData: BassetData[]): (indices: uint8[], rawGains: uint256[]) +    setTransferFeesFlag(_bAssetPersonal: BassetPersonal[], _bAssetIndexes: mapping(address=>uint8), _bAsset: address, _flag: bool) +    migrateBassets(_bAssetPersonal: BassetPersonal[], _bAssetIndexes: mapping(address=>uint8), _bAssets: address[], _newIntegration: address) +    handlePegLoss(_basket: BasketState, _bAssetPersonal: BassetPersonal[], _bAssetIndexes: mapping(address=>uint8), _bAsset: address, _belowPeg: bool) +    negateIsolation(_basket: BasketState, _bAssetPersonal: BassetPersonal[], _bAssetIndexes: mapping(address=>uint8), _bAsset: address) +    startRampA(_ampData: AmpData, _targetA: uint256, _rampEndTime: uint256, _currentA: uint256, _precision: uint256) +    stopRampA(_ampData: AmpData, _currentA: uint256) +Public: +    <<event>> BassetsMigrated(bAssets: address[], newIntegrator: address) +    <<event>> TransferFeeEnabled(bAsset: address, enabled: bool) +    <<event>> BassetAdded(bAsset: address, integrator: address) +    <<event>> BassetStatusChanged(bAsset: address, status: BassetStatus) +    <<event>> BasketStatusChanged() +    <<event>> StartRampA(currentA: uint256, targetA: uint256, startTime: uint256, rampEndTime: uint256) +    <<event>> StopRampA(currentA: uint256, time: uint256) - + 34->2 - - + + - + 34->10 - - + + - + 34->11 - - + + - + 34->13 - - + + - + 34->14 - - + + - + 34->19 - - + + - + 34->24 - - + + - + 34->25 - - + + - + 34->26 - - + + - + 34->29 - - + + - + 34->33 - - + + 35 - -Masset - -Private: -   MAX_FEE: uint256 -   A_PRECISION: uint256 -   RECOL_FEE: uint256 -Public: -   bAssetIndexes: mapping(address=>uint8) -   data: MassetData - -Internal: -    _isSavingsManager() -    _isHealthy() -    _noRecol() -    _getAsset(_asset: address): (asset: Asset) -    _getAssets(_bAssets: address[]): (indexes: uint8[]) -    _getConfig(): InvariantConfig -    _getA(): uint256 -External: -    mint(_input: address, _inputQuantity: uint256, _minOutputQuantity: uint256, _recipient: address): (mintOutput: uint256) -    mintMulti(_inputs: address[], _inputQuantities: uint256[], _minOutputQuantity: uint256, _recipient: address): (mintOutput: uint256) -    getMintOutput(_input: address, _inputQuantity: uint256): (mintOutput: uint256) -    getMintMultiOutput(_inputs: address[], _inputQuantities: uint256[]): (mintOutput: uint256) -    swap(_input: address, _output: address, _inputQuantity: uint256, _minOutputQuantity: uint256, _recipient: address): (swapOutput: uint256) -    getSwapOutput(_input: address, _output: address, _inputQuantity: uint256): (swapOutput: uint256) -    redeem(_output: address, _mAssetQuantity: uint256, _minOutputQuantity: uint256, _recipient: address): (outputQuantity: uint256) -    redeemMasset(_mAssetQuantity: uint256, _minOutputQuantities: uint256[], _recipient: address): (outputQuantities: uint256[]) -    redeemExactBassets(_outputs: address[], _outputQuantities: uint256[], _maxMassetQuantity: uint256, _recipient: address): (mAssetQuantity: uint256) -    getRedeemOutput(_output: address, _mAssetQuantity: uint256): (bAssetOutput: uint256) -    getRedeemExactBassetsOutput(_outputs: address[], _outputQuantities: uint256[]): (mAssetQuantity: uint256) -    getBasket(): (bool, bool) -    getBassets(): (personal: BassetPersonal[], bData: BassetData[]) -    getBasset(_bAsset: address): (personal: BassetPersonal, bData: BassetData) -    getConfig(): (config: InvariantConfig) -    getPrice(): (price: uint256, k: uint256) -    collectInterest(): (mintAmount: uint256, newSupply: uint256) -    collectPlatformInterest(): (mintAmount: uint256, newSupply: uint256) -    setCacheSize(_cacheSize: uint256) -    setFees(_swapFee: uint256, _redemptionFee: uint256) -    setWeightLimits(_min: uint128, _max: uint128) -    setTransferFeesFlag(_bAsset: address, _flag: bool) -    migrateBassets(_bAssets: address[], _newIntegration: address) -    handlePegLoss(_bAsset: address, _belowPeg: bool) -    negateIsolation(_bAsset: address) -    startRampA(_targetA: uint256, _rampEndTime: uint256) -    stopRampA() -    mintDeficit(): (mintAmount: uint256) -    burnSurplus(): (burnAmount: uint256) -Public: -    <<event>> Minted(minter: address, recipient: address, mAssetQuantity: uint256, input: address, inputQuantity: uint256) -    <<event>> MintedMulti(minter: address, recipient: address, mAssetQuantity: uint256, inputs: address[], inputQuantities: uint256[]) -    <<event>> Swapped(swapper: address, input: address, output: address, outputAmount: uint256, scaledFee: uint256, recipient: address) -    <<event>> Redeemed(redeemer: address, recipient: address, mAssetQuantity: uint256, output: address, outputQuantity: uint256, scaledFee: uint256) -    <<event>> RedeemedMulti(redeemer: address, recipient: address, mAssetQuantity: uint256, outputs: address[], outputQuantity: uint256[], scaledFee: uint256) -    <<event>> CacheSizeChanged(cacheSize: uint256) -    <<event>> FeesChanged(swapFee: uint256, redemptionFee: uint256) -    <<event>> WeightLimitsChanged(min: uint128, max: uint128) -    <<event>> ForgeValidatorChanged(forgeValidator: address) -    <<event>> DeficitMinted(amt: uint256) -    <<event>> SurplusBurned(creditor: address, amt: uint256) -    <<modifier>> onlySavingsManager() -    <<modifier>> whenHealthy() -    <<modifier>> whenNoRecol() -    constructor(_nexus: address, _recolFee: uint256) -    initialize(_nameArg: string, _symbolArg: string, _bAssets: BassetPersonal[], _config: BasicConfig) + +Masset + +Private: +   MAX_FEE: uint256 +   A_PRECISION: uint256 +   RECOL_FEE: uint256 +Public: +   bAssetIndexes: mapping(address=>uint8) +   data: MassetData + +Internal: +    _isSavingsManager() +    _isHealthy() +    _noRecol() +    _getAsset(_asset: address): (asset: Asset) +    _getAssets(_bAssets: address[]): (indexes: uint8[]) +    _getConfig(): InvariantConfig +    _getA(): uint256 +External: +    mint(_input: address, _inputQuantity: uint256, _minOutputQuantity: uint256, _recipient: address): (mintOutput: uint256) <<nonReentrant, whenHealthy>> +    mintMulti(_inputs: address[], _inputQuantities: uint256[], _minOutputQuantity: uint256, _recipient: address): (mintOutput: uint256) <<nonReentrant, whenHealthy>> +    getMintOutput(_input: address, _inputQuantity: uint256): (mintOutput: uint256) +    getMintMultiOutput(_inputs: address[], _inputQuantities: uint256[]): (mintOutput: uint256) +    swap(_input: address, _output: address, _inputQuantity: uint256, _minOutputQuantity: uint256, _recipient: address): (swapOutput: uint256) <<nonReentrant, whenHealthy>> +    getSwapOutput(_input: address, _output: address, _inputQuantity: uint256): (swapOutput: uint256) +    redeem(_output: address, _mAssetQuantity: uint256, _minOutputQuantity: uint256, _recipient: address): (outputQuantity: uint256) <<nonReentrant, whenNoRecol>> +    redeemMasset(_mAssetQuantity: uint256, _minOutputQuantities: uint256[], _recipient: address): (outputQuantities: uint256[]) <<nonReentrant, whenNoRecol>> +    redeemExactBassets(_outputs: address[], _outputQuantities: uint256[], _maxMassetQuantity: uint256, _recipient: address): (mAssetQuantity: uint256) <<nonReentrant, whenNoRecol>> +    getRedeemOutput(_output: address, _mAssetQuantity: uint256): (bAssetOutput: uint256) +    getRedeemExactBassetsOutput(_outputs: address[], _outputQuantities: uint256[]): (mAssetQuantity: uint256) +    getBasket(): (bool, bool) +    getBassets(): (personal: BassetPersonal[], bData: BassetData[]) +    getBasset(_bAsset: address): (personal: BassetPersonal, bData: BassetData) +    getConfig(): (config: InvariantConfig) +    getPrice(): (price: uint256, k: uint256) +    collectInterest(): (mintAmount: uint256, newSupply: uint256) <<onlySavingsManager>> +    collectPlatformInterest(): (mintAmount: uint256, newSupply: uint256) <<onlySavingsManager, whenHealthy, nonReentrant>> +    setCacheSize(_cacheSize: uint256) <<onlyGovernor>> +    setFees(_swapFee: uint256, _redemptionFee: uint256) <<onlyGovernor>> +    setWeightLimits(_min: uint128, _max: uint128) <<onlyGovernor>> +    setTransferFeesFlag(_bAsset: address, _flag: bool) <<onlyGovernor>> +    migrateBassets(_bAssets: address[], _newIntegration: address) <<onlyGovernor>> +    handlePegLoss(_bAsset: address, _belowPeg: bool) <<onlyGovernor>> +    negateIsolation(_bAsset: address) <<onlyGovernor>> +    startRampA(_targetA: uint256, _rampEndTime: uint256) <<onlyGovernor>> +    stopRampA() <<onlyGovernor>> +    mintDeficit(): (mintAmount: uint256) +    burnSurplus(): (burnAmount: uint256) +Public: +    <<event>> Minted(minter: address, recipient: address, mAssetQuantity: uint256, input: address, inputQuantity: uint256) +    <<event>> MintedMulti(minter: address, recipient: address, mAssetQuantity: uint256, inputs: address[], inputQuantities: uint256[]) +    <<event>> Swapped(swapper: address, input: address, output: address, outputAmount: uint256, scaledFee: uint256, recipient: address) +    <<event>> Redeemed(redeemer: address, recipient: address, mAssetQuantity: uint256, output: address, outputQuantity: uint256, scaledFee: uint256) +    <<event>> RedeemedMulti(redeemer: address, recipient: address, mAssetQuantity: uint256, outputs: address[], outputQuantity: uint256[], scaledFee: uint256) +    <<event>> CacheSizeChanged(cacheSize: uint256) +    <<event>> FeesChanged(swapFee: uint256, redemptionFee: uint256) +    <<event>> WeightLimitsChanged(min: uint128, max: uint128) +    <<event>> ForgeValidatorChanged(forgeValidator: address) +    <<event>> DeficitMinted(amt: uint256) +    <<event>> SurplusBurned(creditor: address, amt: uint256) +    <<modifier>> onlySavingsManager() +    <<modifier>> whenHealthy() +    <<modifier>> whenNoRecol() +    constructor(_nexus: address, _recolFee: uint256) +    initialize(_nameArg: string, _symbolArg: string, _bAssets: BassetPersonal[], _config: BasicConfig) <<initializer>> - + 35->0 - - + + - + 35->5 - - + + - + 35->8 - - + + - + 35->9 - - + + - + 35->10 - - + + - + 35->11 - - + + - + 35->12 - - + + - + 35->14 - - + + - + 35->16 - - + + - + 35->17 - - + + - + 35->18 - - + + - + 35->19 - - + + - + 35->21 - - + + - + 35->23 - - + + - + 35->24 - - + + - + 35->25 - - + + - + 35->31 - - + + - + 35->34 - - + + diff --git a/lib/converterAST2Classes.js b/lib/converterAST2Classes.js index fde094c7..3eb325dc 100644 --- a/lib/converterAST2Classes.js +++ b/lib/converterAST2Classes.js @@ -265,6 +265,7 @@ function parseContractDefinition(umlClass, node) { stereotype, parameters: parseParameters(subNode.parameters), returnParameters: parseParameters(subNode.returnParameters), + modifiers: subNode.modifiers.map((m) => m.name), }); } // Recursively parse function parameters for associations diff --git a/lib/converterClass2Dot.js b/lib/converterClass2Dot.js index eded92e5..9176e15a 100644 --- a/lib/converterClass2Dot.js +++ b/lib/converterClass2Dot.js @@ -175,6 +175,9 @@ const dotOperators = (umlClass, vizGroup, operators, options) => { if (operator.returnParameters?.length > 0) { dotString += ': ' + dotParameters(operator.returnParameters, true); } + if (options.hideModifiers === false && operator.modifiers?.length > 0) { + dotString += ` \\<\\<${operator.modifiers.join(', ')}\\>\\>`; + } dotString += '\\l'; } return dotString; diff --git a/lib/umlClass.d.ts b/lib/umlClass.d.ts index 724193a7..6b5e4316 100644 --- a/lib/umlClass.d.ts +++ b/lib/umlClass.d.ts @@ -53,6 +53,7 @@ export interface Operator extends Attribute { parameters?: Parameter[]; returnParameters?: Parameter[]; isPayable?: boolean; + modifiers?: string[]; } export declare enum ReferenceType { Memory = 0, diff --git a/package-lock.json b/package-lock.json index 8c5ba7f1..4f679750 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "sol2uml", - "version": "2.1.9", + "version": "2.2.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/package.json b/package.json index 0ce319f9..715296bc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "sol2uml", - "version": "2.1.9", + "version": "2.2.0", "description": "Solidity contract visualisation tool.", "main": "./lib/index.js", "types": "./lib/index.d.ts", diff --git a/src/contracts/SomeImpl.sol b/src/contracts/SomeImpl.sol index e1a56bc7..b9e5e4da 100644 --- a/src/contracts/SomeImpl.sol +++ b/src/contracts/SomeImpl.sol @@ -73,6 +73,12 @@ contract SomeImpl is SomeInterface { _; } + function withModifier() someModifier(true) { + } + + function withTwoModifiers(uint256 someInt) someModifier(true) modifierMultiParams(false, someInt) { + } + function add(uint256 someNumber) public returns (uint256) { somePublicNumber = somePublicNumber + someNumber; return somePublicNumber; diff --git a/src/ts/converterAST2Classes.ts b/src/ts/converterAST2Classes.ts index 6acf3748..ef7078ed 100644 --- a/src/ts/converterAST2Classes.ts +++ b/src/ts/converterAST2Classes.ts @@ -320,6 +320,7 @@ function parseContractDefinition( stereotype, parameters: parseParameters(subNode.parameters), returnParameters: parseParameters(subNode.returnParameters), + modifiers: subNode.modifiers.map((m) => m.name), }) } diff --git a/src/ts/converterClass2Dot.ts b/src/ts/converterClass2Dot.ts index ec31ff6e..751459d2 100644 --- a/src/ts/converterClass2Dot.ts +++ b/src/ts/converterClass2Dot.ts @@ -278,6 +278,10 @@ const dotOperators = ( dotString += ': ' + dotParameters(operator.returnParameters, true) } + if (options.hideModifiers === false && operator.modifiers?.length > 0) { + dotString += ` \\<\\<${operator.modifiers.join(', ')}\\>\\>` + } + dotString += '\\l' } diff --git a/src/ts/umlClass.ts b/src/ts/umlClass.ts index a5c365ea..4099a6f2 100644 --- a/src/ts/umlClass.ts +++ b/src/ts/umlClass.ts @@ -62,6 +62,7 @@ export interface Operator extends Attribute { parameters?: Parameter[] returnParameters?: Parameter[] isPayable?: boolean + modifiers?: string[] } export enum ReferenceType {