Diff
checker
文本
文本
图像
文档
Excel
文件夹
Legal
Enterprise
桌面版
定价
登录
下载 Diffchecker 桌面版
比较文本
查找两个文本文件之间的差异
工具
历史
实时编辑器
折叠未更改行
关闭换行
视图
拆分
统一
比对精度
智能
单词
字符
语法高亮
选择语法
忽略
文本转换
转到第一个差异
编辑输入
Diffchecker Desktop
运行Diffchecker最安全的方式。获取Diffchecker桌面应用:您的差异永远不会离开您的电脑!
获取桌面版
Differ tlchook
创建于
去年
差异永不过期
清除
导出
分享
解释
15 删除
行
总计
删除
字符
总计
删除
要继续使用此功能,请升级到
Diff
checker
Pro
查看价格
107 行
全部复制
72 添加
行
总计
添加
字符
总计
添加
要继续使用此功能,请升级到
Diff
checker
Pro
查看价格
107 行
全部复制
// SPDX-License-Identifier: BUSL-1.1
// SPDX-License-Identifier: BUSL-1.1
// This code is made available under the terms and conditions of the Business Source License 1.1 (BUSL-1.1).
// This code is made available under the terms and conditions of the Business Source License 1.1 (BUSL-1.1).
// The act of publishing this code is driven by the aim to promote transparency and facilitate its utilization for educational purposes.
// The act of publishing this code is driven by the aim to promote transparency and facilitate its utilization for educational purposes.
pragma solidity 0.8.18;
pragma solidity 0.8.18;
复制
已复制
复制
已复制
import {
OwnableUpgradeable
} from "@openzeppelin-upgradeable/contracts/access/OwnableUpgradeable.sol";
import {
OwnableUpgradeable
} from "@openzeppelin-upgradeable/contracts/access/OwnableUpgradeable.sol";
import {
ITradeServiceHook
} from "../services/interfaces/ITradeServiceHook.sol";
import {
ITradeServiceHook
} from "../services/interfaces/ITradeServiceHook.sol";
import {
ITradeService
} from "../services/interfaces/ITradeService.sol";
import {
ITradeService
} from "../services/interfaces/ITradeService.sol";
import {
ITradingStaking
} from "./interfaces/ITradingStaking.sol";
import {
ITradingStaking
} from "./interfaces/ITradingStaking.sol";
import {
TraderLoyaltyCredit
} from "@hmx/tokens/TraderLoyaltyCredit.sol";
import {
TraderLoyaltyCredit
} from "@hmx/tokens/TraderLoyaltyCredit.sol";
import {
TLCStaking
} from "@hmx/staking/TLCStaking.sol";
import {
TLCStaking
} from "@hmx/staking/TLCStaking.sol";
import {
FullMath
} from "@hmx/libraries/FullMath.sol";
import {
FullMath
} from "@hmx/libraries/FullMath.sol";
contract TLCHook is ITradeServiceHook, OwnableUpgradeable {
contract TLCHook is ITradeServiceHook, OwnableUpgradeable {
复制
已复制
复制
已复制
using FullMath for uint256;
using FullMath for uint256;
复制
已复制
复制
已复制
error TLCHook_Forbidden();
error TLCHook_Forbidden();
error TLCHook_BadArgs();
error TLCHook_BadArgs();
复制
已复制
复制
已复制
uint32 internal constant BPS = 100_00;
uint32 internal constant BPS = 100_00;
复制
已复制
复制
已复制
address public tradeService;
address public tradeService;
address public tlc;
address public tlc;
address public tlcStaking;
address public tlcStaking;
复制
已复制
复制
已复制
// mapping weight with the marketIndex
// mapping weight with the marketIndex
mapping(uint256 marketIndex => uint256 weight) public marketWeights;
mapping(uint256 marketIndex => uint256 weight) public marketWeights;
mapping(address whitelisted => bool isWhitelisted) public whitelistedCallers;
mapping(address whitelisted => bool isWhitelisted) public whitelistedCallers;
复制
已复制
复制
已复制
modifier onlyWhitelistedCaller() {
modifier onlyWhitelistedCaller() {
if (!whitelistedCallers[msg.sender]) revert TLCHook_Forbidden();
if (!whitelistedCallers[msg.sender]) revert TLCHook_Forbidden();
_;
_;
}
}
复制
已复制
复制
已复制
event LogSetMarketWeight(uint256 marketIndex, uint256 oldWeight, uint256 newWeight);
event LogSetMarketWeight(uint256 marketIndex, uint256 oldWeight, uint256 newWeight);
event LogSetWhitelistedCaller(address indexed caller, bool isWhitelisted);
event LogSetWhitelistedCaller(address indexed caller, bool isWhitelisted);
复制
已复制
复制
已复制
function initialize(address _tradeService, address _tlc, address _tlcStaking) external initializer {
function initialize(address _tradeService, address _tlc, address _tlcStaking) external initializer {
OwnableUpgradeable.__Ownable_init();
OwnableUpgradeable.__Ownable_init();
复制
已复制
复制
已复制
tradeService = _tradeService;
tradeService = _tradeService;
tlc = _tlc;
tlc = _tlc;
tlcStaking = _tlcStaking;
tlcStaking = _tlcStaking;
复制
已复制
复制
已复制
// Sanity checks
// Sanity checks
ITradeService(tradeService).configStorage();
ITradeService(tradeService).configStorage();
TraderLoyaltyCredit(tlc).symbol();
TraderLoyaltyCredit(tlc).symbol();
}
}
复制
已复制
复制
已复制
function onIncreasePosition(
function onIncreasePosition(
address _primaryAccount,
address _primaryAccount,
uint256,
uint256,
uint256 _marketIndex,
uint256 _marketIndex,
uint256 _sizeDelta,
uint256 _sizeDelta,
bytes32
bytes32
) external onlyWhitelistedCaller {
) external onlyWhitelistedCaller {
_mintTLC(_primaryAccount, _sizeDelta, _marketIndex);
_mintTLC(_primaryAccount, _sizeDelta, _marketIndex);
}
}
复制
已复制
复制
已复制
function onDecreasePosition(
function onDecreasePosition(
address _primaryAccount,
address _primaryAccount,
uint256,
uint256,
uint256,
uint256,
uint256 _sizeDelta,
uint256 _sizeDelta,
bytes32
bytes32
) external onlyWhitelistedCaller {
) external onlyWhitelistedCaller {
// Do nothing
// Do nothing
}
}
复制
已复制
复制
已复制
function _mintTLC(address _primaryAccount, uint256 _sizeDelta, uint256 _marketIndex) internal {
function _mintTLC(address _primaryAccount, uint256 _sizeDelta, uint256 _marketIndex) internal {
// SLOADs
// SLOADs
TraderLoyaltyCredit _tlc = TraderLoyaltyCredit(tlc);
TraderLoyaltyCredit _tlc = TraderLoyaltyCredit(tlc);
TLCStaking _tlcStaking = TLCStaking(tlcStaking);
TLCStaking _tlcStaking = TLCStaking(tlcStaking);
// Calculate mint amount which is equal to sizeDelta but convert decimal from 1e30 to 1e18
// Calculate mint amount which is equal to sizeDelta but convert decimal from 1e30 to 1e18
// This is to make the TLC token composable as ERC20 with regular 18 decimals, also wighted
// This is to make the TLC token composable as ERC20 with regular 18 decimals, also wighted
uint256 weight = marketWeights[_marketIndex] == 0 ? BPS : marketWeights[_marketIndex];
uint256 weight = marketWeights[_marketIndex] == 0 ? BPS : marketWeights[_marketIndex];
uint256 _mintAmount = _sizeDelta.mulDiv(weight, 1e16); // 1e16 = (1e30 / 1e18) * BPS, optimized math
uint256 _mintAmount = _sizeDelta.mulDiv(weight, 1e16); // 1e16 = (1e30 / 1e18) * BPS, optimized math
复制
已复制
复制
已复制
_tlc.mint(address(this), _mintAmount);
_tlc.mint(address(this), _mintAmount);
_tlc.approve(address(_tlcStaking), _mintAmount);
_tlc.approve(address(_tlcStaking), _mintAmount);
_tlcStaking.deposit(_primaryAccount, _mintAmount);
_tlcStaking.deposit(_primaryAccount, _mintAmount);
}
}
复制
已复制
复制
已复制
function setMarketWeight(uint256 _marketIndex, uint256 _weight) external onlyOwner {
function setMarketWeight(uint256 _marketIndex, uint256 _weight) external onlyOwner {
emit LogSetMarketWeight(_marketIndex, marketWeights[_marketIndex], _weight);
emit LogSetMarketWeight(_marketIndex, marketWeights[_marketIndex], _weight);
marketWeights[_marketIndex] = _weight;
marketWeights[_marketIndex] = _weight;
}
}
复制
已复制
复制
已复制
function setWhitelistedCallers(address[] calldata _callers, bool[] calldata _isWhitelisteds) external onlyOwner {
function setWhitelistedCallers(address[] calldata _callers, bool[] calldata _isWhitelisteds) external onlyOwner {
if (_callers.length != _isWhitelisteds.length) revert TLCHook_BadArgs();
if (_callers.length != _isWhitelisteds.length) revert TLCHook_BadArgs();
for (uint256 i = 0; i < _callers.length; ) {
for (uint256 i = 0; i < _callers.length; ) {
whitelistedCallers[_callers[i]] = _isWhitelisteds[i];
whitelistedCallers[_callers[i]] = _isWhitelisteds[i];
复制
已复制
复制
已复制
emit LogSetWhitelistedCaller(_callers[i], _isWhitelisteds[i]);
emit LogSetWhitelistedCaller(_callers[i], _isWhitelisteds[i]);
复制
已复制
复制
已复制
unchecked {
unchecked {
++i;
++i;
}
}
}
}
}
复制
已复制
复制
已复制
}
复制
已复制
复制
已复制
/// @custom:oz-upgrades-unsafe-allow constructor
/// @custom:oz-upgrades-unsafe-allow constructor
constructor() {
constructor() {
_disableInitializers();
_disableInitializers();
}
}
}
}
已保存差异
原始文本
打开文件
// SPDX-License-Identifier: BUSL-1.1 // This code is made available under the terms and conditions of the Business Source License 1.1 (BUSL-1.1). // The act of publishing this code is driven by the aim to promote transparency and facilitate its utilization for educational purposes. pragma solidity 0.8.18; import { OwnableUpgradeable } from "@openzeppelin-upgradeable/contracts/access/OwnableUpgradeable.sol"; import { ITradeServiceHook } from "../services/interfaces/ITradeServiceHook.sol"; import { ITradeService } from "../services/interfaces/ITradeService.sol"; import { ITradingStaking } from "./interfaces/ITradingStaking.sol"; import { TraderLoyaltyCredit } from "@hmx/tokens/TraderLoyaltyCredit.sol"; import { TLCStaking } from "@hmx/staking/TLCStaking.sol"; import { FullMath } from "@hmx/libraries/FullMath.sol"; contract TLCHook is ITradeServiceHook, OwnableUpgradeable { using FullMath for uint256; error TLCHook_Forbidden(); error TLCHook_BadArgs(); uint32 internal constant BPS = 100_00; address public tradeService; address public tlc; address public tlcStaking; // mapping weight with the marketIndex mapping(uint256 marketIndex => uint256 weight) public marketWeights; mapping(address whitelisted => bool isWhitelisted) public whitelistedCallers; modifier onlyWhitelistedCaller() { if (!whitelistedCallers[msg.sender]) revert TLCHook_Forbidden(); _; } event LogSetMarketWeight(uint256 marketIndex, uint256 oldWeight, uint256 newWeight); event LogSetWhitelistedCaller(address indexed caller, bool isWhitelisted); function initialize(address _tradeService, address _tlc, address _tlcStaking) external initializer { OwnableUpgradeable.__Ownable_init(); tradeService = _tradeService; tlc = _tlc; tlcStaking = _tlcStaking; // Sanity checks ITradeService(tradeService).configStorage(); TraderLoyaltyCredit(tlc).symbol(); } function onIncreasePosition( address _primaryAccount, uint256, uint256 _marketIndex, uint256 _sizeDelta, bytes32 ) external onlyWhitelistedCaller { _mintTLC(_primaryAccount, _sizeDelta, _marketIndex); } function onDecreasePosition( address _primaryAccount, uint256, uint256, uint256 _sizeDelta, bytes32 ) external onlyWhitelistedCaller { // Do nothing } function _mintTLC(address _primaryAccount, uint256 _sizeDelta, uint256 _marketIndex) internal { // SLOADs TraderLoyaltyCredit _tlc = TraderLoyaltyCredit(tlc); TLCStaking _tlcStaking = TLCStaking(tlcStaking); // Calculate mint amount which is equal to sizeDelta but convert decimal from 1e30 to 1e18 // This is to make the TLC token composable as ERC20 with regular 18 decimals, also wighted uint256 weight = marketWeights[_marketIndex] == 0 ? BPS : marketWeights[_marketIndex]; uint256 _mintAmount = _sizeDelta.mulDiv(weight, 1e16); // 1e16 = (1e30 / 1e18) * BPS, optimized math _tlc.mint(address(this), _mintAmount); _tlc.approve(address(_tlcStaking), _mintAmount); _tlcStaking.deposit(_primaryAccount, _mintAmount); } function setMarketWeight(uint256 _marketIndex, uint256 _weight) external onlyOwner { emit LogSetMarketWeight(_marketIndex, marketWeights[_marketIndex], _weight); marketWeights[_marketIndex] = _weight; } function setWhitelistedCallers(address[] calldata _callers, bool[] calldata _isWhitelisteds) external onlyOwner { if (_callers.length != _isWhitelisteds.length) revert TLCHook_BadArgs(); for (uint256 i = 0; i < _callers.length; ) { whitelistedCallers[_callers[i]] = _isWhitelisteds[i]; emit LogSetWhitelistedCaller(_callers[i], _isWhitelisteds[i]); unchecked { ++i; } } } /// @custom:oz-upgrades-unsafe-allow constructor constructor() { _disableInitializers(); } }
更改后文本
打开文件
// SPDX-License-Identifier: BUSL-1.1 // This code is made available under the terms and conditions of the Business Source License 1.1 (BUSL-1.1). // The act of publishing this code is driven by the aim to promote transparency and facilitate its utilization for educational purposes. pragma solidity 0.8.18; import {OwnableUpgradeable} from "@openzeppelin-upgradeable/contracts/access/OwnableUpgradeable.sol"; import {ITradeServiceHook} from "../services/interfaces/ITradeServiceHook.sol"; import {ITradeService} from "../services/interfaces/ITradeService.sol"; import {ITradingStaking} from "./interfaces/ITradingStaking.sol"; import {TraderLoyaltyCredit} from "@hmx/tokens/TraderLoyaltyCredit.sol"; import {TLCStaking} from "@hmx/staking/TLCStaking.sol"; import {FullMath} from "@hmx/libraries/FullMath.sol"; contract TLCHook is ITradeServiceHook, OwnableUpgradeable { using FullMath for uint256; error TLCHook_Forbidden(); error TLCHook_BadArgs(); uint32 internal constant BPS = 100_00; address public tradeService; address public tlc; address public tlcStaking; // mapping weight with the marketIndex mapping(uint256 marketIndex => uint256 weight) public marketWeights; mapping(address whitelisted => bool isWhitelisted) public whitelistedCallers; modifier onlyWhitelistedCaller() { if (!whitelistedCallers[msg.sender]) revert TLCHook_Forbidden(); _; } event LogSetMarketWeight(uint256 marketIndex, uint256 oldWeight, uint256 newWeight); event LogSetWhitelistedCaller(address indexed caller, bool isWhitelisted); function initialize(address _tradeService, address _tlc, address _tlcStaking) external initializer { OwnableUpgradeable.__Ownable_init(); tradeService = _tradeService; tlc = _tlc; tlcStaking = _tlcStaking; // Sanity checks ITradeService(tradeService).configStorage(); TraderLoyaltyCredit(tlc).symbol(); } function onIncreasePosition( address _primaryAccount, uint256, uint256 _marketIndex, uint256 _sizeDelta, bytes32 ) external onlyWhitelistedCaller { _mintTLC(_primaryAccount, _sizeDelta, _marketIndex); } function onDecreasePosition( address _primaryAccount, uint256, uint256, uint256 _sizeDelta, bytes32 ) external onlyWhitelistedCaller { // Do nothing } function _mintTLC(address _primaryAccount, uint256 _sizeDelta, uint256 _marketIndex) internal { // SLOADs TraderLoyaltyCredit _tlc = TraderLoyaltyCredit(tlc); TLCStaking _tlcStaking = TLCStaking(tlcStaking); // Calculate mint amount which is equal to sizeDelta but convert decimal from 1e30 to 1e18 // This is to make the TLC token composable as ERC20 with regular 18 decimals, also wighted uint256 weight = marketWeights[_marketIndex] == 0 ? BPS : marketWeights[_marketIndex]; uint256 _mintAmount = _sizeDelta.mulDiv(weight, 1e16); // 1e16 = (1e30 / 1e18) * BPS, optimized math _tlc.mint(address(this), _mintAmount); _tlc.approve(address(_tlcStaking), _mintAmount); _tlcStaking.deposit(_primaryAccount, _mintAmount); } function setMarketWeight(uint256 _marketIndex, uint256 _weight) external onlyOwner { emit LogSetMarketWeight(_marketIndex, marketWeights[_marketIndex], _weight); marketWeights[_marketIndex] = _weight; } function setWhitelistedCallers(address[] calldata _callers, bool[] calldata _isWhitelisteds) external onlyOwner { if (_callers.length != _isWhitelisteds.length) revert TLCHook_BadArgs(); for (uint256 i = 0; i < _callers.length; ) { whitelistedCallers[_callers[i]] = _isWhitelisteds[i]; emit LogSetWhitelistedCaller(_callers[i], _isWhitelisteds[i]); unchecked { ++i; } } } /// @custom:oz-upgrades-unsafe-allow constructor constructor() { _disableInitializers(); } }
查找差异