Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
146 commits
Select commit Hold shift + click to select a range
8357846
feat: MetaDAOFactory to verify party values instead of overwrite. Con…
Detoo Nov 6, 2025
f30a82c
Image Generation WIP
merisman Dec 15, 2025
1be7c46
Updating SVG image, wip
merisman Dec 16, 2025
acaf062
wip
merisman Dec 19, 2025
3a3cfda
without bottom decorations
merisman Dec 19, 2025
0dc4a5d
Filesize reduction and upgrade script
merisman Dec 19, 2025
cbe0e47
Updating units, spacing, other image improvements
merisman Dec 21, 2025
6988bc7
Deployed SVG Images
merisman Dec 24, 2025
373f650
Merge branch 'feat/partial-scripify' into dev-scrip-merge
merisman Jan 2, 2026
09bb07b
Merge pull request #61 from MetaLex-Tech/dev-scrip-merge
merisman Jan 2, 2026
beccbb7
scrip updates
merisman Jan 9, 2026
3e4a8d9
more tests, updates to scrip
merisman Jan 9, 2026
846e64d
v4 fee hooks; holder counter/limit
merisman Jan 16, 2026
f465295
fixing bugs
merisman Jan 16, 2026
c0f8bd7
v4 hook tests wip
merisman Jan 19, 2026
37ab245
adding V2 extensions for customProvisions
merisman Jan 21, 2026
6b519cb
Updates and tests
merisman Jan 27, 2026
fdae1ac
Adding new helper views
merisman Jan 27, 2026
73b873a
require cert be voided before unvoiding
merisman Jan 27, 2026
2efbe3e
Updates to voiding logic
merisman Jan 27, 2026
fdc19a9
additional tests
merisman Jan 28, 2026
018790b
Add external target for scripification
merisman Jan 28, 2026
a58ecde
Interface updates, external address fix
merisman Jan 29, 2026
9642f94
Initial upgrade script
merisman Jan 30, 2026
35a1f04
Ratio Updates
merisman Jan 31, 2026
7938a81
Add conversion tests wip
merisman Jan 31, 2026
a3c3ab6
three prime warrant
merisman Feb 6, 2026
9a34a5f
Control updates, minimum conversion and extras
merisman Feb 6, 2026
fe37d5b
V2 Extensions deploy
merisman Feb 6, 2026
8e9564d
test fix
merisman Feb 10, 2026
6728276
V2 Template Updates
merisman Feb 11, 2026
d692ce7
template update batch
merisman Feb 12, 2026
4b83c4e
Updates and fixes w/ POC tests
merisman Feb 12, 2026
2f96b45
Escrowed Signer and 2 sig support for certs
merisman Feb 13, 2026
208397a
CyberScrip improvement, removing updating cert details
merisman Feb 18, 2026
46cae5c
init deploy script
merisman Feb 20, 2026
ce88f3b
Additional tests, changes, size reductions.
merisman Feb 21, 2026
0666723
Updates to 2 signatures, endorsements, signing
merisman Feb 21, 2026
bc403b6
Before Upgrade
merisman Feb 23, 2026
73c54d6
deploy constant updates
merisman Feb 23, 2026
a0a5a86
LexCheX Renew Signature Fix
merisman Feb 26, 2026
d25493c
umia/parentco updates
merisman Mar 2, 2026
b58af7c
Add CyberScripDeployed event in deployCyberScrip
gpxl-dev Mar 3, 2026
b0a78b7
init zkpassport condition
merisman Mar 4, 2026
20a3567
Updates to certs during scripfication
merisman Mar 4, 2026
2797cc2
Merge pull request #83 from MetaLex-Tech/feat/cyberscrip-deployed-event
merisman Mar 4, 2026
8fe656e
fix: replay attack on expiry
Detoo Mar 5, 2026
33d8adc
fix: uncapped validity periods
Detoo Mar 5, 2026
65638e0
test: real sample data
Detoo Mar 5, 2026
19adad8
non-void and legal owner check in scripify
merisman Mar 6, 2026
d06c7ac
chore: create2 script for zkpassport conditions
Detoo Mar 6, 2026
5a692b2
Merge pull request #84 from MetaLex-Tech/feat/zk-passport-pr
merisman Mar 6, 2026
830ab6c
fix: nationality-exclusion checks and tests
Detoo Mar 6, 2026
b6164d1
feat: add sanction checks
Detoo Mar 6, 2026
4dde3b0
feat: add admin role to condition
Detoo Mar 6, 2026
f345868
chore: remove unused codes
Detoo Mar 6, 2026
62c28c3
test: add unit tests for submitProof()
Detoo Mar 6, 2026
8a8e3c4
test: increase coverage
Detoo Mar 6, 2026
fcc4bf1
fix: atomic initialization
Detoo Mar 6, 2026
f1c046c
wip: feat: PumpCoFactory and dev deploy scripts
Detoo Mar 9, 2026
fc0b3f1
wip: feat: PumpCoFactory.deployCyberCorpAndCreateRound()
Detoo Mar 9, 2026
2aa35c8
wip: feat: PumpCoFactory.deployCyberCorpAndCreateRound() without pare…
Detoo Mar 10, 2026
34084b8
chore: consolidate parameters and remove unused codes
Detoo Mar 10, 2026
e56153e
feat: validate first party values upon round creation
Detoo Mar 10, 2026
fb74a10
feat: approximate optional end time without modifying RoundManager
Detoo Mar 10, 2026
071ca3f
chore: submit test EOI after round creation
Detoo Mar 10, 2026
2dd11fa
wip: test: PumpCorpFactory
Detoo Mar 11, 2026
fac6277
wip: fix: meta signature
Detoo Mar 11, 2026
da5577e
fix: conditions not included in meta signature
Detoo Mar 11, 2026
6dd6960
test: signature malleability in test_RevertIf_AttackerSwapsOfficer. M…
Detoo Mar 11, 2026
2421dfb
test: signature malleability in all relevant tests
Detoo Mar 11, 2026
1fd3ae9
feat: verify full officer struct in meta signature
Detoo Mar 11, 2026
3742039
feat: verify the rest of params in meta signature. Rename to `deployC…
Detoo Mar 11, 2026
e82d973
scrip share pools
merisman Mar 12, 2026
047d368
chore: update deploy scripts
Detoo Mar 12, 2026
ec1d607
chore: reduce duplicate codes and revise tests
Detoo Mar 12, 2026
bb923b3
Updating certificate detail calls, and 'active' count of units scripi…
merisman Mar 12, 2026
d52b0f7
Removing old effective cert detail call
merisman Mar 13, 2026
9c7eb15
feat: add round-creation flag to restrict endTime reduction
Detoo Mar 13, 2026
403f475
feat: round ID conflict checks
Detoo Mar 13, 2026
4957d8a
test: release funds under restricted endTime reduction & disallowed t…
Detoo Mar 16, 2026
e188a78
test: add tests for real-world upgrades on RoundManager
Detoo Mar 16, 2026
4699337
Merge pull request #88 from MetaLex-Tech/feat/restrict-end-time
Detoo Mar 16, 2026
cb55fa3
Merge remote-tracking branch 'origin/feat/partial-scripify' into feat…
Detoo Mar 16, 2026
4859276
feat: adopt new RoundManager with restrictEndTimeReduction
Detoo Mar 16, 2026
2964858
fix: PumpCorpFactory deploy scripts intermediary dependencies
Detoo Mar 16, 2026
8cd65fd
fix: EIP-712 specs, enable LeXcheX and misc
Detoo Mar 17, 2026
bee2b20
chore: next deployment
Detoo Mar 17, 2026
86f8b9c
chore: make deploy script deterministic
Detoo Mar 17, 2026
3e0c4cb
test: fix PumpCorpFactory tests with leXcheX auth
Detoo Mar 18, 2026
a5ded1e
wip: chore: refactor PumpCorpFactory deploy script so we can use it i…
Detoo Mar 18, 2026
2b73b64
wip: chore: refactor PumpCorpFactory deploy script so we can use it i…
Detoo Mar 18, 2026
04bb6b5
chore: more refactoring
Detoo Mar 18, 2026
66e59c3
Adjustments to assigning/issuing legal ownership
merisman Mar 19, 2026
e16755b
test: integration tests on PumpCorpFactory with zkPassport
Detoo Mar 19, 2026
5bc0373
scrip pool tests,
merisman Mar 19, 2026
53f4550
chore: deploy dev zkPassport condition on Base
Detoo Mar 19, 2026
c044e8c
Initial new pool implemenation
merisman Mar 20, 2026
8c94c53
cutting deprecated scrip accounting functions
merisman Mar 20, 2026
546ab22
feat: OrCondition
Detoo Mar 20, 2026
700ab37
chore: remove unnecessary codes
Detoo Mar 20, 2026
d0c873c
test: add cases for zkPassport OR lexchex
Detoo Mar 20, 2026
d767795
chore: update zkPassport deploy scripts to deploy OrCondition(zkPassp…
Detoo Mar 20, 2026
dd4d4b1
Compile Filesize correction
merisman Mar 21, 2026
e5b71c3
updating error messages in issuance manager
merisman Mar 21, 2026
e72358c
post test net deploy 2.0.4
merisman Mar 23, 2026
5e297dd
Merge remote-tracking branch 'origin/feat/partial-scripify' into feat…
Detoo Mar 24, 2026
811b580
Merge remote-tracking branch 'origin/feat/partial-scripify' into feat…
Detoo Mar 24, 2026
0af0386
test: verifies proof submission events
Detoo Mar 24, 2026
7ff6f13
Merge branch 'feat/zk-passport-pr2' into feat/pump
Detoo Mar 24, 2026
ad6cd19
unit fixes, redeployed testnet
merisman Mar 25, 2026
9534054
feat: add per-rm fee overrides
Detoo Mar 25, 2026
fba651e
feat: backward compatibility for existing RoundManagers
Detoo Mar 25, 2026
0331b79
readding mint hook check
merisman Mar 25, 2026
f8c9999
fix: minor fixes
Detoo Mar 25, 2026
0053326
chore: minor refactoring
Detoo Mar 25, 2026
8aba9a1
feat: remove USD sign from URI builder to accommodate non-USD payments
Detoo Mar 25, 2026
f6f17b1
Merge pull request #90 from MetaLex-Tech/feat/round-manager-fee-overr…
Detoo Mar 25, 2026
63f3d94
Merge pull request #91 from MetaLex-Tech/feat/universal-investment-va…
Detoo Mar 25, 2026
7f7103c
New event, reverting mint restrictions
merisman Mar 25, 2026
7c31a0e
Merge branch 'feat/partial-scripify' of https://github.com/MetaLex-Te…
merisman Mar 25, 2026
9d0721a
test: fix deprecated codes
Detoo Mar 26, 2026
b392f1d
Merge remote-tracking branch 'origin/feat/partial-scripify' into feat…
Detoo Mar 26, 2026
a2fbf14
chore: prepare for staging deployment
Detoo Mar 27, 2026
1cc36a7
new events and scrip share read fx
merisman Mar 27, 2026
dc8711c
Merge branch 'feat/partial-scripify' of https://github.com/MetaLex-Te…
merisman Mar 27, 2026
6452508
chore: more dev deployment
Detoo Mar 27, 2026
b931bd9
chore: next staging deployment
Detoo Mar 27, 2026
b206469
Direct Issuing Updates
merisman Mar 27, 2026
9660747
Update to tests, predeploy
merisman Mar 27, 2026
b00e9d3
chore: prepare for production deployment
Detoo Mar 31, 2026
98aa167
Merge remote-tracking branch 'origin/feat/partial-scripify' into feat…
Detoo Mar 31, 2026
df0ba92
Updated _selectRecertToken
merisman Mar 31, 2026
ef65b44
ACE Type addition
merisman Apr 3, 2026
8046f93
Merge branch 'feat/partial-scripify' into feat/pump
Detoo Apr 3, 2026
a87ac83
fix: bump deploy version to match its peers
Detoo Apr 3, 2026
3f86462
Merge branch 'feat/partial-scripify' into feat/pump
Detoo Apr 3, 2026
b95359f
chore: remove unused files
Detoo Apr 3, 2026
858fe7e
chore: fix deploy scripts
Detoo Apr 3, 2026
bf342e8
Merge pull request #93 from MetaLex-Tech/feat/pump
merisman Apr 3, 2026
81546e7
Updating dealmanager version # to match
merisman Apr 3, 2026
49b9303
chore: prepare for production deployment
Detoo Apr 3, 2026
49122ad
chore: deploy staging. Misc fixes
Detoo Apr 4, 2026
a758410
fix: broken uriBuilder dependencies in staging pumpCorpFactory
Detoo Apr 4, 2026
70510e3
feat: PumpCorpFactory to set all deployed RoundManager fees to zero
Detoo Apr 4, 2026
32eea2b
script updates
merisman Apr 6, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,4 @@ docs/
# IDE
/.idea/
/.vscode/
/.claude/
6 changes: 5 additions & 1 deletion foundry.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,11 @@ out = "out"
libs = ["lib", "dependencies"]
optimizer = true
optimizer_runs = 15
fs_permissions = [{ access = "read", path = "./script/res" }]
extra_output_files = ['abi']
fs_permissions = [
{ access = "read", path = "./script/res" },
{ access = "read", path = "./test/res" }
]

[fmt]
sort_imports = true
Expand Down
48 changes: 48 additions & 0 deletions script/UpdateCertificate.s.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.28;

import {Script} from "forge-std/Script.sol";
import {console} from "forge-std/console.sol";
import {IIssuanceManager} from "../src/interfaces/IIssuanceManager.sol";
import {CertificateDetails} from "../src/storage/CyberCertPrinterStorage.sol";

/// @notice Script to update certificate details via the IssuanceManager
/// @dev Run with: forge script script/UpdateCertificate.s.sol --rpc-url $RPC_URL --broadcast
contract UpdateCertificate is Script {
function run() public {
uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY_MAIN");
address deployer = vm.addr(deployerPrivateKey);

address issuanceManagerAddress = 0x23c3a16AdB129Da2FCB297C63F6015C201dB2AC1;
address printerAddress = 0xCB00123c91DB928CcF885FCE4f30919B0caB5845;
uint256 tokenId = 0;


// Prepare the details struct based on the provided image
CertificateDetails memory details = CertificateDetails({
signingOfficerName: "Test Officer",
signingOfficerTitle: "CEO",
investmentAmountUSD: 1000000000000000000,
issuerUSDValuationAtTimeOfInvestment: 100000000000000000000, // 1e20
unitsRepresented: 1000000000000000000, // 1e20
legalDetails: "Dispute resolution method: Binding Arbitration\nGoverning law: Delaware",
// Use hex literal for raw byte encoding
extensionData: hex"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000000004"
});

console.log("=== Updating Certificate Details via IssuanceManager ===");
console.log("IssuanceManager:", issuanceManagerAddress);
console.log("Printer Address:", printerAddress);
console.log("Token ID:", tokenId);
console.log("Caller:", deployer);

vm.startBroadcast(deployerPrivateKey);

// Call updateCertificateDetails on the IssuanceManager
// IIssuanceManager(issuanceManagerAddress).updateCertificateDetails(printerAddress, tokenId, details);

vm.stopBroadcast();

console.log("Update call via IssuanceManager broadcasted successfully!");
}
}
156 changes: 156 additions & 0 deletions script/add-spa-plus-templates.s.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,156 @@
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.18;

import {Script} from "forge-std/Script.sol";
import {CyberAgreementRegistry} from "../src/CyberAgreementRegistry.sol";

contract AddSpaPlusTemplatesScript is Script {
address internal constant REGISTRY =
0xa9E808B8eCBB60Bb19abF026B5b863215BC4c134;

function run() external {
uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY_MAIN");
vm.startBroadcast(deployerPrivateKey);

string[] memory globalFieldsSafe = _globalFieldsSafe();
string[] memory globalFieldsSafeTokenWarrant = _globalFieldsSafeTokenWarrant();
string[] memory globalFieldsSafte = _globalFieldsSafte();
string[] memory globalFieldsSaft = _globalFieldsSaft();
string[] memory partyFields = _partyFields();

CyberAgreementRegistry(REGISTRY).createTemplate(
bytes32(bytes("mlx_safe_reg_d_v1_3")),
"mlx_safe_reg_d_v1_3",
"IPFS://bafybeih7l2kxncjuwrfgv5gnmpcik43dnn4pxpe4it4u7ti2hgfgrlot2a",
globalFieldsSafe,
partyFields
);
CyberAgreementRegistry(REGISTRY).createTemplate(
bytes32(bytes("mlx_safe_reg_s_v1_3")),
"mlx_safe_reg_s_v1_3",
"IPFS://bafybeieh7jn553jmrjmwee3dsvwf5hkedomey2vhubc3mumlewfpumvlae",
globalFieldsSafe,
partyFields
);
CyberAgreementRegistry(REGISTRY).createTemplate(
bytes32(bytes("mlx_safe_tw_reg_d_v1_3")),
"mlx_safe_tw_reg_d_v1_3",
"IPFS://bafybeiaw3pwov3ahg4bk2hte2hu4pwv34nndoguxyk3umq6f5su3kod6ay",
globalFieldsSafeTokenWarrant,
partyFields
);
CyberAgreementRegistry(REGISTRY).createTemplate(
bytes32(bytes("mlx_safe_tw_reg_s_v1_3")),
"mlx_safe_tw_reg_s_v1_3",
"IPFS://bafybeicto2raupsj5ad7snxvhmmll2plwyploqho4fg2cibnn2fuhlm2d4",
globalFieldsSafeTokenWarrant,
partyFields
);
CyberAgreementRegistry(REGISTRY).createTemplate(
bytes32(bytes("mlx_safte_reg_d_v1_3")),
"mlx_safte_reg_d_v1_3",
"IPFS://bafybeiag7xatsusb24evnpyj6ztf62kix36dgbsp3kbazfyvr273ph56ay",
globalFieldsSafte,
partyFields
);
CyberAgreementRegistry(REGISTRY).createTemplate(
bytes32(bytes("mlx_safte_reg_s_v1_3")),
"mlx_safte_reg_s_v1_3",
"IPFS://bafybeia43r7e566s2jlq4gtaasmtybutujy7fuizhw3fycxtwnstfbkeia",
globalFieldsSafte,
partyFields
);
CyberAgreementRegistry(REGISTRY).createTemplate(
bytes32(bytes("mlx_saft_reg_d_v1_3")),
"mlx_saft_reg_d_v1_3",
"IPFS://bafybeieoljri2rwuv35rymjd654sr3u46kbcao7mymseqobfo7x6lxgdcy",
globalFieldsSaft,
partyFields
);
CyberAgreementRegistry(REGISTRY).createTemplate(
bytes32(bytes("mlx_saft_reg_s_v1_3")),
"mlx_saft_reg_s_v1_3",
"IPFS://bafybeibwrz3rttteguo5ccoh5x7ndwdu6hyhy7i3iraii5c5ml4pfv73t4",
globalFieldsSaft,
partyFields
);

vm.stopBroadcast();
}

function _globalFieldsSafe() internal pure returns (string[] memory fields) {
fields = new string[](5);
fields[0] = "purchaseAmount";
fields[1] = "postMoneyValuationCap";
fields[2] = "expirationTime";
fields[3] = "governingJurisdiction";
fields[4] = "disputeResolution";
}

function _globalFieldsSafeTokenWarrant()
internal
pure
returns (string[] memory fields)
{
fields = new string[](17);
fields[0] = "purchaseAmount";
fields[1] = "postMoneyValuationCap";
fields[2] = "expirationTime";
fields[3] = "governingJurisdiction";
fields[4] = "disputeResolution";
fields[5] = "exercisePriceMethod";
fields[6] = "exercisePrice";
fields[7] = "unlockStartTimeType";
fields[8] = "unlockStartTime";
fields[9] = "unlockingPeriod";
fields[10] = "latestExpirationTime";
fields[11] = "unlockingCliffPeriod";
fields[12] = "unlockingCliffPercentage";
fields[13] = "unlockingIntervalType";
fields[14] = "tokenCalculationMethod";
fields[15] = "minCompanyReserve";
fields[16] = "tokenPremiumMultiplier";
}

function _globalFieldsSafte() internal pure returns (string[] memory fields) {
fields = new string[](15);
fields[0] = "purchaseAmount";
fields[1] = "postMoneyValuationCap";
fields[2] = "protocolUSDValuationAtTimeofInvestment";
fields[3] = "expirationTime";
fields[4] = "governingJurisdiction";
fields[5] = "disputeResolution";
fields[6] = "unlockStartTimeType";
fields[7] = "unlockStartTime";
fields[8] = "unlockingPeriod";
fields[9] = "unlockingCliffPeriod";
fields[10] = "unlockingCliffPercentage";
fields[11] = "unlockingIntervalType";
fields[12] = "tokenCalculationMethod";
fields[13] = "minCompanyReserve";
fields[14] = "tokenPremiumMultiplier";
}

function _globalFieldsSaft() internal pure returns (string[] memory fields) {
fields = new string[](10);
fields[0] = "purchaseAmount";
fields[1] = "protocolValuationCap";
fields[2] = "governingJurisdiction";
fields[3] = "disputeResolution";
fields[4] = "unlockStartTimeType";
fields[5] = "unlockStartTime";
fields[6] = "unlockingPeriod";
fields[7] = "unlockingCliffPeriod";
fields[8] = "unlockingCliffPercentage";
fields[9] = "unlockingIntervalType";
}

function _partyFields() internal pure returns (string[] memory fields) {
fields = new string[](5);
fields[0] = "name";
fields[1] = "evmAddress";
fields[2] = "contactDetails";
fields[3] = "investorType";
fields[4] = "investorJurisdiction";
}
}
54 changes: 54 additions & 0 deletions script/deploy-extensions-v2.s.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.28;

import {Script} from "forge-std/Script.sol";
import {console} from "forge-std/console.sol";
import {BorgAuth} from "../src/libs/auth.sol";
import "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol";
import {SAFEExtension} from "../src/storage/extensions/SAFEExtension.sol";
import {SAFTEExtensionV2} from "../src/storage/extensions/SAFTEExtensionV2.sol";
import {SAFTExtensionV2} from "../src/storage/extensions/SAFTExtensionV2.sol";
import {TokenWarrantExtensionV2} from "../src/storage/extensions/TokenWarrantExtensionV2.sol";

contract BaseScript is Script {
function run() public {
uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY_MAIN");
vm.startBroadcast(deployerPrivateKey);

bytes32 salt = bytes32(keccak256("MetaLexCyberCorpLaunchV2.2-Extensions"));
BorgAuth auth = BorgAuth(0x033012a1eDA6e2E00D12CD37c5b63B9440ef5E01);

address safeExtension = address(
new ERC1967Proxy{salt: salt}(
address(new SAFEExtension{salt: salt}()),
abi.encodeWithSelector(SAFEExtension.initialize.selector, address(auth))
)
);

address safteExtensionV2 = address(
new ERC1967Proxy{salt: salt}(
address(new SAFTExtensionV2{salt: salt}()),
abi.encodeWithSelector(SAFTExtensionV2.initialize.selector, address(auth))
)
);

address safteExtensionV2Long = address(
new ERC1967Proxy{salt: salt}(
address(new SAFTEExtensionV2{salt: salt}()),
abi.encodeWithSelector(SAFTEExtensionV2.initialize.selector, address(auth))
)
);

address tokenWarrantExtensionV2 = address(
new ERC1967Proxy{salt: salt}(
address(new TokenWarrantExtensionV2{salt: salt}()),
abi.encodeWithSelector(TokenWarrantExtensionV2.initialize.selector, address(auth))
)
);

console.log("SAFEExtension: ", safeExtension);
console.log("SAFTExtensionV2: ", safteExtensionV2);
console.log("SAFTEExtensionV2: ", safteExtensionV2Long);
console.log("TokenWarrantExtensionV2: ", tokenWarrantExtensionV2);
}
}
Loading
Loading