@zoralabs/coins 2.4.1 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.abi-stability +923 -0
- package/.turbo/turbo-build$colon$js.log +112 -110
- package/CHANGELOG.md +19 -0
- package/abis/BaseCoin.json +18 -0
- package/abis/ContentCoin.json +18 -0
- package/abis/CreatorCoin.json +18 -0
- package/abis/IHasCreationInfo.json +20 -0
- package/dist/index.cjs +30 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -1
- package/dist/wagmiGenerated.d.ts +42 -0
- package/dist/wagmiGenerated.d.ts.map +1 -1
- package/package/wagmiGenerated.ts +30 -0
- package/package.json +3 -1
- package/src/BaseCoin.sol +32 -2
- package/src/hooks/ZoraV4CoinHook.sol +60 -3
- package/src/interfaces/IHasCreationInfo.sol +12 -0
- package/src/libs/CoinConstants.sol +16 -0
- package/src/libs/CoinSetup.sol +7 -1
- package/src/libs/V3ToV4SwapLib.sol +7 -3
- package/src/version/ContractVersionBase.sol +1 -1
- package/test/CoinUniV4.t.sol +4 -0
- package/test/ContentCoinRewards.t.sol +1 -0
- package/test/CreatorCoinRewards.t.sol +1 -0
- package/test/LaunchFee.t.sol +286 -0
package/dist/wagmiGenerated.d.ts
CHANGED
|
@@ -253,6 +253,20 @@ export declare const baseCoinABI: readonly [{
|
|
|
253
253
|
readonly type: "string";
|
|
254
254
|
}];
|
|
255
255
|
readonly stateMutability: "pure";
|
|
256
|
+
}, {
|
|
257
|
+
readonly type: "function";
|
|
258
|
+
readonly inputs: readonly [];
|
|
259
|
+
readonly name: "creationInfo";
|
|
260
|
+
readonly outputs: readonly [{
|
|
261
|
+
readonly name: "creationTimestamp";
|
|
262
|
+
readonly internalType: "uint256";
|
|
263
|
+
readonly type: "uint256";
|
|
264
|
+
}, {
|
|
265
|
+
readonly name: "isDeploying";
|
|
266
|
+
readonly internalType: "bool";
|
|
267
|
+
readonly type: "bool";
|
|
268
|
+
}];
|
|
269
|
+
readonly stateMutability: "view";
|
|
256
270
|
}, {
|
|
257
271
|
readonly type: "function";
|
|
258
272
|
readonly inputs: readonly [];
|
|
@@ -2029,6 +2043,20 @@ export declare const contentCoinABI: readonly [{
|
|
|
2029
2043
|
readonly type: "string";
|
|
2030
2044
|
}];
|
|
2031
2045
|
readonly stateMutability: "pure";
|
|
2046
|
+
}, {
|
|
2047
|
+
readonly type: "function";
|
|
2048
|
+
readonly inputs: readonly [];
|
|
2049
|
+
readonly name: "creationInfo";
|
|
2050
|
+
readonly outputs: readonly [{
|
|
2051
|
+
readonly name: "creationTimestamp";
|
|
2052
|
+
readonly internalType: "uint256";
|
|
2053
|
+
readonly type: "uint256";
|
|
2054
|
+
}, {
|
|
2055
|
+
readonly name: "isDeploying";
|
|
2056
|
+
readonly internalType: "bool";
|
|
2057
|
+
readonly type: "bool";
|
|
2058
|
+
}];
|
|
2059
|
+
readonly stateMutability: "view";
|
|
2032
2060
|
}, {
|
|
2033
2061
|
readonly type: "function";
|
|
2034
2062
|
readonly inputs: readonly [];
|
|
@@ -3509,6 +3537,20 @@ export declare const creatorCoinABI: readonly [{
|
|
|
3509
3537
|
readonly type: "string";
|
|
3510
3538
|
}];
|
|
3511
3539
|
readonly stateMutability: "pure";
|
|
3540
|
+
}, {
|
|
3541
|
+
readonly type: "function";
|
|
3542
|
+
readonly inputs: readonly [];
|
|
3543
|
+
readonly name: "creationInfo";
|
|
3544
|
+
readonly outputs: readonly [{
|
|
3545
|
+
readonly name: "creationTimestamp";
|
|
3546
|
+
readonly internalType: "uint256";
|
|
3547
|
+
readonly type: "uint256";
|
|
3548
|
+
}, {
|
|
3549
|
+
readonly name: "isDeploying";
|
|
3550
|
+
readonly internalType: "bool";
|
|
3551
|
+
readonly type: "bool";
|
|
3552
|
+
}];
|
|
3553
|
+
readonly stateMutability: "view";
|
|
3512
3554
|
}, {
|
|
3513
3555
|
readonly type: "function";
|
|
3514
3556
|
readonly inputs: readonly [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wagmiGenerated.d.ts","sourceRoot":"","sources":["../package/wagmiGenerated.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2FjB,CAAA;AAMV,eAAO,MAAM,WAAW
|
|
1
|
+
{"version":3,"file":"wagmiGenerated.d.ts","sourceRoot":"","sources":["../package/wagmiGenerated.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2FjB,CAAA;AAMV,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+jCd,CAAA;AAMV,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkM7B,CAAA;AAMV,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAilCjB,CAAA;AAMV,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0pCjB,CAAA;AAMV,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyfd,CAAA;AAMV,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuBzB,CAAA;AAMV,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkIpB,CAAA;AAMV,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAymBrB,CAAA;AAMV,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAu6BpB,CAAA"}
|
|
@@ -187,6 +187,16 @@ export const baseCoinABI = [
|
|
|
187
187
|
outputs: [{ name: '', internalType: 'string', type: 'string' }],
|
|
188
188
|
stateMutability: 'pure',
|
|
189
189
|
},
|
|
190
|
+
{
|
|
191
|
+
type: 'function',
|
|
192
|
+
inputs: [],
|
|
193
|
+
name: 'creationInfo',
|
|
194
|
+
outputs: [
|
|
195
|
+
{ name: 'creationTimestamp', internalType: 'uint256', type: 'uint256' },
|
|
196
|
+
{ name: 'isDeploying', internalType: 'bool', type: 'bool' },
|
|
197
|
+
],
|
|
198
|
+
stateMutability: 'view',
|
|
199
|
+
},
|
|
190
200
|
{
|
|
191
201
|
type: 'function',
|
|
192
202
|
inputs: [],
|
|
@@ -1488,6 +1498,16 @@ export const contentCoinABI = [
|
|
|
1488
1498
|
outputs: [{ name: '', internalType: 'string', type: 'string' }],
|
|
1489
1499
|
stateMutability: 'pure',
|
|
1490
1500
|
},
|
|
1501
|
+
{
|
|
1502
|
+
type: 'function',
|
|
1503
|
+
inputs: [],
|
|
1504
|
+
name: 'creationInfo',
|
|
1505
|
+
outputs: [
|
|
1506
|
+
{ name: 'creationTimestamp', internalType: 'uint256', type: 'uint256' },
|
|
1507
|
+
{ name: 'isDeploying', internalType: 'bool', type: 'bool' },
|
|
1508
|
+
],
|
|
1509
|
+
stateMutability: 'view',
|
|
1510
|
+
},
|
|
1491
1511
|
{
|
|
1492
1512
|
type: 'function',
|
|
1493
1513
|
inputs: [],
|
|
@@ -2596,6 +2616,16 @@ export const creatorCoinABI = [
|
|
|
2596
2616
|
outputs: [{ name: '', internalType: 'string', type: 'string' }],
|
|
2597
2617
|
stateMutability: 'pure',
|
|
2598
2618
|
},
|
|
2619
|
+
{
|
|
2620
|
+
type: 'function',
|
|
2621
|
+
inputs: [],
|
|
2622
|
+
name: 'creationInfo',
|
|
2623
|
+
outputs: [
|
|
2624
|
+
{ name: 'creationTimestamp', internalType: 'uint256', type: 'uint256' },
|
|
2625
|
+
{ name: 'isDeploying', internalType: 'bool', type: 'bool' },
|
|
2626
|
+
],
|
|
2627
|
+
stateMutability: 'view',
|
|
2628
|
+
},
|
|
2599
2629
|
{
|
|
2600
2630
|
type: 'function',
|
|
2601
2631
|
inputs: [],
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zoralabs/coins",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.5.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.cjs",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -49,6 +49,8 @@
|
|
|
49
49
|
"prettier:check": "prettier --check 'src/**/*.sol' 'test/**/*.sol'",
|
|
50
50
|
"prettier:write": "prettier --write 'src/**/*.sol' 'test/**/*.sol'",
|
|
51
51
|
"test": "forge test -vv",
|
|
52
|
+
"abi-check:check": "../../scripts/abi-check.sh check",
|
|
53
|
+
"abi-check:generate": "../../scripts/abi-check.sh generate",
|
|
52
54
|
"test-gas": "forge test --gas-report",
|
|
53
55
|
"update-contract-version": "pnpm exec update-contract-version",
|
|
54
56
|
"wagmi:generate": "pnpm run build:contracts:minimal && wagmi generate && pnpm exec rename-generated-abi-casing ./package/wagmiGenerated.ts"
|
package/src/BaseCoin.sol
CHANGED
|
@@ -11,6 +11,7 @@ import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
|
|
|
11
11
|
import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
|
|
12
12
|
import {ICoin, IHasTotalSupplyForPositions, IHasCoinType} from "./interfaces/ICoin.sol";
|
|
13
13
|
import {IHasRewardsRecipients} from "./interfaces/IHasRewardsRecipients.sol";
|
|
14
|
+
import {IHasCreationInfo} from "./interfaces/IHasCreationInfo.sol";
|
|
14
15
|
import {ICoinComments} from "./interfaces/ICoinComments.sol";
|
|
15
16
|
import {IERC7572} from "./interfaces/IERC7572.sol";
|
|
16
17
|
import {IUniswapV3Factory} from "./interfaces/IUniswapV3Factory.sol";
|
|
@@ -52,7 +53,7 @@ import {PoolState} from "./types/PoolState.sol";
|
|
|
52
53
|
\$$$$$$ | $$$$$$ |$$$$$$\ $$ | \$$ |
|
|
53
54
|
\______/ \______/ \______|\__| \__|
|
|
54
55
|
*/
|
|
55
|
-
abstract contract BaseCoin is ICoin, ContractVersionBase, ERC20PermitUpgradeable, MultiOwnable, ERC165Upgradeable {
|
|
56
|
+
abstract contract BaseCoin is ICoin, IHasCreationInfo, ContractVersionBase, ERC20PermitUpgradeable, MultiOwnable, ERC165Upgradeable {
|
|
56
57
|
using SafeERC20 for IERC20;
|
|
57
58
|
|
|
58
59
|
/// @notice The address of the protocol rewards contract
|
|
@@ -84,6 +85,11 @@ abstract contract BaseCoin is ICoin, ContractVersionBase, ERC20PermitUpgradeable
|
|
|
84
85
|
string private _name;
|
|
85
86
|
/// @notice The symbol of the token
|
|
86
87
|
string private _symbol;
|
|
88
|
+
/// @notice The timestamp when the coin was created
|
|
89
|
+
uint256 private _creationTimestamp;
|
|
90
|
+
|
|
91
|
+
/// @dev Transient storage slot for tracking deployment state
|
|
92
|
+
bytes32 private constant _IS_DEPLOYING_SLOT = keccak256("BaseCoin.isDeploying");
|
|
87
93
|
|
|
88
94
|
/**
|
|
89
95
|
* @notice The constructor for the static Coin contract deployment shared across all Coins.
|
|
@@ -125,6 +131,12 @@ abstract contract BaseCoin is ICoin, ContractVersionBase, ERC20PermitUpgradeable
|
|
|
125
131
|
uint160 sqrtPriceX96,
|
|
126
132
|
PoolConfiguration memory poolConfiguration_
|
|
127
133
|
) public virtual initializer {
|
|
134
|
+
// Set transient deploying flag for launch fee bypass
|
|
135
|
+
_setIsDeploying(true);
|
|
136
|
+
|
|
137
|
+
// Record creation timestamp for launch fee calculation
|
|
138
|
+
_creationTimestamp = block.timestamp;
|
|
139
|
+
|
|
128
140
|
currency = currency_;
|
|
129
141
|
// we need to set this before initialization, because
|
|
130
142
|
// distributing currency relies on the poolkey being set since the hooks
|
|
@@ -253,7 +265,25 @@ abstract contract BaseCoin is ICoin, ContractVersionBase, ERC20PermitUpgradeable
|
|
|
253
265
|
interfaceId == type(IHasPoolKey).interfaceId ||
|
|
254
266
|
interfaceId == type(IHasCoinType).interfaceId ||
|
|
255
267
|
interfaceId == type(IHasTotalSupplyForPositions).interfaceId ||
|
|
256
|
-
interfaceId == type(IHasSwapPath).interfaceId
|
|
268
|
+
interfaceId == type(IHasSwapPath).interfaceId ||
|
|
269
|
+
interfaceId == type(IHasCreationInfo).interfaceId;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
/// @inheritdoc IHasCreationInfo
|
|
273
|
+
function creationInfo() external view returns (uint256 creationTimestamp, bool isDeploying) {
|
|
274
|
+
creationTimestamp = _creationTimestamp;
|
|
275
|
+
bytes32 slot = _IS_DEPLOYING_SLOT;
|
|
276
|
+
assembly {
|
|
277
|
+
isDeploying := tload(slot)
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
/// @dev Sets the transient deploying flag
|
|
282
|
+
function _setIsDeploying(bool value) internal {
|
|
283
|
+
bytes32 slot = _IS_DEPLOYING_SLOT;
|
|
284
|
+
assembly {
|
|
285
|
+
tstore(slot, value)
|
|
286
|
+
}
|
|
257
287
|
}
|
|
258
288
|
|
|
259
289
|
/// @dev Overrides ERC20's _update function to emit a superset `CoinTransfer` event
|
|
@@ -24,6 +24,8 @@ import {IZoraV4CoinHook} from "../interfaces/IZoraV4CoinHook.sol";
|
|
|
24
24
|
import {IMsgSender} from "../interfaces/IMsgSender.sol";
|
|
25
25
|
import {ITrustedMsgSenderProviderLookup} from "../interfaces/ITrustedMsgSenderProviderLookup.sol";
|
|
26
26
|
import {ICoin, IHasSwapPath, IHasRewardsRecipients, IHasCoinType} from "../interfaces/ICoin.sol";
|
|
27
|
+
import {IHasCreationInfo} from "../interfaces/IHasCreationInfo.sol";
|
|
28
|
+
import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
|
|
27
29
|
import {IDeployedCoinVersionLookup} from "../interfaces/IDeployedCoinVersionLookup.sol";
|
|
28
30
|
import {IUpgradeableV4Hook, IUpgradeableDestinationV4Hook, IUpgradeableDestinationV4HookWithUpdateableFee, BurnedPosition} from "../interfaces/IUpgradeableV4Hook.sol";
|
|
29
31
|
import {IHooksUpgradeGate} from "../interfaces/IHooksUpgradeGate.sol";
|
|
@@ -295,8 +297,9 @@ contract ZoraV4CoinHook is
|
|
|
295
297
|
V4Liquidity.lockAndMint(poolManager, key, positions);
|
|
296
298
|
}
|
|
297
299
|
|
|
298
|
-
/// @notice Transiently stores the tick before a swap.
|
|
300
|
+
/// @notice Transiently stores the tick before a swap and calculates the launch fee.
|
|
299
301
|
/// @dev This is used in `_afterSwap` to determine the ticks crossed during the swap.
|
|
302
|
+
/// Also returns a dynamic fee that decays from 99% to 1% over 10 seconds after coin creation.
|
|
300
303
|
function _beforeSwap(
|
|
301
304
|
address sender,
|
|
302
305
|
PoolKey calldata key,
|
|
@@ -313,7 +316,56 @@ contract ZoraV4CoinHook is
|
|
|
313
316
|
TransientSlot.Int256Slot slot = TransientSlot.asInt256(CoinConstants._BEFORE_SWAP_TICK_SLOT);
|
|
314
317
|
TransientSlot.tstore(slot, int256(currentTick));
|
|
315
318
|
|
|
316
|
-
|
|
319
|
+
// Calculate launch fee
|
|
320
|
+
bytes32 poolKeyHash = CoinCommon.hashPoolKey(key);
|
|
321
|
+
address coin = poolCoins[poolKeyHash].coin;
|
|
322
|
+
uint24 fee = _calculateLaunchFee(coin);
|
|
323
|
+
|
|
324
|
+
return (BaseHook.beforeSwap.selector, BeforeSwapDelta.wrap(0), fee);
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
/// @notice Calculates the launch fee based on coin creation time
|
|
328
|
+
/// @dev Returns fee with OVERRIDE_FEE_FLAG to signal V4 to use this fee.
|
|
329
|
+
/// Fee decays linearly from LAUNCH_FEE_START (99%) to LP_FEE_V4 (1%) over LAUNCH_FEE_DURATION.
|
|
330
|
+
/// Returns LP_FEE_V4 for legacy coins that don't support IHasCreationInfo.
|
|
331
|
+
/// Bypasses launch fee (returns LP_FEE_V4) during initial coin deployment.
|
|
332
|
+
/// @param coin The coin address
|
|
333
|
+
/// @return fee The calculated fee with OVERRIDE_FEE_FLAG
|
|
334
|
+
function _calculateLaunchFee(address coin) internal view returns (uint24 fee) {
|
|
335
|
+
// Check if coin supports creation info interface (legacy coins won't)
|
|
336
|
+
try IERC165(coin).supportsInterface(type(IHasCreationInfo).interfaceId) returns (bool supported) {
|
|
337
|
+
if (!supported) {
|
|
338
|
+
// Legacy coin - use normal LP fee
|
|
339
|
+
return CoinConstants.OVERRIDE_FEE_FLAG | CoinConstants.LP_FEE_V4;
|
|
340
|
+
}
|
|
341
|
+
} catch {
|
|
342
|
+
// supportsInterface call failed - use normal LP fee
|
|
343
|
+
return CoinConstants.OVERRIDE_FEE_FLAG | CoinConstants.LP_FEE_V4;
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
// Get creation info from coin
|
|
347
|
+
(uint256 creationTimestamp, bool isDeploying) = IHasCreationInfo(coin).creationInfo();
|
|
348
|
+
|
|
349
|
+
// Bypass launch fee during initial deployment
|
|
350
|
+
if (isDeploying) {
|
|
351
|
+
return CoinConstants.OVERRIDE_FEE_FLAG | CoinConstants.LP_FEE_V4;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
// Calculate elapsed time since creation
|
|
355
|
+
uint256 elapsed = block.timestamp - creationTimestamp;
|
|
356
|
+
|
|
357
|
+
// If launch fee duration has passed, use normal LP fee
|
|
358
|
+
if (elapsed >= CoinConstants.LAUNCH_FEE_DURATION) {
|
|
359
|
+
return CoinConstants.OVERRIDE_FEE_FLAG | CoinConstants.LP_FEE_V4;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
// Linear decay: fee = startFee - (elapsed / duration) * (startFee - endFee)
|
|
363
|
+
uint256 startFee = CoinConstants.LAUNCH_FEE_START;
|
|
364
|
+
uint256 endFee = CoinConstants.LP_FEE_V4;
|
|
365
|
+
uint256 feeReduction = (elapsed * (startFee - endFee)) / CoinConstants.LAUNCH_FEE_DURATION;
|
|
366
|
+
fee = uint24(startFee - feeReduction);
|
|
367
|
+
|
|
368
|
+
return CoinConstants.OVERRIDE_FEE_FLAG | fee;
|
|
317
369
|
}
|
|
318
370
|
|
|
319
371
|
/// @notice Internal fn called when a swap is executed.
|
|
@@ -383,7 +435,12 @@ contract ZoraV4CoinHook is
|
|
|
383
435
|
}
|
|
384
436
|
|
|
385
437
|
(int24 tickBeforeSwap, int24 tickAfterSwap) = _getSwapTickRange(key);
|
|
386
|
-
|
|
438
|
+
|
|
439
|
+
// Derive fill direction from actual tick movement
|
|
440
|
+
if (tickAfterSwap != tickBeforeSwap) {
|
|
441
|
+
bool isCurrency0 = tickAfterSwap > tickBeforeSwap;
|
|
442
|
+
zoraLimitOrderBook.fill(key, isCurrency0, tickBeforeSwap, tickAfterSwap, CoinConstants.SENTINEL_DEFAULT_LIMIT_ORDER_FILL_COUNT, address(0));
|
|
443
|
+
}
|
|
387
444
|
|
|
388
445
|
return (BaseHook.afterSwap.selector, 0);
|
|
389
446
|
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity ^0.8.23;
|
|
3
|
+
|
|
4
|
+
/// @title IHasCreationInfo
|
|
5
|
+
/// @notice Interface for coins that support launch fee functionality
|
|
6
|
+
/// @dev Legacy coins that don't implement this interface will use the normal LP fee
|
|
7
|
+
interface IHasCreationInfo {
|
|
8
|
+
/// @notice Returns creation info for the coin used by the launch fee calculation
|
|
9
|
+
/// @return creationTimestamp The block.timestamp when the coin was initialized
|
|
10
|
+
/// @return isDeploying True if the coin is being deployed (transient), false otherwise
|
|
11
|
+
function creationInfo() external view returns (uint256 creationTimestamp, bool isDeploying);
|
|
12
|
+
}
|
|
@@ -53,6 +53,22 @@ library CoinConstants {
|
|
|
53
53
|
/// @dev 10000 basis points = 1%
|
|
54
54
|
uint24 internal constant LP_FEE_V4 = 10_000;
|
|
55
55
|
|
|
56
|
+
/// @notice Flag to enable dynamic fees for the pool
|
|
57
|
+
/// @dev When set in pool key fee, enables hook to override fee per-swap
|
|
58
|
+
uint24 internal constant DYNAMIC_FEE_FLAG = 0x800000;
|
|
59
|
+
|
|
60
|
+
/// @notice Flag to override the fee in beforeSwap return value
|
|
61
|
+
/// @dev Combined with fee value to signal V4 to use the returned fee
|
|
62
|
+
uint24 internal constant OVERRIDE_FEE_FLAG = 0x400000;
|
|
63
|
+
|
|
64
|
+
/// @notice Starting fee for launch fee (99%)
|
|
65
|
+
/// @dev 990,000 pips = 99% (1,000,000 pips = 100%)
|
|
66
|
+
uint24 internal constant LAUNCH_FEE_START = 990_000;
|
|
67
|
+
|
|
68
|
+
/// @notice Duration over which launch fee decays from start to end fee
|
|
69
|
+
/// @dev 10 seconds
|
|
70
|
+
uint256 internal constant LAUNCH_FEE_DURATION = 10 seconds;
|
|
71
|
+
|
|
56
72
|
/// @notice The spacing for 1% pools
|
|
57
73
|
/// @dev 200 ticks
|
|
58
74
|
int24 internal constant TICK_SPACING = 200;
|
package/src/libs/CoinSetup.sol
CHANGED
|
@@ -36,7 +36,13 @@ library CoinSetup {
|
|
|
36
36
|
Currency currency0 = isCoinToken0 ? Currency.wrap(coin) : Currency.wrap(currency);
|
|
37
37
|
Currency currency1 = isCoinToken0 ? Currency.wrap(currency) : Currency.wrap(coin);
|
|
38
38
|
|
|
39
|
-
poolKey = PoolKey({
|
|
39
|
+
poolKey = PoolKey({
|
|
40
|
+
currency0: currency0,
|
|
41
|
+
currency1: currency1,
|
|
42
|
+
fee: CoinConstants.DYNAMIC_FEE_FLAG,
|
|
43
|
+
tickSpacing: CoinConstants.TICK_SPACING,
|
|
44
|
+
hooks: hooks
|
|
45
|
+
});
|
|
40
46
|
}
|
|
41
47
|
|
|
42
48
|
function setupPoolWithVersion(
|
|
@@ -56,6 +56,7 @@ library V3ToV4SwapLib {
|
|
|
56
56
|
struct V4SwapResult {
|
|
57
57
|
uint128 outputAmount; // Final output amount
|
|
58
58
|
Currency outputCurrency; // Final output currency
|
|
59
|
+
BalanceDelta targetPoolDelta; // Delta from final (target) pool swap
|
|
59
60
|
}
|
|
60
61
|
|
|
61
62
|
// ============ VALIDATION ============
|
|
@@ -167,6 +168,7 @@ library V3ToV4SwapLib {
|
|
|
167
168
|
function executeV4MultiHopSwap(IPoolManager poolManager, V4SwapParams memory params) internal returns (V4SwapResult memory result) {
|
|
168
169
|
Currency currentCurrency = params.startingCurrency;
|
|
169
170
|
uint128 currentAmount = uint128(params.amountIn);
|
|
171
|
+
BalanceDelta lastDelta;
|
|
170
172
|
|
|
171
173
|
// Execute swaps through the route
|
|
172
174
|
for (uint256 i = 0; i < params.v4Route.length; i++) {
|
|
@@ -175,14 +177,14 @@ library V3ToV4SwapLib {
|
|
|
175
177
|
// Determine swap direction based on current currency
|
|
176
178
|
bool zeroForOne = currentCurrency == poolKey.currency0;
|
|
177
179
|
|
|
178
|
-
|
|
180
|
+
lastDelta = poolManager.swap(
|
|
179
181
|
poolKey,
|
|
180
182
|
SwapParams(zeroForOne, -(int128(currentAmount)), zeroForOne ? TickMath.MIN_SQRT_PRICE + 1 : TickMath.MAX_SQRT_PRICE - 1),
|
|
181
183
|
""
|
|
182
184
|
);
|
|
183
185
|
|
|
184
186
|
// Extract output amount from delta
|
|
185
|
-
uint128 outputAmount = zeroForOne ? uint128(
|
|
187
|
+
uint128 outputAmount = zeroForOne ? uint128(lastDelta.amount1()) : uint128(lastDelta.amount0());
|
|
186
188
|
|
|
187
189
|
// Update for next iteration
|
|
188
190
|
currentAmount = outputAmount;
|
|
@@ -191,6 +193,7 @@ library V3ToV4SwapLib {
|
|
|
191
193
|
|
|
192
194
|
result.outputAmount = currentAmount;
|
|
193
195
|
result.outputCurrency = currentCurrency;
|
|
196
|
+
result.targetPoolDelta = lastDelta;
|
|
194
197
|
}
|
|
195
198
|
|
|
196
199
|
// ============ DELTA SETTLEMENT ============
|
|
@@ -212,7 +215,8 @@ library V3ToV4SwapLib {
|
|
|
212
215
|
) internal {
|
|
213
216
|
// Pay the input amount
|
|
214
217
|
if (inputCurrency.isAddressZero()) {
|
|
215
|
-
// For ETH, settle with msg.value
|
|
218
|
+
// For ETH, sync and settle with msg.value
|
|
219
|
+
poolManager.sync(inputCurrency);
|
|
216
220
|
poolManager.settle{value: inputAmount}();
|
|
217
221
|
} else {
|
|
218
222
|
// For ERC20, sync and transfer
|
|
@@ -9,6 +9,6 @@ import {IVersionedContract} from "@zoralabs/shared-contracts/interfaces/IVersion
|
|
|
9
9
|
contract ContractVersionBase is IVersionedContract {
|
|
10
10
|
/// @notice The version of the contract
|
|
11
11
|
function contractVersion() external pure override returns (string memory) {
|
|
12
|
-
return "2.
|
|
12
|
+
return "2.5.0";
|
|
13
13
|
}
|
|
14
14
|
}
|
package/test/CoinUniV4.t.sol
CHANGED
|
@@ -34,6 +34,7 @@ import {Hooks} from "@uniswap/v4-core/src/libraries/Hooks.sol";
|
|
|
34
34
|
import {ICoin, IHasSwapPath, PathKey} from "../src/interfaces/ICoin.sol";
|
|
35
35
|
import {IDeployedCoinVersionLookup} from "../src/interfaces/IDeployedCoinVersionLookup.sol";
|
|
36
36
|
|
|
37
|
+
/// forge-config: default.isolate = true
|
|
37
38
|
contract CoinUniV4Test is BaseTest {
|
|
38
39
|
MockERC20 internal mockERC20A;
|
|
39
40
|
MockERC20 internal mockERC20B;
|
|
@@ -113,6 +114,9 @@ contract CoinUniV4Test is BaseTest {
|
|
|
113
114
|
address currency = address(mockERC20A);
|
|
114
115
|
_deployV4Coin(currency);
|
|
115
116
|
|
|
117
|
+
// Skip past launch fee period to test normal LP fees
|
|
118
|
+
vm.warp(block.timestamp + 1 days);
|
|
119
|
+
|
|
116
120
|
uint128 amountIn = uint128(0.00001 ether);
|
|
117
121
|
uint128 minAmountOut = uint128(0);
|
|
118
122
|
|
|
@@ -17,6 +17,7 @@ import {CreatorCoin} from "../src/CreatorCoin.sol";
|
|
|
17
17
|
import {ICoin} from "../src/interfaces/ICoin.sol";
|
|
18
18
|
import {CoinConfigurationVersions} from "../src/libs/CoinConfigurationVersions.sol";
|
|
19
19
|
|
|
20
|
+
/// forge-config: default.isolate = true
|
|
20
21
|
contract ContentCoinRewardsTest is BaseTest {
|
|
21
22
|
ContentCoin internal contentCoin;
|
|
22
23
|
CreatorCoin internal backingCreatorCoin;
|
|
@@ -17,6 +17,7 @@ import {CreatorCoin} from "../src/CreatorCoin.sol";
|
|
|
17
17
|
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
|
|
18
18
|
import {CoinConfigurationVersions} from "../src/libs/CoinConfigurationVersions.sol";
|
|
19
19
|
|
|
20
|
+
/// forge-config: default.isolate = true
|
|
20
21
|
contract CreatorCoinRewardsTest is BaseTest {
|
|
21
22
|
CreatorCoin internal creatorCoin;
|
|
22
23
|
|