| // | |||||
| import {toUtf8String,parseUnits,ContractFactory, parseEther,JsonRpcProvider, ethers ,Contract, JsonRpcSigner, Wallet,ContractTransactionResponse, MaxInt256 | |||||
| ,Transaction,formatEther, | |||||
| decodeBase64 | |||||
| } from 'ethers' | |||||
| import { connect } from 'http2'; | |||||
| const PF_TOKEN_ABI = [ | |||||
| "function mint(address to, uint256 amount) external", | |||||
| "function transfer(address to, uint256 amount) external returns (bool)", | |||||
| "function batchMint(address[] calldata recipients, uint256[] calldata amounts) external", | |||||
| "function balanceOf(address account) external view returns (uint256)", | |||||
| "function totalSupply() external view returns (uint256)", | |||||
| "function name() external view returns (string)", | |||||
| "function symbol() external view returns (string)", | |||||
| "function decimals() external view returns (uint8)", | |||||
| "function hasRole(bytes32 role, address account) external view returns (bool)", | |||||
| "event TokensMinted(address indexed to, uint256 amount, address indexed minter)", | |||||
| "function recordInterestPayment(uint256 amount) external", | |||||
| ]; | |||||
| const SHS_ADDRESS="0x306f182eEdfe85d61aC2eA88acE58f565edf3DFe"; | |||||
| const SHS_PRIVATE_KEY="0x3221ea02f27a2929f3a7ec75f5cac6f8207eb910a66f7e31d6391143dfbef5bf"; | |||||
| const MASSET_ADDESS="0xDfc4dB2811a325DDd296C55D7A4055eD3bdB391D"; | |||||
| const MASSET_PRIVATE_KEY="0x920a8a7f062b2f31da7bea211af1a5c0adb316e32301040c19d1d3748d6b7ab0"; | |||||
| //TR_A | |||||
| // export const SPF_CONTRACT_ADDRESS = | |||||
| // "0x4e4637E3199E8a11a6dDafF64F1DCc8c7C2Aab36"; // sPF 주소 | |||||
| // export const SPF_CONTRACT_ADDRESS = | |||||
| // "0x3B24bfdD5D52d4b25EE5812F35334A831ecA553d"; // sPF 주소 (이자함수포함) | |||||
| //TR_B | |||||
| // export const SPF_CONTRACT_ADDRESS = | |||||
| // "0xa1b2A55AEaEf5093fc9b04438Dc194C3B631f118"; // sPF 주소 | |||||
| export const SPF_CONTRACT_ADDRESS = | |||||
| "0xaB72Fe1511ac371E369DFf3B0f6Bba23198baFD2"; // sPF 주소 (이자함수포함) | |||||
| const PULSE_RPC_URL = "https://secuchain.testnet.stopulse.co.kr/"; | |||||
| // export const SOL_ADDRESS = "0x8DFeB78ecEe391149b1c2739cEd0f6992D0a5663"; | |||||
| // const PRIVATE_KEY = | |||||
| // "0x47c496fe62e38aebcf4c5298cdae6889efed27b308fb473311d4a209e512f20e"; | |||||
| const PULSE_PRIVATE_KEY = | |||||
| "0xcd2336d7c471a0f2f1da77e91bcaf71e96e40481415bdb062152b4d045e1702c"; | |||||
| const provider = new ethers.JsonRpcProvider(PULSE_RPC_URL); | |||||
| const wallet = new ethers.Wallet(SHS_PRIVATE_KEY, provider); | |||||
| const wallet2 = new ethers.Wallet(MASSET_PRIVATE_KEY, provider); | |||||
| const walletAdmin = new ethers.Wallet(PULSE_PRIVATE_KEY, provider); | |||||
| const contractAdmin = new ethers.Contract( | |||||
| SPF_CONTRACT_ADDRESS, | |||||
| PF_TOKEN_ABI, | |||||
| walletAdmin | |||||
| ); | |||||
| const contract = new ethers.Contract( | |||||
| SPF_CONTRACT_ADDRESS, | |||||
| PF_TOKEN_ABI, | |||||
| wallet | |||||
| ); | |||||
| function getNewPrivateKey(){ | |||||
| const newWallet = ethers.Wallet.createRandom(); | |||||
| const wallet = new ethers.Wallet(newWallet.privateKey, provider); | |||||
| console.log(newWallet.address); | |||||
| console.log(newWallet.privateKey); | |||||
| return newWallet.privateKey; | |||||
| } | |||||
| async function setup() { | |||||
| // await mintToAddress(SHS_ADDRESS, "30000000000"); | |||||
| await mintToAddress(MASSET_ADDESS, "16000000000"); | |||||
| } | |||||
| async function view() { | |||||
| // const precision = await mmfToken.getNAVPrecision(); | |||||
| const precision = await contract.getNAVPrecision(); | |||||
| console.log(precision.toString()); | |||||
| const currentNAV = await contract.currentNAV(); | |||||
| console.log(currentNAV.toString()); | |||||
| const balance = await contract.balanceOf(SHS_ADDRESS); | |||||
| console.log(`balance = ${balance.toString()}}`); | |||||
| } | |||||
| /** | |||||
| * 특정 주소에 원하는 만큼 SPF 토큰을 minting하는 함수 | |||||
| * @param toAddress - 토큰을 받을 주소 | |||||
| * @param amount - minting할 토큰 양 (ether 단위) | |||||
| */ | |||||
| async function mintToAddress(toAddress: string, amount: string) { | |||||
| console.log(`Minting ${amount} SPF tokens to ${toAddress}...`); | |||||
| const tx = await contractAdmin.mint( | |||||
| toAddress, | |||||
| ethers.parseEther(amount), | |||||
| { | |||||
| gasLimit: 500000, | |||||
| gasPrice: 0, | |||||
| } | |||||
| ); | |||||
| await tx.wait(1); | |||||
| console.log(`Successfully minted ${amount} SPF tokens to ${toAddress}`); | |||||
| // 잔액 확인 | |||||
| const balance = await contractAdmin.balanceOf(toAddress); | |||||
| console.log(`New balance: ${ethers.formatEther(balance)} SPF`); | |||||
| } | |||||
| /** | |||||
| * 특정 주소의 SPF 토큰을 burn하는 함수 (dead address로 전송) | |||||
| * @param fromAddress - 토큰을 burn할 주소 (이 주소의 private key를 가진 wallet 필요) | |||||
| * @param amount - burn할 토큰 양 (ether 단위) | |||||
| * @param privateKey - fromAddress의 private key | |||||
| */ | |||||
| async function burnFromAddress(fromAddress: string, amount: string, privateKey: string) { | |||||
| const DEAD_ADDRESS = "0x000000000000000000000000000000000000dEaD"; | |||||
| console.log(`Burning ${amount} SPF tokens from ${fromAddress} to dead address...`); | |||||
| // burn할 주소의 wallet 생성 | |||||
| const burnerWallet = new ethers.Wallet(privateKey, provider); | |||||
| const burnerContract = new ethers.Contract( | |||||
| SPF_CONTRACT_ADDRESS, | |||||
| PF_TOKEN_ABI, | |||||
| burnerWallet | |||||
| ); | |||||
| const tx = await burnerContract.transfer( | |||||
| DEAD_ADDRESS, | |||||
| ethers.parseEther(amount), | |||||
| { | |||||
| gasLimit: 500000, | |||||
| gasPrice: 0, | |||||
| } | |||||
| ); | |||||
| await tx.wait(1); | |||||
| console.log(`Successfully burned ${amount} SPF tokens from ${fromAddress}`); | |||||
| // 잔액 확인 | |||||
| const balance = await burnerContract.balanceOf(fromAddress); | |||||
| console.log(`Remaining balance: ${ethers.formatEther(balance)} SPF`); | |||||
| } | |||||
| /** | |||||
| * SPF 토큰을 특정 주소에서 다른 주소로 전송하는 함수 | |||||
| * @param fromAddress - 토큰을 보낼 주소 | |||||
| * @param toAddress - 토큰을 받을 주소 | |||||
| * @param amount - 전송할 토큰 양 (ether 단위) | |||||
| * @param privateKey - fromAddress의 private key | |||||
| */ | |||||
| async function transferToken(fromAddress: string, toAddress: string, amount: string, privateKey: string) { | |||||
| console.log(`Transferring ${amount} SPF tokens from ${fromAddress} to ${toAddress}...`); | |||||
| // 전송할 주소의 wallet 생성 | |||||
| const senderWallet = new ethers.Wallet(privateKey, provider); | |||||
| const senderContract = new ethers.Contract( | |||||
| SPF_CONTRACT_ADDRESS, | |||||
| PF_TOKEN_ABI, | |||||
| senderWallet | |||||
| ); | |||||
| // 전송 전 잔액 확인 | |||||
| const beforeBalance = await senderContract.balanceOf(fromAddress); | |||||
| console.log(`Current balance: ${ethers.formatEther(beforeBalance)} SPF`); | |||||
| const amountWei = ethers.parseEther(amount); | |||||
| if (beforeBalance < amountWei) { | |||||
| throw new Error(`Insufficient balance. Have: ${ethers.formatEther(beforeBalance)} SPF, Need: ${amount} SPF`); | |||||
| } | |||||
| const tx = await senderContract.transfer( | |||||
| toAddress, | |||||
| amountWei, | |||||
| { | |||||
| gasLimit: 500000, | |||||
| gasPrice: 0, | |||||
| } | |||||
| ); | |||||
| await tx.wait(1); | |||||
| console.log(`Successfully transferred ${amount} SPF tokens from ${fromAddress} to ${toAddress}`); | |||||
| // 양쪽 주소의 잔액 확인 | |||||
| const fromBalance = await senderContract.balanceOf(fromAddress); | |||||
| const toBalance = await senderContract.balanceOf(toAddress); | |||||
| console.log(`From address balance: ${ethers.formatEther(fromBalance)} SPF`); | |||||
| console.log(`To address balance: ${ethers.formatEther(toBalance)} SPF`); | |||||
| } | |||||
| async function recordInterestPayment(amount: string) { | |||||
| console.log(`Recording interest payment of ${amount} SPF...`); | |||||
| console.log(`payInterest of ${amount} ...`); | |||||
| const tx = await contractAdmin.recordInterestPayment( | |||||
| ethers.parseEther(amount), | |||||
| { | |||||
| gasLimit: 500000, | |||||
| gasPrice: 0, | |||||
| } | |||||
| ); | |||||
| await tx.wait(1); | |||||
| console.log(`Successfully payed ${amount} of interests`); | |||||
| } | |||||
| async function main() { | |||||
| // recordInterestPayment("750000000"); | |||||
| // recordInterestPayment("1200000000"); | |||||
| // await setup(); | |||||
| // await transferToken(SHS_ADDRESS,MASSET_ADDESS,"300000",SHS_PRIVATE_KEY); | |||||
| //await setNav(); | |||||
| // await view(); | |||||
| // getNewPrivateKey(); | |||||
| // getNewPrivateKey(); | |||||
| } | |||||
| main(); |
| import { AlchemyProvider, Wallet } from 'ethers'; | |||||
| // 1. 네트워크와 API 키 설정 | |||||
| const network = 'matic-amoy'; // Polygon Amoy 테스트넷 | |||||
| const alchemyApiKey = 'o5F9YD_LHZZEde-gXzZyv'; // 여기에 본인의 API 키 입력 | |||||
| // 2. Alchemy Provider 생성 | |||||
| const provider = new AlchemyProvider(network, alchemyApiKey); | |||||
| // 3. 지갑 연결 (테스트용 private key 사용) | |||||
| const privateKey = 'ccb3131e009c579f16e6088f89218744f670e9b09c28514c671d5ae239f0c532'; // 절대 실제 자산이 있는 키 사용 금지! | |||||
| const wallet = new Wallet(privateKey, provider); | |||||
| // 4. 예제: 지갑 주소와 잔액 출력 | |||||
| async function main() { | |||||
| const address = await wallet.getAddress(); | |||||
| const balance = await provider.getBalance(address); | |||||
| console.log(`🪪 Address: ${address}`); | |||||
| console.log(`🪪 Balance: ${balance}`); | |||||
| //console.log(`💰 Balance: ${ethers.formatEther(balance)} MATIC`); | |||||
| } | |||||
| main().catch(console.error); |
| import Web3 from 'web3'; | |||||
| const web3 = new Web3(); | |||||
| async function MathInterface() { | |||||
| const contract = new web3.eth.Contract(ABI, "0xc4cce39ae1e0006b811101b619d627448e5a342b"); | |||||
| const uri = await contract.methods.tokenURI(9).call(); | |||||
| console.log(uri); | |||||
| } | |||||
| import {toUtf8String,parseUnits,ContractFactory, parseEther,JsonRpcProvider, ethers ,Contract, JsonRpcSigner, Wallet,ContractTransactionResponse, MaxInt256 | |||||
| ,Transaction,formatEther, | |||||
| decodeBase64 | |||||
| } from 'ethers' | |||||
| import { connect } from 'http2'; | |||||
| const MMF_ABI = [ | |||||
| // ========== ERC20 기본 함수 ========== | |||||
| "function name() view returns (string)", | |||||
| "function symbol() view returns (string)", | |||||
| "function decimals() view returns (uint8)", | |||||
| "function totalSupply() view returns (uint256)", | |||||
| "function balanceOf(address account) view returns (uint256)", | |||||
| "function transfer(address to, uint256 amount) returns (bool)", | |||||
| "function allowance(address owner, address spender) view returns (uint256)", | |||||
| "function approve(address spender, uint256 amount) returns (bool)", | |||||
| "function transferFrom(address from, address to, uint256 amount) returns (bool)", | |||||
| // ========== Share-Based 함수 ========== | |||||
| "function sharesOf(address account) view returns (uint256)", | |||||
| "function getSharesByTokenAmount(uint256 tokenAmount) view returns (uint256)", | |||||
| "function getTokenAmountByShares(uint256 shareAmount) view returns (uint256)", | |||||
| // ========== Purchase 함수 ========== | |||||
| "function purchaseWithDT(address buyer, uint256 dtAmount) returns (uint256)", | |||||
| "function processPendingPurchase(address buyer, uint256 index) returns (bool)", | |||||
| // ========== Redemption 함수 ========== | |||||
| "function redeemToDT(uint256 tokenAmount) returns (uint256)", | |||||
| "function redeemAll() returns (uint256)", | |||||
| // ========== NAV & Rebase 함수 ========== | |||||
| "function currentNAV() view returns (uint256)", | |||||
| "function updateNAVAndRebase(uint256 newNAV) returns (bool)", | |||||
| "function lastNAVUpdateTime() view returns (uint256)", | |||||
| "function lastRebaseTime() view returns (uint256)", | |||||
| "function totalRebaseAmount() view returns (uint256)", | |||||
| "function getNAVDecimal() view returns (uint256, uint256)", | |||||
| // ========== Lockup 함수 ========== | |||||
| "function lockupUntil(address) view returns (uint256)", | |||||
| "function defaultLockupPeriod() view returns (uint256)", | |||||
| "function getLockupTimeRemaining(address user) view returns (uint256)", | |||||
| // ========== Pending Purchase 함수 ========== | |||||
| "function getPendingPurchaseCount(address user) view returns (uint256)", | |||||
| "function getPendingPurchase(address user, uint256 index) view returns (uint256 dtAmount, uint256 timestamp, uint256 navAtPurchase, bool processed)", | |||||
| // ========== Access Control 함수 ========== | |||||
| "function hasRole(bytes32 role, address account) view returns (bool)", | |||||
| "function paused() view returns (bool)", | |||||
| // ========== Admin 함수 ========== | |||||
| "function setDTTokenAddress(address _dtTokenAddress)", | |||||
| "function setDefaultLockupPeriod(uint256 period)", | |||||
| "function setUserLockup(address user, uint256 until)", | |||||
| "function pause()", | |||||
| "function unpause()", | |||||
| "function updateNAVWithDecimals(uint256 value, uint256 decimalPlaces) external returns (bool)", | |||||
| "function getNAVPrecision() external pure returns (uint256)", | |||||
| // ========== Events ========== | |||||
| "event Transfer(address indexed from, address indexed to, uint256 value)", | |||||
| "event Approval(address indexed owner, address indexed spender, uint256 value)", | |||||
| "event TokensPurchased(address indexed buyer, uint256 dtAmount, uint256 tokenAmount, uint256 nav, uint256 timestamp)", | |||||
| "event TokensRedeemed(address indexed redeemer, uint256 tokenAmount, uint256 dtAmount, uint256 nav, uint256 timestamp)", | |||||
| "event NAVUpdated(uint256 oldNAV, uint256 newNAV, uint256 timestamp, address updater)", | |||||
| "event Rebased(uint256 oldTotalSupply, uint256 newTotalSupply, int256 rebaseAmount, uint256 nav, uint256 timestamp)", | |||||
| "event LockupUpdated(address indexed user, uint256 lockupUntil)", | |||||
| "event PurchasePending(address indexed buyer, uint256 dtAmount, uint256 nav, uint256 timestamp)", | |||||
| "event PurchaseProcessed(address indexed buyer, uint256 index, uint256 timestamp)", | |||||
| ]; | |||||
| export const SMMF_CONTRACT_ADDRESS = | |||||
| "0xC290e84BE1886a08760b3468D4C3083A36C17a21"; // sMMF 주소 | |||||
| const PULSE_RPC_URL = "https://secuchain.testnet.stopulse.co.kr/"; | |||||
| export const SOL_ADDRESS = "0x8DFeB78ecEe391149b1c2739cEd0f6992D0a5663"; | |||||
| const PRIVATE_KEY = | |||||
| "0x47c496fe62e38aebcf4c5298cdae6889efed27b308fb473311d4a209e512f20e"; | |||||
| const PULSE_PRIVATE_KEY = | |||||
| "0xcd2336d7c471a0f2f1da77e91bcaf71e96e40481415bdb062152b4d045e1702c"; | |||||
| const provider = new ethers.JsonRpcProvider(PULSE_RPC_URL); | |||||
| const wallet = new ethers.Wallet(PRIVATE_KEY, provider); | |||||
| const walletAdmin = new ethers.Wallet(PULSE_PRIVATE_KEY, provider); | |||||
| const contractAdmin = new ethers.Contract( | |||||
| SMMF_CONTRACT_ADDRESS, | |||||
| MMF_ABI, | |||||
| walletAdmin | |||||
| ); | |||||
| const contract = new ethers.Contract( | |||||
| SMMF_CONTRACT_ADDRESS, | |||||
| MMF_ABI, | |||||
| wallet | |||||
| ); | |||||
| async function setup() { | |||||
| const amount = "1000000000"; | |||||
| let tx = await contractAdmin.purchaseWithDT( | |||||
| SOL_ADDRESS, | |||||
| ethers.parseEther(amount), | |||||
| { | |||||
| gasLimit: 500000, // 가스 한도 증가 | |||||
| gasPrice: 0, | |||||
| } | |||||
| ); | |||||
| await tx.wait(1); | |||||
| const currentNAV = await contractAdmin.currentNAV(); | |||||
| console.log(currentNAV.toString()); | |||||
| // const balance = await mmfToken.balanceOf(userA.address); | |||||
| const balance = await contractAdmin.balanceOf(SOL_ADDRESS); | |||||
| console.log(`balance = ${balance.toString()}}`); | |||||
| } | |||||
| async function setNav() { | |||||
| await contractAdmin.updateNAVWithDecimals(10002365, 7); | |||||
| } | |||||
| async function view() { | |||||
| // const precision = await mmfToken.getNAVPrecision(); | |||||
| const precision = await contract.getNAVPrecision(); | |||||
| console.log(`precision = : ${precision.toString()}`); | |||||
| const currentNAV = await contract.currentNAV(); | |||||
| console.log(`currentNAV = : ${ currentNAV.toString()}`); | |||||
| const balance = await contract.balanceOf(SOL_ADDRESS); | |||||
| console.log(`balance = ${balance.toString()}}`); | |||||
| } | |||||
| async function main() { | |||||
| //await setup(); | |||||
| //await setNav(); | |||||
| await view(); | |||||
| } | |||||
| main(); |
| import { createPublicClient, http, Block } from "viem"; | |||||
| import { polygonAmoy } from "viem/chains"; | |||||
| async function main() { | |||||
| const client = createPublicClient({ | |||||
| chain: polygonAmoy, | |||||
| transport: http("https://polygon-amoy.g.alchemy.com/v2/o5F9YD_LHZZEde-gXzZyv"), | |||||
| }); | |||||
| const block: Block = await client.getBlock({ | |||||
| blockNumber: 123456n, | |||||
| }); | |||||
| console.log(block); | |||||
| } | |||||
| main(); | |||||
| "ethers": "^6.13.4", | "ethers": "^6.13.4", | ||||
| "hardhat-ethers": "^1.0.1", | "hardhat-ethers": "^1.0.1", | ||||
| "typescript": "^5.6.3", | "typescript": "^5.6.3", | ||||
| "viem": "^2.36.0", | |||||
| "web3": "^4.16.0" | "web3": "^4.16.0" | ||||
| }, | }, | ||||
| "devDependencies": { | "devDependencies": { |
| resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz#63430d04bd8c5e74f8d7d049338f1cd9d4f02069" | resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz#63430d04bd8c5e74f8d7d049338f1cd9d4f02069" | ||||
| integrity sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw== | integrity sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw== | ||||
| "@adraffy/ens-normalize@^1.8.8": | |||||
| "@adraffy/ens-normalize@^1.11.0", "@adraffy/ens-normalize@^1.8.8": | |||||
| version "1.11.0" | version "1.11.0" | ||||
| resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.11.0.tgz#42cc67c5baa407ac25059fcd7d405cc5ecdb0c33" | resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.11.0.tgz#42cc67c5baa407ac25059fcd7d405cc5ecdb0c33" | ||||
| integrity sha512-/3DDPKHqqIqxUULp8yP4zODUY1i+2xvVWsv8A79xGWdCAG+8sb0hRh0Rk2QyOJUnnbyPUAZYcpBuRe3nS2OIUg== | integrity sha512-/3DDPKHqqIqxUULp8yP4zODUY1i+2xvVWsv8A79xGWdCAG+8sb0hRh0Rk2QyOJUnnbyPUAZYcpBuRe3nS2OIUg== | ||||
| tweetnacl "^1.0.3" | tweetnacl "^1.0.3" | ||||
| tweetnacl-util "^0.15.1" | tweetnacl-util "^0.15.1" | ||||
| "@noble/ciphers@^1.3.0": | |||||
| version "1.3.0" | |||||
| resolved "https://registry.yarnpkg.com/@noble/ciphers/-/ciphers-1.3.0.tgz#f64b8ff886c240e644e5573c097f86e5b43676dc" | |||||
| integrity sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw== | |||||
| "@noble/curves@1.2.0", "@noble/curves@~1.2.0": | "@noble/curves@1.2.0", "@noble/curves@~1.2.0": | ||||
| version "1.2.0" | version "1.2.0" | ||||
| resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.2.0.tgz#92d7e12e4e49b23105a2555c6984d41733d65c35" | resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.2.0.tgz#92d7e12e4e49b23105a2555c6984d41733d65c35" | ||||
| dependencies: | dependencies: | ||||
| "@noble/hashes" "1.4.0" | "@noble/hashes" "1.4.0" | ||||
| "@noble/curves@1.9.6": | |||||
| version "1.9.6" | |||||
| resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.9.6.tgz#b45ebedca85bb75782f6be7e7f120f0c423c99e0" | |||||
| integrity sha512-GIKz/j99FRthB8icyJQA51E8Uk5hXmdyThjgQXRKiv9h0zeRlzSCLIzFw6K1LotZ3XuB7yzlf76qk7uBmTdFqA== | |||||
| dependencies: | |||||
| "@noble/hashes" "1.8.0" | |||||
| "@noble/curves@^1.9.1", "@noble/curves@~1.9.0": | |||||
| version "1.9.7" | |||||
| resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.9.7.tgz#79d04b4758a43e4bca2cbdc62e7771352fa6b951" | |||||
| integrity sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw== | |||||
| dependencies: | |||||
| "@noble/hashes" "1.8.0" | |||||
| "@noble/hashes@1.2.0", "@noble/hashes@~1.2.0": | "@noble/hashes@1.2.0", "@noble/hashes@~1.2.0": | ||||
| version "1.2.0" | version "1.2.0" | ||||
| resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.2.0.tgz#a3150eeb09cc7ab207ebf6d7b9ad311a9bdbed12" | resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.2.0.tgz#a3150eeb09cc7ab207ebf6d7b9ad311a9bdbed12" | ||||
| resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426" | resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426" | ||||
| integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== | integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== | ||||
| "@noble/hashes@1.8.0", "@noble/hashes@^1.8.0", "@noble/hashes@~1.8.0": | |||||
| version "1.8.0" | |||||
| resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.8.0.tgz#cee43d801fcef9644b11b8194857695acd5f815a" | |||||
| integrity sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A== | |||||
| "@noble/hashes@^1.4.0": | "@noble/hashes@^1.4.0": | ||||
| version "1.5.0" | version "1.5.0" | ||||
| resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.5.0.tgz#abadc5ca20332db2b1b2aa3e496e9af1213570b0" | resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.5.0.tgz#abadc5ca20332db2b1b2aa3e496e9af1213570b0" | ||||
| resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.9.tgz#e5e142fbbfe251091f9c5f1dd4c834ac04c3dbd1" | resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.9.tgz#e5e142fbbfe251091f9c5f1dd4c834ac04c3dbd1" | ||||
| integrity sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg== | integrity sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg== | ||||
| "@scure/base@~1.2.5": | |||||
| version "1.2.6" | |||||
| resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.2.6.tgz#ca917184b8231394dd8847509c67a0be522e59f6" | |||||
| integrity sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg== | |||||
| "@scure/bip32@1.1.5": | "@scure/bip32@1.1.5": | ||||
| version "1.1.5" | version "1.1.5" | ||||
| resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.1.5.tgz#d2ccae16dcc2e75bc1d75f5ef3c66a338d1ba300" | resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.1.5.tgz#d2ccae16dcc2e75bc1d75f5ef3c66a338d1ba300" | ||||
| "@noble/hashes" "~1.4.0" | "@noble/hashes" "~1.4.0" | ||||
| "@scure/base" "~1.1.6" | "@scure/base" "~1.1.6" | ||||
| "@scure/bip32@1.7.0", "@scure/bip32@^1.7.0": | |||||
| version "1.7.0" | |||||
| resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.7.0.tgz#b8683bab172369f988f1589640e53c4606984219" | |||||
| integrity sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw== | |||||
| dependencies: | |||||
| "@noble/curves" "~1.9.0" | |||||
| "@noble/hashes" "~1.8.0" | |||||
| "@scure/base" "~1.2.5" | |||||
| "@scure/bip39@1.1.1": | "@scure/bip39@1.1.1": | ||||
| version "1.1.1" | version "1.1.1" | ||||
| resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.1.1.tgz#b54557b2e86214319405db819c4b6a370cf340c5" | resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.1.1.tgz#b54557b2e86214319405db819c4b6a370cf340c5" | ||||
| "@noble/hashes" "~1.4.0" | "@noble/hashes" "~1.4.0" | ||||
| "@scure/base" "~1.1.6" | "@scure/base" "~1.1.6" | ||||
| "@scure/bip39@1.6.0", "@scure/bip39@^1.6.0": | |||||
| version "1.6.0" | |||||
| resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.6.0.tgz#475970ace440d7be87a6086cbee77cb8f1a684f9" | |||||
| integrity sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A== | |||||
| dependencies: | |||||
| "@noble/hashes" "~1.8.0" | |||||
| "@scure/base" "~1.2.5" | |||||
| "@sentry/core@5.30.0": | "@sentry/core@5.30.0": | ||||
| version "5.30.0" | version "5.30.0" | ||||
| resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.30.0.tgz#6b203664f69e75106ee8b5a2fe1d717379b331f3" | resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.30.0.tgz#6b203664f69e75106ee8b5a2fe1d717379b331f3" | ||||
| resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.0.tgz#237176dace81d90d018bebf3a45cb42f2a2d9e97" | resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.0.tgz#237176dace81d90d018bebf3a45cb42f2a2d9e97" | ||||
| integrity sha512-NMeMah//6bJ56H5XRj8QCV4AwuW6hB6zqz2LnhhLdcWVQOsXki6/Pn3APeqxCma62nXIcmZWdu1DlHWS74umVQ== | integrity sha512-NMeMah//6bJ56H5XRj8QCV4AwuW6hB6zqz2LnhhLdcWVQOsXki6/Pn3APeqxCma62nXIcmZWdu1DlHWS74umVQ== | ||||
| abitype@1.0.8: | |||||
| version "1.0.8" | |||||
| resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.8.tgz#3554f28b2e9d6e9f35eb59878193eabd1b9f46ba" | |||||
| integrity sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg== | |||||
| abitype@^1.0.8: | |||||
| version "1.0.9" | |||||
| resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.9.tgz#f66940f69caf2b6c190088a017e289dbe41090a6" | |||||
| integrity sha512-oN0S++TQmlwWuB+rkA6aiEefLv3SP+2l/tC5mux/TLj6qdA6rF15Vbpex4fHovLsMkwLwTIRj8/Q8vXCS3GfOg== | |||||
| acorn-walk@^8.1.1: | acorn-walk@^8.1.1: | ||||
| version "8.3.4" | version "8.3.4" | ||||
| resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.4.tgz#794dd169c3977edf4ba4ea47583587c5866236b7" | resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.4.tgz#794dd169c3977edf4ba4ea47583587c5866236b7" | ||||
| is-hex-prefixed "1.0.0" | is-hex-prefixed "1.0.0" | ||||
| strip-hex-prefix "1.0.0" | strip-hex-prefix "1.0.0" | ||||
| eventemitter3@^5.0.1: | |||||
| eventemitter3@5.0.1, eventemitter3@^5.0.1: | |||||
| version "5.0.1" | version "5.0.1" | ||||
| resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" | resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" | ||||
| integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== | integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== | ||||
| resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.3.tgz#93c1cf0575daf56e7120bab5c8c448b0809d0d74" | resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.3.tgz#93c1cf0575daf56e7120bab5c8c448b0809d0d74" | ||||
| integrity sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg== | integrity sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg== | ||||
| isows@1.0.7: | |||||
| version "1.0.7" | |||||
| resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.7.tgz#1c06400b7eed216fbba3bcbd68f12490fc342915" | |||||
| integrity sha512-I1fSfDCZL5P0v33sVqeTDSpcstAg/N+wF5HS033mogOVIp4B+oHC7oOCsA3axAbBSGTJ8QubbNmnIRN/h8U7hg== | |||||
| jackspeak@^3.1.2: | jackspeak@^3.1.2: | ||||
| version "3.4.3" | version "3.4.3" | ||||
| resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" | resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" | ||||
| resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" | ||||
| integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== | integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== | ||||
| ox@0.9.1: | |||||
| version "0.9.1" | |||||
| resolved "https://registry.yarnpkg.com/ox/-/ox-0.9.1.tgz#d3300afe70c5b2ec50a9df3097f8bb0523b306a5" | |||||
| integrity sha512-NVI0cajROntJWtFnxZQ1aXDVy+c6DLEXJ3wwON48CgbPhmMJrpRTfVbuppR+47RmXm3lZ/uMaKiFSkLdAO1now== | |||||
| dependencies: | |||||
| "@adraffy/ens-normalize" "^1.11.0" | |||||
| "@noble/ciphers" "^1.3.0" | |||||
| "@noble/curves" "^1.9.1" | |||||
| "@noble/hashes" "^1.8.0" | |||||
| "@scure/bip32" "^1.7.0" | |||||
| "@scure/bip39" "^1.6.0" | |||||
| abitype "^1.0.8" | |||||
| eventemitter3 "5.0.1" | |||||
| p-limit@^3.0.2: | p-limit@^3.0.2: | ||||
| version "3.1.0" | version "3.1.0" | ||||
| resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" | ||||
| isows "1.0.3" | isows "1.0.3" | ||||
| ws "8.13.0" | ws "8.13.0" | ||||
| viem@^2.36.0: | |||||
| version "2.36.0" | |||||
| resolved "https://registry.yarnpkg.com/viem/-/viem-2.36.0.tgz#e564484018c6e4432dfa936fdda4ca585008d4f7" | |||||
| integrity sha512-Xz7AkGtR43K+NY74X2lBevwfRrsXuifGUzt8QiULO47NXIcT7g3jcA4nIvl5m2OTE5v8SlzishwXmg64xOIVmQ== | |||||
| dependencies: | |||||
| "@noble/curves" "1.9.6" | |||||
| "@noble/hashes" "1.8.0" | |||||
| "@scure/bip32" "1.7.0" | |||||
| "@scure/bip39" "1.6.0" | |||||
| abitype "1.0.8" | |||||
| isows "1.0.7" | |||||
| ox "0.9.1" | |||||
| ws "8.18.3" | |||||
| web3-core@^4.4.0, web3-core@^4.5.0, web3-core@^4.6.0, web3-core@^4.7.1: | web3-core@^4.4.0, web3-core@^4.5.0, web3-core@^4.6.0, web3-core@^4.7.1: | ||||
| version "4.7.1" | version "4.7.1" | ||||
| resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-4.7.1.tgz#bc56cd7959fe44ee77139d591211f69851140009" | resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-4.7.1.tgz#bc56cd7959fe44ee77139d591211f69851140009" | ||||
| resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" | resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" | ||||
| integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== | integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== | ||||
| ws@8.18.3: | |||||
| version "8.18.3" | |||||
| resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.3.tgz#b56b88abffde62791c639170400c93dcb0c95472" | |||||
| integrity sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg== | |||||
| ws@^7.4.6: | ws@^7.4.6: | ||||
| version "7.5.10" | version "7.5.10" | ||||
| resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" | resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" |