Описание изменений
This commit is contained in:
@@ -3,9 +3,13 @@ pragma solidity ^0.8.0;
|
|||||||
|
|
||||||
contract MyContract {
|
contract MyContract {
|
||||||
address public owner;
|
address public owner;
|
||||||
|
uint256 public price;
|
||||||
|
|
||||||
|
event Purchase(address buyer, uint256 amount);
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
owner = msg.sender;
|
owner = msg.sender;
|
||||||
|
price = 0.01 ether; // Начальная цена 0.01 ETH
|
||||||
}
|
}
|
||||||
|
|
||||||
modifier onlyOwner() {
|
modifier onlyOwner() {
|
||||||
@@ -17,4 +21,21 @@ contract MyContract {
|
|||||||
require(newOwner != address(0), "New owner cannot be zero address");
|
require(newOwner != address(0), "New owner cannot be zero address");
|
||||||
owner = newOwner;
|
owner = newOwner;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function setPrice(uint256 newPrice) public onlyOwner {
|
||||||
|
price = newPrice;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getPrice() public view returns (uint256) {
|
||||||
|
return price;
|
||||||
|
}
|
||||||
|
|
||||||
|
function purchase(uint256 amount) public payable {
|
||||||
|
require(msg.value == price * amount, "Incorrect payment amount");
|
||||||
|
emit Purchase(msg.sender, amount);
|
||||||
|
}
|
||||||
|
|
||||||
|
function withdraw() public onlyOwner {
|
||||||
|
payable(owner).transfer(address(this).balance);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -9,17 +9,17 @@
|
|||||||
"deploy": "hardhat run scripts/deploy.js --network sepolia",
|
"deploy": "hardhat run scripts/deploy.js --network sepolia",
|
||||||
"node": "hardhat node",
|
"node": "hardhat node",
|
||||||
"test": "hardhat test",
|
"test": "hardhat test",
|
||||||
"server": "node server.js"
|
"server": "nodemon server.js"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@nomiclabs/hardhat-ethers": "^2.0.0",
|
"@nomiclabs/hardhat-ethers": "^2.0.0",
|
||||||
"@nomiclabs/hardhat-waffle": "^2.0.0",
|
"@nomiclabs/hardhat-waffle": "^2.0.0",
|
||||||
"cors": "^2.8.5",
|
"cors": "^2.8.5",
|
||||||
"ethers": "^5.7.2",
|
"ethers": "^6.13.5",
|
||||||
"express": "^4.21.2",
|
"express": "^4.21.2",
|
||||||
"express-session": "^1.18.1",
|
"express-session": "^1.18.1",
|
||||||
"hardhat": "^2.9.3",
|
"hardhat": "^2.9.3",
|
||||||
"siwe": "^2.1.4",
|
"siwe": "^3.0.0",
|
||||||
"viem": "^2.23.2"
|
"viem": "^2.23.2"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
@@ -28,6 +28,7 @@
|
|||||||
"@types/sinon-chai": "^4.0.0",
|
"@types/sinon-chai": "^4.0.0",
|
||||||
"chai": "4.3.7",
|
"chai": "4.3.7",
|
||||||
"dotenv": "^16.4.7",
|
"dotenv": "^16.4.7",
|
||||||
"ethereum-waffle": "^4.0.10"
|
"ethereum-waffle": "^4.0.10",
|
||||||
|
"nodemon": "^3.1.9"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,12 @@
|
|||||||
import express from 'express';
|
import express from 'express';
|
||||||
import cors from 'cors';
|
import cors from 'cors';
|
||||||
import session from 'express-session';
|
import session from 'express-session';
|
||||||
|
import { SiweMessage, generateNonce } from 'siwe';
|
||||||
|
import { fileURLToPath } from 'url';
|
||||||
|
import { dirname } from 'path';
|
||||||
|
|
||||||
|
const __filename = fileURLToPath(import.meta.url);
|
||||||
|
const __dirname = dirname(__filename);
|
||||||
|
|
||||||
const app = express();
|
const app = express();
|
||||||
|
|
||||||
@@ -35,61 +41,96 @@ app.use((req, res, next) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Генерация nonce
|
// Генерация nonce
|
||||||
app.get('/nonce', (_, res) => {
|
app.get('/nonce', (req, res) => {
|
||||||
try {
|
try {
|
||||||
const nonce = generateNonce();
|
req.session.nonce = generateNonce();
|
||||||
res.setHeader('Content-Type', 'text/plain');
|
console.log('Сгенерирован новый nonce:', req.session.nonce);
|
||||||
res.status(200).send(nonce);
|
res.setHeader('Content-Type', 'application/json');
|
||||||
|
res.status(200).json({ nonce: req.session.nonce });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Ошибка генерации nonce:', error);
|
console.error('Ошибка генерации nonce:', error);
|
||||||
res.status(500).send('Internal Server Error');
|
res.status(500).json({ error: 'Internal Server Error' });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Верификация сообщения
|
// Верификация сообщения
|
||||||
app.post('/verify', async (req, res) => {
|
app.post('/verify', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const { address, chainId = 11155111 } = req.body;
|
const { signature, message } = req.body;
|
||||||
|
|
||||||
if (isNaN(chainId)) {
|
console.log('Получен запрос на верификацию:', {
|
||||||
throw new Error("Invalid chainId");
|
signature: signature?.slice(0, 20) + '...',
|
||||||
|
message,
|
||||||
|
sessionNonce: req.session.nonce
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!req.session.nonce) {
|
||||||
|
console.error('Сессия не содержит nonce');
|
||||||
|
throw new Error('Invalid session');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!signature || !message) {
|
||||||
|
console.error('Отсутствует подпись или сообщение');
|
||||||
|
throw new Error('Invalid signature or message');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Создаем и верифицируем SIWE сообщение
|
||||||
|
console.log('Начинаем парсинг SIWE сообщения...');
|
||||||
|
const siweMessage = new SiweMessage(message);
|
||||||
|
|
||||||
|
console.log('Парсинг успешен:', {
|
||||||
|
domain: siweMessage.domain,
|
||||||
|
address: siweMessage.address,
|
||||||
|
nonce: siweMessage.nonce
|
||||||
|
});
|
||||||
|
|
||||||
|
const { success, data: fields } = await siweMessage.verify({
|
||||||
|
signature,
|
||||||
|
domain: siweMessage.domain,
|
||||||
|
nonce: req.session.nonce
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log('Результат верификации:', { success, fields });
|
||||||
|
|
||||||
|
if (!success) {
|
||||||
|
throw new Error('Signature verification failed');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Сохраняем сессию
|
// Сохраняем сессию
|
||||||
req.session.siwe = {
|
req.session.authenticated = true;
|
||||||
address,
|
req.session.siwe = fields;
|
||||||
chainId
|
|
||||||
};
|
console.log('Сессия сохранена:', {
|
||||||
|
authenticated: true,
|
||||||
|
address: fields.address
|
||||||
|
});
|
||||||
|
|
||||||
req.session.save(() => {
|
req.session.save(() => {
|
||||||
console.log('Session saved successfully');
|
console.log('Session saved successfully');
|
||||||
res.status(200).json({
|
res.status(200).json({
|
||||||
success: true,
|
success: true,
|
||||||
address,
|
address: fields.address
|
||||||
chainId
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Ошибка верификации:', {
|
console.error('Ошибка верификации:', error);
|
||||||
message: error.message,
|
req.session.authenticated = false;
|
||||||
stack: error.stack,
|
|
||||||
name: error.name
|
|
||||||
});
|
|
||||||
req.session.siwe = null;
|
|
||||||
req.session.nonce = null;
|
req.session.nonce = null;
|
||||||
req.session.save(() => {
|
req.session.siwe = null;
|
||||||
res.status(400).json({
|
res.status(400).json({
|
||||||
error: 'Verification failed',
|
error: 'Verification failed',
|
||||||
message: error.message
|
message: error.message
|
||||||
});
|
});
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Получение сессии
|
// Получение сессии
|
||||||
app.get('/session', (req, res) => {
|
app.get('/session', (req, res) => {
|
||||||
try {
|
try {
|
||||||
res.json(req.session.siwe || null);
|
res.json({
|
||||||
|
authenticated: !!req.session.authenticated,
|
||||||
|
address: req.session.siwe?.address
|
||||||
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Ошибка получения сессии:', error);
|
console.error('Ошибка получения сессии:', error);
|
||||||
res.status(500).json({ error: 'Internal Server Error' });
|
res.status(500).json({ error: 'Internal Server Error' });
|
||||||
|
|||||||
@@ -2,6 +2,11 @@
|
|||||||
# yarn lockfile v1
|
# yarn lockfile v1
|
||||||
|
|
||||||
|
|
||||||
|
"@adraffy/ens-normalize@1.10.1":
|
||||||
|
version "1.10.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz#63430d04bd8c5e74f8d7d049338f1cd9d4f02069"
|
||||||
|
integrity sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==
|
||||||
|
|
||||||
"@adraffy/ens-normalize@^1.10.1":
|
"@adraffy/ens-normalize@^1.10.1":
|
||||||
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"
|
||||||
@@ -134,7 +139,7 @@
|
|||||||
merkle-patricia-tree "^4.2.2"
|
merkle-patricia-tree "^4.2.2"
|
||||||
rustbn.js "~0.2.0"
|
rustbn.js "~0.2.0"
|
||||||
|
|
||||||
"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.7.0":
|
"@ethersproject/abi@^5.1.2":
|
||||||
version "5.7.0"
|
version "5.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449"
|
resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449"
|
||||||
integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==
|
integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==
|
||||||
@@ -149,7 +154,7 @@
|
|||||||
"@ethersproject/properties" "^5.7.0"
|
"@ethersproject/properties" "^5.7.0"
|
||||||
"@ethersproject/strings" "^5.7.0"
|
"@ethersproject/strings" "^5.7.0"
|
||||||
|
|
||||||
"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.7.0":
|
"@ethersproject/abstract-provider@^5.7.0":
|
||||||
version "5.7.0"
|
version "5.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef"
|
resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef"
|
||||||
integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==
|
integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==
|
||||||
@@ -162,7 +167,7 @@
|
|||||||
"@ethersproject/transactions" "^5.7.0"
|
"@ethersproject/transactions" "^5.7.0"
|
||||||
"@ethersproject/web" "^5.7.0"
|
"@ethersproject/web" "^5.7.0"
|
||||||
|
|
||||||
"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.7.0":
|
"@ethersproject/abstract-signer@^5.7.0":
|
||||||
version "5.7.0"
|
version "5.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2"
|
resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2"
|
||||||
integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==
|
integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==
|
||||||
@@ -173,7 +178,7 @@
|
|||||||
"@ethersproject/logger" "^5.7.0"
|
"@ethersproject/logger" "^5.7.0"
|
||||||
"@ethersproject/properties" "^5.7.0"
|
"@ethersproject/properties" "^5.7.0"
|
||||||
|
|
||||||
"@ethersproject/address@5.7.0", "@ethersproject/address@^5.7.0":
|
"@ethersproject/address@^5.7.0":
|
||||||
version "5.7.0"
|
version "5.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37"
|
resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37"
|
||||||
integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==
|
integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==
|
||||||
@@ -184,22 +189,14 @@
|
|||||||
"@ethersproject/logger" "^5.7.0"
|
"@ethersproject/logger" "^5.7.0"
|
||||||
"@ethersproject/rlp" "^5.7.0"
|
"@ethersproject/rlp" "^5.7.0"
|
||||||
|
|
||||||
"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.7.0":
|
"@ethersproject/base64@^5.7.0":
|
||||||
version "5.7.0"
|
version "5.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c"
|
resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c"
|
||||||
integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==
|
integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@ethersproject/bytes" "^5.7.0"
|
"@ethersproject/bytes" "^5.7.0"
|
||||||
|
|
||||||
"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0":
|
"@ethersproject/bignumber@^5.7.0":
|
||||||
version "5.7.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b"
|
|
||||||
integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==
|
|
||||||
dependencies:
|
|
||||||
"@ethersproject/bytes" "^5.7.0"
|
|
||||||
"@ethersproject/properties" "^5.7.0"
|
|
||||||
|
|
||||||
"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.7.0":
|
|
||||||
version "5.7.0"
|
version "5.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2"
|
resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2"
|
||||||
integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==
|
integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==
|
||||||
@@ -208,37 +205,21 @@
|
|||||||
"@ethersproject/logger" "^5.7.0"
|
"@ethersproject/logger" "^5.7.0"
|
||||||
bn.js "^5.2.1"
|
bn.js "^5.2.1"
|
||||||
|
|
||||||
"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.7.0":
|
"@ethersproject/bytes@^5.7.0":
|
||||||
version "5.7.0"
|
version "5.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d"
|
resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d"
|
||||||
integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==
|
integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@ethersproject/logger" "^5.7.0"
|
"@ethersproject/logger" "^5.7.0"
|
||||||
|
|
||||||
"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.7.0":
|
"@ethersproject/constants@^5.7.0":
|
||||||
version "5.7.0"
|
version "5.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e"
|
resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e"
|
||||||
integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==
|
integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@ethersproject/bignumber" "^5.7.0"
|
"@ethersproject/bignumber" "^5.7.0"
|
||||||
|
|
||||||
"@ethersproject/contracts@5.7.0":
|
"@ethersproject/hash@^5.7.0":
|
||||||
version "5.7.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e"
|
|
||||||
integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==
|
|
||||||
dependencies:
|
|
||||||
"@ethersproject/abi" "^5.7.0"
|
|
||||||
"@ethersproject/abstract-provider" "^5.7.0"
|
|
||||||
"@ethersproject/abstract-signer" "^5.7.0"
|
|
||||||
"@ethersproject/address" "^5.7.0"
|
|
||||||
"@ethersproject/bignumber" "^5.7.0"
|
|
||||||
"@ethersproject/bytes" "^5.7.0"
|
|
||||||
"@ethersproject/constants" "^5.7.0"
|
|
||||||
"@ethersproject/logger" "^5.7.0"
|
|
||||||
"@ethersproject/properties" "^5.7.0"
|
|
||||||
"@ethersproject/transactions" "^5.7.0"
|
|
||||||
|
|
||||||
"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.7.0":
|
|
||||||
version "5.7.0"
|
version "5.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7"
|
resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7"
|
||||||
integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==
|
integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==
|
||||||
@@ -253,44 +234,7 @@
|
|||||||
"@ethersproject/properties" "^5.7.0"
|
"@ethersproject/properties" "^5.7.0"
|
||||||
"@ethersproject/strings" "^5.7.0"
|
"@ethersproject/strings" "^5.7.0"
|
||||||
|
|
||||||
"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0":
|
"@ethersproject/keccak256@^5.7.0":
|
||||||
version "5.7.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf"
|
|
||||||
integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==
|
|
||||||
dependencies:
|
|
||||||
"@ethersproject/abstract-signer" "^5.7.0"
|
|
||||||
"@ethersproject/basex" "^5.7.0"
|
|
||||||
"@ethersproject/bignumber" "^5.7.0"
|
|
||||||
"@ethersproject/bytes" "^5.7.0"
|
|
||||||
"@ethersproject/logger" "^5.7.0"
|
|
||||||
"@ethersproject/pbkdf2" "^5.7.0"
|
|
||||||
"@ethersproject/properties" "^5.7.0"
|
|
||||||
"@ethersproject/sha2" "^5.7.0"
|
|
||||||
"@ethersproject/signing-key" "^5.7.0"
|
|
||||||
"@ethersproject/strings" "^5.7.0"
|
|
||||||
"@ethersproject/transactions" "^5.7.0"
|
|
||||||
"@ethersproject/wordlists" "^5.7.0"
|
|
||||||
|
|
||||||
"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.7.0":
|
|
||||||
version "5.7.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz#5e3355287b548c32b368d91014919ebebddd5360"
|
|
||||||
integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==
|
|
||||||
dependencies:
|
|
||||||
"@ethersproject/abstract-signer" "^5.7.0"
|
|
||||||
"@ethersproject/address" "^5.7.0"
|
|
||||||
"@ethersproject/bytes" "^5.7.0"
|
|
||||||
"@ethersproject/hdnode" "^5.7.0"
|
|
||||||
"@ethersproject/keccak256" "^5.7.0"
|
|
||||||
"@ethersproject/logger" "^5.7.0"
|
|
||||||
"@ethersproject/pbkdf2" "^5.7.0"
|
|
||||||
"@ethersproject/properties" "^5.7.0"
|
|
||||||
"@ethersproject/random" "^5.7.0"
|
|
||||||
"@ethersproject/strings" "^5.7.0"
|
|
||||||
"@ethersproject/transactions" "^5.7.0"
|
|
||||||
aes-js "3.0.0"
|
|
||||||
scrypt-js "3.0.1"
|
|
||||||
|
|
||||||
"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.7.0":
|
|
||||||
version "5.7.0"
|
version "5.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a"
|
resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a"
|
||||||
integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==
|
integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==
|
||||||
@@ -298,68 +242,26 @@
|
|||||||
"@ethersproject/bytes" "^5.7.0"
|
"@ethersproject/bytes" "^5.7.0"
|
||||||
js-sha3 "0.8.0"
|
js-sha3 "0.8.0"
|
||||||
|
|
||||||
"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.7.0":
|
"@ethersproject/logger@^5.7.0":
|
||||||
version "5.7.0"
|
version "5.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892"
|
resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892"
|
||||||
integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==
|
integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==
|
||||||
|
|
||||||
"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.7.0":
|
"@ethersproject/networks@^5.7.0":
|
||||||
version "5.7.1"
|
version "5.7.1"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6"
|
resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6"
|
||||||
integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==
|
integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@ethersproject/logger" "^5.7.0"
|
"@ethersproject/logger" "^5.7.0"
|
||||||
|
|
||||||
"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0":
|
"@ethersproject/properties@^5.7.0":
|
||||||
version "5.7.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102"
|
|
||||||
integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==
|
|
||||||
dependencies:
|
|
||||||
"@ethersproject/bytes" "^5.7.0"
|
|
||||||
"@ethersproject/sha2" "^5.7.0"
|
|
||||||
|
|
||||||
"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.7.0":
|
|
||||||
version "5.7.0"
|
version "5.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30"
|
resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30"
|
||||||
integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==
|
integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@ethersproject/logger" "^5.7.0"
|
"@ethersproject/logger" "^5.7.0"
|
||||||
|
|
||||||
"@ethersproject/providers@5.7.2":
|
"@ethersproject/rlp@^5.7.0":
|
||||||
version "5.7.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb"
|
|
||||||
integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==
|
|
||||||
dependencies:
|
|
||||||
"@ethersproject/abstract-provider" "^5.7.0"
|
|
||||||
"@ethersproject/abstract-signer" "^5.7.0"
|
|
||||||
"@ethersproject/address" "^5.7.0"
|
|
||||||
"@ethersproject/base64" "^5.7.0"
|
|
||||||
"@ethersproject/basex" "^5.7.0"
|
|
||||||
"@ethersproject/bignumber" "^5.7.0"
|
|
||||||
"@ethersproject/bytes" "^5.7.0"
|
|
||||||
"@ethersproject/constants" "^5.7.0"
|
|
||||||
"@ethersproject/hash" "^5.7.0"
|
|
||||||
"@ethersproject/logger" "^5.7.0"
|
|
||||||
"@ethersproject/networks" "^5.7.0"
|
|
||||||
"@ethersproject/properties" "^5.7.0"
|
|
||||||
"@ethersproject/random" "^5.7.0"
|
|
||||||
"@ethersproject/rlp" "^5.7.0"
|
|
||||||
"@ethersproject/sha2" "^5.7.0"
|
|
||||||
"@ethersproject/strings" "^5.7.0"
|
|
||||||
"@ethersproject/transactions" "^5.7.0"
|
|
||||||
"@ethersproject/web" "^5.7.0"
|
|
||||||
bech32 "1.1.4"
|
|
||||||
ws "7.4.6"
|
|
||||||
|
|
||||||
"@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0":
|
|
||||||
version "5.7.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c"
|
|
||||||
integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==
|
|
||||||
dependencies:
|
|
||||||
"@ethersproject/bytes" "^5.7.0"
|
|
||||||
"@ethersproject/logger" "^5.7.0"
|
|
||||||
|
|
||||||
"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.7.0":
|
|
||||||
version "5.7.0"
|
version "5.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304"
|
resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304"
|
||||||
integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==
|
integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==
|
||||||
@@ -367,16 +269,7 @@
|
|||||||
"@ethersproject/bytes" "^5.7.0"
|
"@ethersproject/bytes" "^5.7.0"
|
||||||
"@ethersproject/logger" "^5.7.0"
|
"@ethersproject/logger" "^5.7.0"
|
||||||
|
|
||||||
"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.7.0":
|
"@ethersproject/signing-key@^5.7.0":
|
||||||
version "5.7.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb"
|
|
||||||
integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==
|
|
||||||
dependencies:
|
|
||||||
"@ethersproject/bytes" "^5.7.0"
|
|
||||||
"@ethersproject/logger" "^5.7.0"
|
|
||||||
hash.js "1.1.7"
|
|
||||||
|
|
||||||
"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.7.0":
|
|
||||||
version "5.7.0"
|
version "5.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3"
|
resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3"
|
||||||
integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==
|
integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==
|
||||||
@@ -388,19 +281,7 @@
|
|||||||
elliptic "6.5.4"
|
elliptic "6.5.4"
|
||||||
hash.js "1.1.7"
|
hash.js "1.1.7"
|
||||||
|
|
||||||
"@ethersproject/solidity@5.7.0":
|
"@ethersproject/strings@^5.7.0":
|
||||||
version "5.7.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8"
|
|
||||||
integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==
|
|
||||||
dependencies:
|
|
||||||
"@ethersproject/bignumber" "^5.7.0"
|
|
||||||
"@ethersproject/bytes" "^5.7.0"
|
|
||||||
"@ethersproject/keccak256" "^5.7.0"
|
|
||||||
"@ethersproject/logger" "^5.7.0"
|
|
||||||
"@ethersproject/sha2" "^5.7.0"
|
|
||||||
"@ethersproject/strings" "^5.7.0"
|
|
||||||
|
|
||||||
"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.7.0":
|
|
||||||
version "5.7.0"
|
version "5.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2"
|
resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2"
|
||||||
integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==
|
integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==
|
||||||
@@ -409,7 +290,7 @@
|
|||||||
"@ethersproject/constants" "^5.7.0"
|
"@ethersproject/constants" "^5.7.0"
|
||||||
"@ethersproject/logger" "^5.7.0"
|
"@ethersproject/logger" "^5.7.0"
|
||||||
|
|
||||||
"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.7.0":
|
"@ethersproject/transactions@^5.7.0":
|
||||||
version "5.7.0"
|
version "5.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b"
|
resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b"
|
||||||
integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==
|
integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==
|
||||||
@@ -424,37 +305,7 @@
|
|||||||
"@ethersproject/rlp" "^5.7.0"
|
"@ethersproject/rlp" "^5.7.0"
|
||||||
"@ethersproject/signing-key" "^5.7.0"
|
"@ethersproject/signing-key" "^5.7.0"
|
||||||
|
|
||||||
"@ethersproject/units@5.7.0":
|
"@ethersproject/web@^5.7.0":
|
||||||
version "5.7.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.7.0.tgz#637b563d7e14f42deeee39245275d477aae1d8b1"
|
|
||||||
integrity sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==
|
|
||||||
dependencies:
|
|
||||||
"@ethersproject/bignumber" "^5.7.0"
|
|
||||||
"@ethersproject/constants" "^5.7.0"
|
|
||||||
"@ethersproject/logger" "^5.7.0"
|
|
||||||
|
|
||||||
"@ethersproject/wallet@5.7.0":
|
|
||||||
version "5.7.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d"
|
|
||||||
integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==
|
|
||||||
dependencies:
|
|
||||||
"@ethersproject/abstract-provider" "^5.7.0"
|
|
||||||
"@ethersproject/abstract-signer" "^5.7.0"
|
|
||||||
"@ethersproject/address" "^5.7.0"
|
|
||||||
"@ethersproject/bignumber" "^5.7.0"
|
|
||||||
"@ethersproject/bytes" "^5.7.0"
|
|
||||||
"@ethersproject/hash" "^5.7.0"
|
|
||||||
"@ethersproject/hdnode" "^5.7.0"
|
|
||||||
"@ethersproject/json-wallets" "^5.7.0"
|
|
||||||
"@ethersproject/keccak256" "^5.7.0"
|
|
||||||
"@ethersproject/logger" "^5.7.0"
|
|
||||||
"@ethersproject/properties" "^5.7.0"
|
|
||||||
"@ethersproject/random" "^5.7.0"
|
|
||||||
"@ethersproject/signing-key" "^5.7.0"
|
|
||||||
"@ethersproject/transactions" "^5.7.0"
|
|
||||||
"@ethersproject/wordlists" "^5.7.0"
|
|
||||||
|
|
||||||
"@ethersproject/web@5.7.1", "@ethersproject/web@^5.7.0":
|
|
||||||
version "5.7.1"
|
version "5.7.1"
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae"
|
resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae"
|
||||||
integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==
|
integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==
|
||||||
@@ -465,17 +316,6 @@
|
|||||||
"@ethersproject/properties" "^5.7.0"
|
"@ethersproject/properties" "^5.7.0"
|
||||||
"@ethersproject/strings" "^5.7.0"
|
"@ethersproject/strings" "^5.7.0"
|
||||||
|
|
||||||
"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0":
|
|
||||||
version "5.7.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5"
|
|
||||||
integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==
|
|
||||||
dependencies:
|
|
||||||
"@ethersproject/bytes" "^5.7.0"
|
|
||||||
"@ethersproject/hash" "^5.7.0"
|
|
||||||
"@ethersproject/logger" "^5.7.0"
|
|
||||||
"@ethersproject/properties" "^5.7.0"
|
|
||||||
"@ethersproject/strings" "^5.7.0"
|
|
||||||
|
|
||||||
"@fastify/busboy@^2.0.0":
|
"@fastify/busboy@^2.0.0":
|
||||||
version "2.1.1"
|
version "2.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d"
|
resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d"
|
||||||
@@ -554,6 +394,13 @@
|
|||||||
tweetnacl "^1.0.3"
|
tweetnacl "^1.0.3"
|
||||||
tweetnacl-util "^0.15.1"
|
tweetnacl-util "^0.15.1"
|
||||||
|
|
||||||
|
"@noble/curves@1.2.0":
|
||||||
|
version "1.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.2.0.tgz#92d7e12e4e49b23105a2555c6984d41733d65c35"
|
||||||
|
integrity sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==
|
||||||
|
dependencies:
|
||||||
|
"@noble/hashes" "1.3.2"
|
||||||
|
|
||||||
"@noble/curves@1.8.1", "@noble/curves@^1.6.0", "@noble/curves@~1.8.1":
|
"@noble/curves@1.8.1", "@noble/curves@^1.6.0", "@noble/curves@~1.8.1":
|
||||||
version "1.8.1"
|
version "1.8.1"
|
||||||
resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.8.1.tgz#19bc3970e205c99e4bdb1c64a4785706bce497ff"
|
resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.8.1.tgz#19bc3970e205c99e4bdb1c64a4785706bce497ff"
|
||||||
@@ -566,6 +413,11 @@
|
|||||||
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"
|
||||||
integrity sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==
|
integrity sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==
|
||||||
|
|
||||||
|
"@noble/hashes@1.3.2":
|
||||||
|
version "1.3.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39"
|
||||||
|
integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==
|
||||||
|
|
||||||
"@noble/hashes@1.7.1", "@noble/hashes@^1.1.2", "@noble/hashes@^1.5.0", "@noble/hashes@~1.7.1":
|
"@noble/hashes@1.7.1", "@noble/hashes@^1.1.2", "@noble/hashes@^1.5.0", "@noble/hashes@~1.7.1":
|
||||||
version "1.7.1"
|
version "1.7.1"
|
||||||
resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.7.1.tgz#5738f6d765710921e7a751e00c20ae091ed8db0f"
|
resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.7.1.tgz#5738f6d765710921e7a751e00c20ae091ed8db0f"
|
||||||
@@ -861,15 +713,13 @@
|
|||||||
"@sentry/types" "5.30.0"
|
"@sentry/types" "5.30.0"
|
||||||
tslib "^1.9.3"
|
tslib "^1.9.3"
|
||||||
|
|
||||||
"@spruceid/siwe-parser@^2.1.2":
|
"@spruceid/siwe-parser@^3.0.0":
|
||||||
version "2.1.2"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/@spruceid/siwe-parser/-/siwe-parser-2.1.2.tgz#3e13e7d3ac0bfdaf109a07342590eb21daee2fc3"
|
resolved "https://registry.yarnpkg.com/@spruceid/siwe-parser/-/siwe-parser-3.0.0.tgz#8af48683d77aed6dbd1abf541e1b064dc64be10e"
|
||||||
integrity sha512-d/r3S1LwJyMaRAKQ0awmo9whfXeE88Qt00vRj91q5uv5ATtWIQEGJ67Yr5eSZw5zp1/fZCXZYuEckt8lSkereQ==
|
integrity sha512-Y92k63ilw/8jH9Ry4G2e7lQd0jZAvb0d/Q7ssSD0D9mp/Zt2aCXIc3g0ny9yhplpAx1QXHsMz/JJptHK/zDGdw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@noble/hashes" "^1.1.2"
|
"@noble/hashes" "^1.1.2"
|
||||||
apg-js "^4.3.0"
|
apg-js "^4.4.0"
|
||||||
uri-js "^4.4.1"
|
|
||||||
valid-url "^1.0.9"
|
|
||||||
|
|
||||||
"@stablelib/binary@^1.0.1":
|
"@stablelib/binary@^1.0.1":
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
@@ -1054,6 +904,13 @@
|
|||||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-11.11.6.tgz#df929d1bb2eee5afdda598a41930fe50b43eaa6a"
|
resolved "https://registry.yarnpkg.com/@types/node/-/node-11.11.6.tgz#df929d1bb2eee5afdda598a41930fe50b43eaa6a"
|
||||||
integrity sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==
|
integrity sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==
|
||||||
|
|
||||||
|
"@types/node@22.7.5":
|
||||||
|
version "22.7.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/node/-/node-22.7.5.tgz#cfde981727a7ab3611a481510b473ae54442b92b"
|
||||||
|
integrity sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==
|
||||||
|
dependencies:
|
||||||
|
undici-types "~6.19.2"
|
||||||
|
|
||||||
"@types/pbkdf2@^3.0.0":
|
"@types/pbkdf2@^3.0.0":
|
||||||
version "3.1.2"
|
version "3.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.2.tgz#2dc43808e9985a2c69ff02e2d2027bd4fe33e8dc"
|
resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.2.tgz#2dc43808e9985a2c69ff02e2d2027bd4fe33e8dc"
|
||||||
@@ -1177,10 +1034,10 @@ adm-zip@^0.4.16:
|
|||||||
resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365"
|
resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365"
|
||||||
integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==
|
integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==
|
||||||
|
|
||||||
aes-js@3.0.0:
|
aes-js@4.0.0-beta.5:
|
||||||
version "3.0.0"
|
version "4.0.0-beta.5"
|
||||||
resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d"
|
resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-4.0.0-beta.5.tgz#8d2452c52adedebc3a3e28465d858c11ca315873"
|
||||||
integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==
|
integrity sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==
|
||||||
|
|
||||||
agent-base@6:
|
agent-base@6:
|
||||||
version "6.0.2"
|
version "6.0.2"
|
||||||
@@ -1253,7 +1110,7 @@ anymatch@~3.1.2:
|
|||||||
normalize-path "^3.0.0"
|
normalize-path "^3.0.0"
|
||||||
picomatch "^2.0.4"
|
picomatch "^2.0.4"
|
||||||
|
|
||||||
apg-js@^4.3.0:
|
apg-js@^4.4.0:
|
||||||
version "4.4.0"
|
version "4.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/apg-js/-/apg-js-4.4.0.tgz#09dcecab0731fbde233b9f2352fdd2d07e56b2cf"
|
resolved "https://registry.yarnpkg.com/apg-js/-/apg-js-4.4.0.tgz#09dcecab0731fbde233b9f2352fdd2d07e56b2cf"
|
||||||
integrity sha512-fefmXFknJmtgtNEXfPwZKYkMFX4Fyeyz+fNF6JWp87biGOPslJbCBVU158zvKRZfHBKnJDy8CMM40oLFGkXT8Q==
|
integrity sha512-fefmXFknJmtgtNEXfPwZKYkMFX4Fyeyz+fNF6JWp87biGOPslJbCBVU158zvKRZfHBKnJDy8CMM40oLFGkXT8Q==
|
||||||
@@ -1348,11 +1205,6 @@ bcrypt-pbkdf@^1.0.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
tweetnacl "^0.14.3"
|
tweetnacl "^0.14.3"
|
||||||
|
|
||||||
bech32@1.1.4:
|
|
||||||
version "1.1.4"
|
|
||||||
resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9"
|
|
||||||
integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==
|
|
||||||
|
|
||||||
bignumber.js@^9.0.0:
|
bignumber.js@^9.0.0:
|
||||||
version "9.1.2"
|
version "9.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c"
|
resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c"
|
||||||
@@ -1593,7 +1445,7 @@ check-error@^1.0.2:
|
|||||||
dependencies:
|
dependencies:
|
||||||
get-func-name "^2.0.2"
|
get-func-name "^2.0.2"
|
||||||
|
|
||||||
chokidar@^3.5.3:
|
chokidar@^3.5.2, chokidar@^3.5.3:
|
||||||
version "3.6.0"
|
version "3.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b"
|
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b"
|
||||||
integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==
|
integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==
|
||||||
@@ -1810,7 +1662,7 @@ debug@2.6.9, debug@^2.2.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
ms "2.0.0"
|
ms "2.0.0"
|
||||||
|
|
||||||
debug@4, debug@^4.1.1, debug@^4.3.1, debug@^4.3.3, debug@^4.3.4, debug@^4.3.5:
|
debug@4, debug@^4, debug@^4.1.1, debug@^4.3.1, debug@^4.3.3, debug@^4.3.4, debug@^4.3.5:
|
||||||
version "4.4.0"
|
version "4.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a"
|
resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a"
|
||||||
integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==
|
integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==
|
||||||
@@ -2110,41 +1962,18 @@ ethereumjs-util@^7.1.1, ethereumjs-util@^7.1.3, ethereumjs-util@^7.1.4, ethereum
|
|||||||
ethereum-cryptography "^0.1.3"
|
ethereum-cryptography "^0.1.3"
|
||||||
rlp "^2.2.4"
|
rlp "^2.2.4"
|
||||||
|
|
||||||
ethers@^5.7.2:
|
ethers@^6.13.5:
|
||||||
version "5.7.2"
|
version "6.13.5"
|
||||||
resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e"
|
resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.13.5.tgz#8c1d6ac988ac08abc3c1d8fabbd4b8b602851ac4"
|
||||||
integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==
|
integrity sha512-+knKNieu5EKRThQJWwqaJ10a6HE9sSehGeqWN65//wE7j47ZpFhKAnHB/JJFibwwg61I/koxaPsXbXpD/skNOQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@ethersproject/abi" "5.7.0"
|
"@adraffy/ens-normalize" "1.10.1"
|
||||||
"@ethersproject/abstract-provider" "5.7.0"
|
"@noble/curves" "1.2.0"
|
||||||
"@ethersproject/abstract-signer" "5.7.0"
|
"@noble/hashes" "1.3.2"
|
||||||
"@ethersproject/address" "5.7.0"
|
"@types/node" "22.7.5"
|
||||||
"@ethersproject/base64" "5.7.0"
|
aes-js "4.0.0-beta.5"
|
||||||
"@ethersproject/basex" "5.7.0"
|
tslib "2.7.0"
|
||||||
"@ethersproject/bignumber" "5.7.0"
|
ws "8.17.1"
|
||||||
"@ethersproject/bytes" "5.7.0"
|
|
||||||
"@ethersproject/constants" "5.7.0"
|
|
||||||
"@ethersproject/contracts" "5.7.0"
|
|
||||||
"@ethersproject/hash" "5.7.0"
|
|
||||||
"@ethersproject/hdnode" "5.7.0"
|
|
||||||
"@ethersproject/json-wallets" "5.7.0"
|
|
||||||
"@ethersproject/keccak256" "5.7.0"
|
|
||||||
"@ethersproject/logger" "5.7.0"
|
|
||||||
"@ethersproject/networks" "5.7.1"
|
|
||||||
"@ethersproject/pbkdf2" "5.7.0"
|
|
||||||
"@ethersproject/properties" "5.7.0"
|
|
||||||
"@ethersproject/providers" "5.7.2"
|
|
||||||
"@ethersproject/random" "5.7.0"
|
|
||||||
"@ethersproject/rlp" "5.7.0"
|
|
||||||
"@ethersproject/sha2" "5.7.0"
|
|
||||||
"@ethersproject/signing-key" "5.7.0"
|
|
||||||
"@ethersproject/solidity" "5.7.0"
|
|
||||||
"@ethersproject/strings" "5.7.0"
|
|
||||||
"@ethersproject/transactions" "5.7.0"
|
|
||||||
"@ethersproject/units" "5.7.0"
|
|
||||||
"@ethersproject/wallet" "5.7.0"
|
|
||||||
"@ethersproject/web" "5.7.1"
|
|
||||||
"@ethersproject/wordlists" "5.7.0"
|
|
||||||
|
|
||||||
ethjs-util@0.1.6, ethjs-util@^0.1.6:
|
ethjs-util@0.1.6, ethjs-util@^0.1.6:
|
||||||
version "0.1.6"
|
version "0.1.6"
|
||||||
@@ -2632,6 +2461,11 @@ ieee754@^1.1.13, ieee754@^1.2.1:
|
|||||||
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
|
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
|
||||||
integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
|
integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
|
||||||
|
|
||||||
|
ignore-by-default@^1.0.1:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09"
|
||||||
|
integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==
|
||||||
|
|
||||||
immediate@^3.2.3:
|
immediate@^3.2.3:
|
||||||
version "3.3.0"
|
version "3.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.3.0.tgz#1aef225517836bcdf7f2a2de2600c79ff0269266"
|
resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.3.0.tgz#1aef225517836bcdf7f2a2de2600c79ff0269266"
|
||||||
@@ -3072,7 +2906,7 @@ minimalistic-crypto-utils@^1.0.1:
|
|||||||
resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
|
resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
|
||||||
integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==
|
integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==
|
||||||
|
|
||||||
minimatch@^3.0.4:
|
minimatch@^3.0.4, minimatch@^3.1.2:
|
||||||
version "3.1.2"
|
version "3.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
|
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
|
||||||
integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
|
integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
|
||||||
@@ -3188,6 +3022,22 @@ node-gyp-build@^4.2.0, node-gyp-build@^4.3.0:
|
|||||||
resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.4.tgz#8a70ee85464ae52327772a90d66c6077a900cfc8"
|
resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.4.tgz#8a70ee85464ae52327772a90d66c6077a900cfc8"
|
||||||
integrity sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==
|
integrity sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==
|
||||||
|
|
||||||
|
nodemon@^3.1.9:
|
||||||
|
version "3.1.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-3.1.9.tgz#df502cdc3b120e1c3c0c6e4152349019efa7387b"
|
||||||
|
integrity sha512-hdr1oIb2p6ZSxu3PB2JWWYS7ZQ0qvaZsc3hK8DR8f02kRzc8rjYmxAIvdz+aYC+8F2IjNaB7HMcSDg8nQpJxyg==
|
||||||
|
dependencies:
|
||||||
|
chokidar "^3.5.2"
|
||||||
|
debug "^4"
|
||||||
|
ignore-by-default "^1.0.1"
|
||||||
|
minimatch "^3.1.2"
|
||||||
|
pstree.remy "^1.1.8"
|
||||||
|
semver "^7.5.3"
|
||||||
|
simple-update-notifier "^2.0.0"
|
||||||
|
supports-color "^5.5.0"
|
||||||
|
touch "^3.1.0"
|
||||||
|
undefsafe "^2.0.5"
|
||||||
|
|
||||||
normalize-path@^3.0.0, normalize-path@~3.0.0:
|
normalize-path@^3.0.0, normalize-path@~3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
|
resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
|
||||||
@@ -3362,6 +3212,11 @@ psl@^1.1.28:
|
|||||||
dependencies:
|
dependencies:
|
||||||
punycode "^2.3.1"
|
punycode "^2.3.1"
|
||||||
|
|
||||||
|
pstree.remy@^1.1.8:
|
||||||
|
version "1.1.8"
|
||||||
|
resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a"
|
||||||
|
integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==
|
||||||
|
|
||||||
punycode@^1.4.1:
|
punycode@^1.4.1:
|
||||||
version "1.4.1"
|
version "1.4.1"
|
||||||
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
|
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
|
||||||
@@ -3524,7 +3379,7 @@ safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, s
|
|||||||
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
|
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
|
||||||
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
|
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
|
||||||
|
|
||||||
scrypt-js@3.0.1, scrypt-js@^3.0.0:
|
scrypt-js@^3.0.0:
|
||||||
version "3.0.1"
|
version "3.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312"
|
resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312"
|
||||||
integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==
|
integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==
|
||||||
@@ -3567,6 +3422,11 @@ semver@^6.3.0:
|
|||||||
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
|
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
|
||||||
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
|
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
|
||||||
|
|
||||||
|
semver@^7.5.3:
|
||||||
|
version "7.7.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f"
|
||||||
|
integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==
|
||||||
|
|
||||||
send@0.19.0:
|
send@0.19.0:
|
||||||
version "0.19.0"
|
version "0.19.0"
|
||||||
resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8"
|
resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8"
|
||||||
@@ -3661,15 +3521,20 @@ side-channel@^1.0.6, side-channel@^1.1.0:
|
|||||||
side-channel-map "^1.0.1"
|
side-channel-map "^1.0.1"
|
||||||
side-channel-weakmap "^1.0.2"
|
side-channel-weakmap "^1.0.2"
|
||||||
|
|
||||||
siwe@^2.1.4:
|
simple-update-notifier@^2.0.0:
|
||||||
version "2.3.2"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/siwe/-/siwe-2.3.2.tgz#0794ae25f734f3068de0ab093ddd2f7867bc2d67"
|
resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz#d70b92bdab7d6d90dfd73931195a30b6e3d7cebb"
|
||||||
integrity sha512-aSf+6+Latyttbj5nMu6GF3doMfv2UYj83hhwZgUF20ky6fTS83uVhkQABdIVnEuS8y1bBdk7p6ltb9SmlhTTlA==
|
integrity sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@spruceid/siwe-parser" "^2.1.2"
|
semver "^7.5.3"
|
||||||
|
|
||||||
|
siwe@^3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/siwe/-/siwe-3.0.0.tgz#0508c3fca521c476a07d907a9b5b96a03c27c0f2"
|
||||||
|
integrity sha512-P2/ry7dHYJA6JJ5+veS//Gn2XDwNb3JMvuD6xiXX8L/PJ1SNVD4a3a8xqEbmANx+7kNQcD8YAh1B9bNKKvRy/g==
|
||||||
|
dependencies:
|
||||||
|
"@spruceid/siwe-parser" "^3.0.0"
|
||||||
"@stablelib/random" "^1.0.1"
|
"@stablelib/random" "^1.0.1"
|
||||||
uri-js "^4.4.1"
|
|
||||||
valid-url "^1.0.9"
|
|
||||||
|
|
||||||
solc@0.8.15:
|
solc@0.8.15:
|
||||||
version "0.8.15"
|
version "0.8.15"
|
||||||
@@ -3777,7 +3642,7 @@ strip-json-comments@^3.1.1:
|
|||||||
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
|
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
|
||||||
integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
|
integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
|
||||||
|
|
||||||
supports-color@^5.3.0:
|
supports-color@^5.3.0, supports-color@^5.5.0:
|
||||||
version "5.5.0"
|
version "5.5.0"
|
||||||
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
|
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
|
||||||
integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
|
integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
|
||||||
@@ -3835,6 +3700,11 @@ toidentifier@1.0.1:
|
|||||||
resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
|
resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
|
||||||
integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
|
integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
|
||||||
|
|
||||||
|
touch@^3.1.0:
|
||||||
|
version "3.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.1.tgz#097a23d7b161476435e5c1344a95c0f75b4a5694"
|
||||||
|
integrity sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==
|
||||||
|
|
||||||
tough-cookie@~2.5.0:
|
tough-cookie@~2.5.0:
|
||||||
version "2.5.0"
|
version "2.5.0"
|
||||||
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
|
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
|
||||||
@@ -3863,6 +3733,11 @@ ts-essentials@^7.0.1:
|
|||||||
resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-7.0.3.tgz#686fd155a02133eedcc5362dc8b5056cde3e5a38"
|
resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-7.0.3.tgz#686fd155a02133eedcc5362dc8b5056cde3e5a38"
|
||||||
integrity sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==
|
integrity sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==
|
||||||
|
|
||||||
|
tslib@2.7.0:
|
||||||
|
version "2.7.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01"
|
||||||
|
integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==
|
||||||
|
|
||||||
tslib@^1.9.3:
|
tslib@^1.9.3:
|
||||||
version "1.14.1"
|
version "1.14.1"
|
||||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
|
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
|
||||||
@@ -3956,6 +3831,16 @@ uid-safe@~2.1.5:
|
|||||||
dependencies:
|
dependencies:
|
||||||
random-bytes "~1.0.0"
|
random-bytes "~1.0.0"
|
||||||
|
|
||||||
|
undefsafe@^2.0.5:
|
||||||
|
version "2.0.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c"
|
||||||
|
integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==
|
||||||
|
|
||||||
|
undici-types@~6.19.2:
|
||||||
|
version "6.19.8"
|
||||||
|
resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02"
|
||||||
|
integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==
|
||||||
|
|
||||||
undici-types@~6.20.0:
|
undici-types@~6.20.0:
|
||||||
version "6.20.0"
|
version "6.20.0"
|
||||||
resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433"
|
resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433"
|
||||||
@@ -3978,7 +3863,7 @@ unpipe@1.0.0, unpipe@~1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
|
resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
|
||||||
integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
|
integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
|
||||||
|
|
||||||
uri-js@^4.2.2, uri-js@^4.4.1:
|
uri-js@^4.2.2:
|
||||||
version "4.4.1"
|
version "4.4.1"
|
||||||
resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
|
resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
|
||||||
integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
|
integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
|
||||||
@@ -4020,11 +3905,6 @@ uuid@^8.3.2:
|
|||||||
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
|
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
|
||||||
integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
|
integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
|
||||||
|
|
||||||
valid-url@^1.0.9:
|
|
||||||
version "1.0.9"
|
|
||||||
resolved "https://registry.yarnpkg.com/valid-url/-/valid-url-1.0.9.tgz#1c14479b40f1397a75782f115e4086447433a200"
|
|
||||||
integrity sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA==
|
|
||||||
|
|
||||||
vary@^1, vary@~1.1.2:
|
vary@^1, vary@~1.1.2:
|
||||||
version "1.1.2"
|
version "1.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
|
resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
|
||||||
@@ -4100,10 +3980,10 @@ wrappy@1:
|
|||||||
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
|
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
|
||||||
integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
|
integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
|
||||||
|
|
||||||
ws@7.4.6:
|
ws@8.17.1:
|
||||||
version "7.4.6"
|
version "8.17.1"
|
||||||
resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c"
|
resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b"
|
||||||
integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==
|
integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==
|
||||||
|
|
||||||
ws@8.18.0:
|
ws@8.18.0:
|
||||||
version "8.18.0"
|
version "8.18.0"
|
||||||
|
|||||||
4
frontend/.vscode/settings.json
vendored
Normal file
4
frontend/.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"typescript.validate.enable": false,
|
||||||
|
"javascript.validate.enable": true
|
||||||
|
}
|
||||||
1472
frontend/REOWN.md
1472
frontend/REOWN.md
File diff suppressed because it is too large
Load Diff
@@ -1,13 +1,12 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>DApp for Business</title>
|
<title>DApp for Business</title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="app"></div>
|
<div id="app"></div>
|
||||||
<!-- Vite автоматически вставит сюда ваш JavaScript -->
|
|
||||||
<script type="module" src="/src/main.js"></script>
|
<script type="module" src="/src/main.js"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@@ -6,25 +6,14 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
"build": "vite build",
|
"build": "vite build",
|
||||||
"preview": "vite preview",
|
"preview": "vite preview"
|
||||||
"type-check": "vue-tsc --noEmit"
|
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@reown/appkit": "^1.6.8",
|
"ethers": "^6.13.5",
|
||||||
"@reown/appkit-adapter-ethers": "^1.6.8",
|
"vue": "^3.4.21"
|
||||||
"@reown/appkit-experimental": "^1.6.8",
|
|
||||||
"@reown/appkit-siwe": "^1.6.8",
|
|
||||||
"@reown/appkit-wallet-button": "^1.6.8",
|
|
||||||
"ethers": "^6.13.4",
|
|
||||||
"siwe": "^2.1.4",
|
|
||||||
"viem": "^2.23.2",
|
|
||||||
"vue": "^3.4.15"
|
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/node": "^22.13.4",
|
"@vitejs/plugin-vue": "^5.2.1",
|
||||||
"@vitejs/plugin-vue": "^5.2.0",
|
|
||||||
"vue-tsc": "^1.8.27",
|
|
||||||
"typescript": "^5.7.3",
|
|
||||||
"vite": "^5.4.10"
|
"vite": "^5.4.10"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,27 +1,21 @@
|
|||||||
<template>
|
<template>
|
||||||
<div id="app">
|
<div id="app">
|
||||||
<h1>Добро пожаловать в DApp-for-Business</h1>
|
<h1>DApp for Business</h1>
|
||||||
<appkit-button
|
|
||||||
balance="show"
|
|
||||||
size="md"
|
|
||||||
label="Подключить кошелек"
|
|
||||||
loadingLabel="Подключение..."
|
|
||||||
/>
|
|
||||||
<ContractInteraction />
|
<ContractInteraction />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script setup>
|
||||||
import ContractInteraction from './components/ContractInteraction.vue'
|
import ContractInteraction from './components/ContractInteraction.vue'
|
||||||
|
|
||||||
export default {
|
|
||||||
name: "App",
|
|
||||||
components: {
|
|
||||||
ContractInteraction
|
|
||||||
}
|
|
||||||
};
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
/* Добавьте ваши стили здесь */
|
#app {
|
||||||
|
font-family: Arial, sans-serif;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
-moz-osx-font-smoothing: grayscale;
|
||||||
|
text-align: center;
|
||||||
|
color: #2c3e50;
|
||||||
|
margin-top: 60px;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
@@ -1,207 +1,557 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="contract-interaction">
|
<div class="contract-interaction">
|
||||||
<h2>Управление контрактом</h2>
|
<h2>Взаимодействие с контрактом</h2>
|
||||||
|
|
||||||
<div v-if="!isConnected" class="warning">
|
<div v-if="!isInitialized" class="loading-message">
|
||||||
Пожалуйста, подключите кошелек для управления контрактом
|
Загрузка контракта...
|
||||||
<appkit-button />
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div v-else>
|
<div v-if="!isConnected">
|
||||||
<div class="owner-info">
|
<button
|
||||||
<p>Текущий владелец:
|
@click="connectWallet"
|
||||||
<span v-if="loading">Загрузка...</span>
|
class="connect-button"
|
||||||
<span v-else-if="owner">{{ formatAddress(owner) }}</span>
|
>
|
||||||
<span v-else>Не удалось загрузить</span>
|
Подключить кошелек
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div v-if="error" class="error-message">{{ error }}</div>
|
||||||
|
|
||||||
|
<div v-if="isConnected && isCorrectNetwork" class="wallet-info">
|
||||||
|
<p>Адрес кошелька: {{ address }}</p>
|
||||||
|
|
||||||
|
<div class="contract-controls">
|
||||||
|
<h3>Управление контрактом</h3>
|
||||||
|
<p v-if="currentPrice" class="price-info">
|
||||||
|
Текущая цена: {{ formatPrice(currentPrice) }} ETH
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<!-- Панель управления для владельца -->
|
||||||
|
<div v-if="isOwner" class="owner-controls">
|
||||||
|
<h4>Панель владельца</h4>
|
||||||
|
<div class="input-group">
|
||||||
|
<input
|
||||||
|
v-model="newPrice"
|
||||||
|
type="number"
|
||||||
|
step="0.001"
|
||||||
|
placeholder="Новая цена (ETH)"
|
||||||
|
class="amount-input"
|
||||||
|
/>
|
||||||
|
<button
|
||||||
|
@click="handleSetPrice"
|
||||||
|
:disabled="!newPrice || isLoading"
|
||||||
|
class="admin-button"
|
||||||
|
>
|
||||||
|
Установить цену
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<button
|
||||||
|
@click="handleWithdraw"
|
||||||
|
:disabled="isLoading"
|
||||||
|
class="admin-button withdraw-button"
|
||||||
|
>
|
||||||
|
Вывести средства
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Панель покупки -->
|
||||||
|
<div class="purchase-panel">
|
||||||
|
<h4>Покупка</h4>
|
||||||
|
<div class="input-group">
|
||||||
|
<input
|
||||||
|
v-model="amount"
|
||||||
|
type="number"
|
||||||
|
placeholder="Введите количество"
|
||||||
|
class="amount-input"
|
||||||
|
/>
|
||||||
|
<button
|
||||||
|
@click="handlePurchase"
|
||||||
|
:disabled="!amount || isLoading"
|
||||||
|
class="purchase-button"
|
||||||
|
>
|
||||||
|
{{ isLoading ? 'Обработка...' : 'Купить' }}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<p v-if="amount && currentPrice" class="total-cost">
|
||||||
|
Общая стоимость: {{ formatPrice(currentPrice * amount) }} ETH
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="owner-controls">
|
<p v-if="success" class="success-message">{{ success }}</p>
|
||||||
<input
|
|
||||||
v-model="newOwner"
|
|
||||||
placeholder="Адрес нового владельца (0x...)"
|
|
||||||
:disabled="!isConnected"
|
|
||||||
/>
|
|
||||||
<button
|
|
||||||
@click="setNewOwner"
|
|
||||||
:disabled="!isConnected || !isValidAddress(newOwner)"
|
|
||||||
>
|
|
||||||
Установить нового владельца
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script setup>
|
||||||
import { ref, onMounted, watch } from 'vue';
|
import { ref, onMounted, computed, watch } from 'vue'
|
||||||
import { ethers } from 'ethers';
|
import { BrowserProvider, Contract, JsonRpcProvider, formatEther, parseEther } from 'ethers'
|
||||||
import { useAppKitAccount, useAppKitProvider, useAppKit } from '@reown/appkit/vue';
|
|
||||||
import config from '../config';
|
|
||||||
|
|
||||||
export default {
|
// Инициализируем все ref переменные в начале
|
||||||
name: 'ContractInteraction',
|
const amount = ref('')
|
||||||
setup() {
|
const newPrice = ref('')
|
||||||
const owner = ref('');
|
const isLoading = ref(false)
|
||||||
const newOwner = ref('');
|
const error = ref('')
|
||||||
const loading = ref(false);
|
const success = ref('')
|
||||||
const { address, isConnected } = useAppKitAccount();
|
const currentPrice = ref(null)
|
||||||
const { walletProvider } = useAppKitProvider('eip155');
|
const contractOwner = ref(null)
|
||||||
const { contractAddress, contractABI } = config.contract;
|
const isCorrectNetwork = ref(false)
|
||||||
|
const isConnected = ref(false)
|
||||||
|
const isInitialized = ref(false)
|
||||||
|
const address = ref(null)
|
||||||
|
const walletProvider = ref(null)
|
||||||
|
const isAuthenticated = ref(false)
|
||||||
|
|
||||||
const { open } = useAppKit(); // Получаем функцию открытия модала
|
// Константы
|
||||||
|
const SEPOLIA_CHAIN_ID = 11155111
|
||||||
|
const provider = new JsonRpcProvider(import.meta.env.VITE_APP_ETHEREUM_NETWORK_URL)
|
||||||
|
const contractAddress = '0xD1789d2E00e4af3157330ADFbb813427696c8A01'
|
||||||
|
const contractABI = [
|
||||||
|
'function purchase(uint256 amount) payable',
|
||||||
|
'function price() view returns (uint256)',
|
||||||
|
'function owner() view returns (address)',
|
||||||
|
'function setPrice(uint256 newPrice) public',
|
||||||
|
'function withdraw() public',
|
||||||
|
'event Purchase(address buyer, uint256 amount)'
|
||||||
|
]
|
||||||
|
|
||||||
const formatAddress = (addr) => addr.slice(0, 6) + '...' + addr.slice(-4);
|
// Вычисляемые свойства
|
||||||
|
const isOwner = computed(() => {
|
||||||
|
return address.value && contractOwner.value &&
|
||||||
|
address.value.toLowerCase() === contractOwner.value.toLowerCase()
|
||||||
|
})
|
||||||
|
|
||||||
const isValidAddress = (addr) => {
|
// Функции
|
||||||
|
function formatPrice(price) {
|
||||||
|
return formatEther(price)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Функция инициализации контракта
|
||||||
|
async function initializeContract() {
|
||||||
try {
|
try {
|
||||||
return ethers.isAddress(addr);
|
if (!provider) {
|
||||||
} catch {
|
throw new Error('Provider не доступен')
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
};
|
|
||||||
|
|
||||||
// Следим за изменением состояния подключения
|
const contract = new Contract(contractAddress, contractABI, provider)
|
||||||
watch(isConnected, async (newValue) => {
|
await Promise.all([
|
||||||
console.log('Connection state changed:', newValue);
|
contract.price().then(price => {
|
||||||
if (newValue) {
|
currentPrice.value = price
|
||||||
await fetchOwner();
|
console.log('Начальная цена:', formatEther(price), 'ETH')
|
||||||
|
}),
|
||||||
|
contract.owner().then(owner => {
|
||||||
|
contractOwner.value = owner
|
||||||
|
console.log('Владелец контракта:', owner)
|
||||||
|
})
|
||||||
|
])
|
||||||
|
|
||||||
|
isInitialized.value = true
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Ошибка при инициализации контракта:', err)
|
||||||
|
error.value = 'Ошибка при инициализации контракта: ' + err.message
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Функция подключения к MetaMask
|
||||||
|
async function connectWallet() {
|
||||||
|
try {
|
||||||
|
// Проверяем доступность MetaMask
|
||||||
|
if (!window.ethereum) {
|
||||||
|
throw new Error('MetaMask не установлен')
|
||||||
|
}
|
||||||
|
|
||||||
|
// Запрашиваем доступ к аккаунту
|
||||||
|
const accounts = await window.ethereum.request({
|
||||||
|
method: 'eth_requestAccounts'
|
||||||
|
})
|
||||||
|
|
||||||
|
// Сохраняем адрес и провайдер
|
||||||
|
address.value = accounts[0]
|
||||||
|
walletProvider.value = window.ethereum
|
||||||
|
isConnected.value = true
|
||||||
|
|
||||||
|
// Подписываемся на изменение аккаунта
|
||||||
|
window.ethereum.on('accountsChanged', handleAccountsChanged)
|
||||||
|
window.ethereum.on('chainChanged', handleChainChanged)
|
||||||
|
|
||||||
|
await checkNetwork()
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Ошибка при подключении кошелька:', err)
|
||||||
|
error.value = 'Ошибка при подключении кошелька: ' + err.message
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Обработчики событий MetaMask
|
||||||
|
function handleAccountsChanged(accounts) {
|
||||||
|
if (accounts.length === 0) {
|
||||||
|
// MetaMask отключен
|
||||||
|
isConnected.value = false
|
||||||
|
address.value = null
|
||||||
} else {
|
} else {
|
||||||
owner.value = '';
|
// Аккаунт изменен
|
||||||
|
address.value = accounts[0]
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
|
||||||
const handleConnect = async () => {
|
function handleChainChanged() {
|
||||||
try {
|
// При смене сети перезагружаем страницу
|
||||||
console.log('Attempting to connect wallet...');
|
window.location.reload()
|
||||||
await open(); // Используем хуки для открытия модала
|
}
|
||||||
console.log('Wallet connected successfully');
|
|
||||||
} catch (error) {
|
|
||||||
console.error('Wallet connection error:', error);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const fetchOwner = async () => {
|
// Обновляем watch
|
||||||
if (!isConnected.value || !walletProvider) {
|
watch(isConnected, async (newValue) => {
|
||||||
console.log('Cannot fetch owner: wallet not connected');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
loading.value = true;
|
|
||||||
try {
|
try {
|
||||||
console.log('Получаем владельца контракта...');
|
if (newValue) {
|
||||||
const ethersProvider = new ethers.BrowserProvider(walletProvider);
|
console.log('Кошелек подключен, адрес:', address.value)
|
||||||
const contract = new ethers.Contract(contractAddress, contractABI, ethersProvider);
|
|
||||||
owner.value = await contract.owner();
|
if (!isInitialized.value) {
|
||||||
console.log('Владелец контракта:', owner.value);
|
await initializeContract()
|
||||||
|
}
|
||||||
|
await checkNetwork()
|
||||||
|
} else {
|
||||||
|
console.log('Кошелек отключен')
|
||||||
|
currentPrice.value = null
|
||||||
|
contractOwner.value = null
|
||||||
|
isCorrectNetwork.value = false
|
||||||
|
error.value = ''
|
||||||
|
isInitialized.value = false
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Ошибка при обработке подключения:', err)
|
||||||
|
error.value = 'Ошибка при обработке подключения: ' + err.message
|
||||||
|
}
|
||||||
|
}, { immediate: true })
|
||||||
|
|
||||||
|
// Обновляем функцию проверки сети
|
||||||
|
async function checkNetwork() {
|
||||||
|
try {
|
||||||
|
if (!walletProvider.value) {
|
||||||
|
isCorrectNetwork.value = false
|
||||||
|
error.value = 'Провайдер кошелька недоступен'
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
const ethersProvider = new BrowserProvider(walletProvider.value)
|
||||||
|
const network = await ethersProvider.getNetwork()
|
||||||
|
console.log('Текущая сеть:', network.chainId)
|
||||||
|
|
||||||
|
isCorrectNetwork.value = Number(network.chainId) === SEPOLIA_CHAIN_ID
|
||||||
|
|
||||||
|
if (!isCorrectNetwork.value) {
|
||||||
|
error.value = `Пожалуйста, переключитесь на сеть Sepolia (${SEPOLIA_CHAIN_ID}). Текущая сеть: ${network.chainId}`
|
||||||
|
} else {
|
||||||
|
error.value = ''
|
||||||
|
await Promise.all([fetchPrice(), fetchOwner()])
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Ошибка при проверке сети:', err)
|
||||||
|
isCorrectNetwork.value = false
|
||||||
|
error.value = 'Ошибка при проверке сети: ' + err.message
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Обновляем функцию fetchPrice с обработкой ошибок
|
||||||
|
async function fetchPrice() {
|
||||||
|
try {
|
||||||
|
const contract = new Contract(contractAddress, contractABI, provider)
|
||||||
|
const price = await contract.price()
|
||||||
|
currentPrice.value = price
|
||||||
|
console.log('Текущая цена:', formatEther(price), 'ETH')
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Ошибка при получении цены:', err)
|
||||||
|
error.value = `Не удалось получить текущую цену: ${err.message}`
|
||||||
|
currentPrice.value = null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Получение адреса владельца
|
||||||
|
async function fetchOwner() {
|
||||||
|
try {
|
||||||
|
const contract = new Contract(contractAddress, contractABI, provider)
|
||||||
|
contractOwner.value = await contract.owner()
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Ошибка при получении адреса владельца:', err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Обновляем onMounted
|
||||||
|
onMounted(async () => {
|
||||||
|
console.log('Компонент смонтирован')
|
||||||
|
|
||||||
|
try {
|
||||||
|
await initializeContract()
|
||||||
|
|
||||||
|
if (provider) {
|
||||||
|
const contract = new Contract(contractAddress, contractABI, provider)
|
||||||
|
|
||||||
|
contract.on('Purchase', (buyer, amount) => {
|
||||||
|
console.log(`Новая покупка: ${amount} единиц от ${buyer}`)
|
||||||
|
fetchPrice()
|
||||||
|
})
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
contract.removeAllListeners('Purchase')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Ошибка при монтировании компонента:', err)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
// Обновляем handlePurchase
|
||||||
|
async function handlePurchase() {
|
||||||
|
if (!amount.value) return
|
||||||
|
if (!isCorrectNetwork.value) {
|
||||||
|
error.value = 'Пожалуйста, переключитесь на сеть Sepolia'
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
error.value = ''
|
||||||
|
success.value = ''
|
||||||
|
|
||||||
|
try {
|
||||||
|
isLoading.value = true
|
||||||
|
const ethersProvider = new BrowserProvider(walletProvider.value)
|
||||||
|
const signer = await ethersProvider.getSigner()
|
||||||
|
const contract = new Contract(contractAddress, contractABI, signer)
|
||||||
|
|
||||||
|
const price = await contract.price()
|
||||||
|
console.log('Цена для покупки:', formatEther(price), 'ETH')
|
||||||
|
const totalCost = price * BigInt(amount.value)
|
||||||
|
console.log('Общая стоимость:', formatEther(totalCost), 'ETH')
|
||||||
|
|
||||||
|
const tx = await contract.purchase(amount.value, {
|
||||||
|
value: totalCost
|
||||||
|
})
|
||||||
|
console.log('Транзакция отправлена:', tx.hash)
|
||||||
|
await tx.wait()
|
||||||
|
console.log('Транзакция подтверждена')
|
||||||
|
|
||||||
|
amount.value = ''
|
||||||
|
success.value = 'Покупка успешно совершена!'
|
||||||
|
await fetchPrice()
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Ошибка при получении владельца:', error);
|
console.error('Ошибка при покупке:', error)
|
||||||
owner.value = '';
|
if (error.message.includes('user rejected')) {
|
||||||
|
error.value = 'Транзакция отменена пользователем'
|
||||||
|
} else {
|
||||||
|
error.value = 'Произошла ошибка при совершении покупки: ' + error.message
|
||||||
|
}
|
||||||
} finally {
|
} finally {
|
||||||
loading.value = false;
|
isLoading.value = false
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
|
||||||
|
// Добавляем новые функции
|
||||||
|
async function handleSetPrice() {
|
||||||
|
if (!newPrice.value) return
|
||||||
|
error.value = ''
|
||||||
|
success.value = ''
|
||||||
|
|
||||||
const setNewOwner = async () => {
|
|
||||||
try {
|
try {
|
||||||
if (!isConnected.value) {
|
isLoading.value = true
|
||||||
console.log('Пожалуйста, подключите кошелек');
|
const ethersProvider = new BrowserProvider(walletProvider.value)
|
||||||
return;
|
const signer = await ethersProvider.getSigner()
|
||||||
}
|
const contract = new Contract(contractAddress, contractABI, signer)
|
||||||
if (!isValidAddress(newOwner.value)) {
|
|
||||||
console.log('Неверный адрес');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const ethersProvider = new ethers.BrowserProvider(walletProvider);
|
const priceInWei = parseEther(newPrice.value.toString())
|
||||||
const signer = await ethersProvider.getSigner();
|
const tx = await contract.setPrice(priceInWei)
|
||||||
const contract = new ethers.Contract(contractAddress, contractABI, signer);
|
await tx.wait()
|
||||||
|
|
||||||
const tx = await contract.setOwner(newOwner.value);
|
newPrice.value = ''
|
||||||
await tx.wait();
|
success.value = 'Цена успешно обновлена!'
|
||||||
|
await fetchPrice()
|
||||||
await fetchOwner();
|
} catch (err) {
|
||||||
newOwner.value = '';
|
console.error('Ошибка при установке цены:', err)
|
||||||
} catch (error) {
|
error.value = 'Ошибка при установке цены: ' + err.message
|
||||||
console.error('Ошибка при установке нового владельца:', error);
|
} finally {
|
||||||
|
isLoading.value = false
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
|
||||||
onMounted(async () => {
|
async function handleWithdraw() {
|
||||||
if (isConnected.value) {
|
error.value = ''
|
||||||
await fetchOwner();
|
success.value = ''
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return {
|
try {
|
||||||
owner,
|
isLoading.value = true
|
||||||
newOwner,
|
const ethersProvider = new BrowserProvider(walletProvider.value)
|
||||||
isConnected,
|
const signer = await ethersProvider.getSigner()
|
||||||
loading,
|
const contract = new Contract(contractAddress, contractABI, signer)
|
||||||
handleConnect,
|
|
||||||
setNewOwner,
|
const tx = await contract.withdraw()
|
||||||
formatAddress,
|
await tx.wait()
|
||||||
isValidAddress
|
|
||||||
};
|
success.value = 'Средства успешно выведены!'
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Ошибка при выводе средств:', err)
|
||||||
|
error.value = 'Ошибка при выводе средств: ' + err.message
|
||||||
|
} finally {
|
||||||
|
isLoading.value = false
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
.contract-interaction {
|
.contract-interaction {
|
||||||
|
padding: 20px;
|
||||||
max-width: 600px;
|
max-width: 600px;
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
padding: 20px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.warning {
|
.wallet-info {
|
||||||
color: #721c24;
|
margin-top: 20px;
|
||||||
background-color: #f8d7da;
|
padding: 15px;
|
||||||
border: 1px solid #f5c6cb;
|
background-color: #f5f5f5;
|
||||||
padding: 10px;
|
border-radius: 8px;
|
||||||
border-radius: 4px;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.owner-info {
|
.contract-controls {
|
||||||
margin-bottom: 20px;
|
margin-top: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.owner-controls {
|
.input-group {
|
||||||
display: flex;
|
display: flex;
|
||||||
gap: 10px;
|
gap: 10px;
|
||||||
|
margin-top: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
input {
|
.amount-input {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
padding: 8px;
|
padding: 8px;
|
||||||
border: 1px solid #ccc;
|
border: 1px solid #ddd;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
button {
|
.purchase-button {
|
||||||
padding: 8px 16px;
|
padding: 8px 16px;
|
||||||
background-color: #4CAF50;
|
background-color: #4CAF50;
|
||||||
color: white;
|
color: white;
|
||||||
border: none;
|
border: none;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
transition: background-color 0.3s;
|
||||||
}
|
}
|
||||||
|
|
||||||
button:disabled {
|
.purchase-button:hover:not(:disabled) {
|
||||||
|
background-color: #45a049;
|
||||||
|
}
|
||||||
|
|
||||||
|
.purchase-button:disabled {
|
||||||
background-color: #cccccc;
|
background-color: #cccccc;
|
||||||
cursor: not-allowed;
|
cursor: not-allowed;
|
||||||
}
|
}
|
||||||
|
|
||||||
button:hover:not(:disabled) {
|
.error-message {
|
||||||
background-color: #45a049;
|
color: #dc3545;
|
||||||
|
padding: 10px;
|
||||||
|
margin: 10px 0;
|
||||||
|
background-color: #f8d7da;
|
||||||
|
border: 1px solid #f5c6cb;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.price-info {
|
||||||
|
margin: 10px 0;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #2c3e50;
|
||||||
|
}
|
||||||
|
|
||||||
|
.owner-controls {
|
||||||
|
margin-top: 20px;
|
||||||
|
padding: 15px;
|
||||||
|
background-color: #f8f9fa;
|
||||||
|
border-radius: 8px;
|
||||||
|
border: 1px solid #e9ecef;
|
||||||
|
}
|
||||||
|
|
||||||
|
.purchase-panel {
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.admin-button {
|
||||||
|
padding: 8px 16px;
|
||||||
|
background-color: #007bff;
|
||||||
|
color: white;
|
||||||
|
border: none;
|
||||||
|
border-radius: 4px;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: background-color 0.3s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.admin-button:hover:not(:disabled) {
|
||||||
|
background-color: #0056b3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.withdraw-button {
|
||||||
|
margin-top: 10px;
|
||||||
|
background-color: #6c757d;
|
||||||
|
}
|
||||||
|
|
||||||
|
.withdraw-button:hover:not(:disabled) {
|
||||||
|
background-color: #5a6268;
|
||||||
|
}
|
||||||
|
|
||||||
|
.total-cost {
|
||||||
|
margin-top: 10px;
|
||||||
|
font-size: 0.9em;
|
||||||
|
color: #6c757d;
|
||||||
|
}
|
||||||
|
|
||||||
|
.success-message {
|
||||||
|
color: #28a745;
|
||||||
|
margin-top: 10px;
|
||||||
|
font-size: 0.9em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.loading-message {
|
||||||
|
color: #6c757d;
|
||||||
|
text-align: center;
|
||||||
|
padding: 20px;
|
||||||
|
background-color: #f8f9fa;
|
||||||
|
border-radius: 4px;
|
||||||
|
margin: 10px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-status {
|
||||||
|
margin: 10px 0;
|
||||||
|
padding: 10px;
|
||||||
|
background-color: #f8f9fa;
|
||||||
|
border-radius: 4px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.authenticated {
|
||||||
|
color: #28a745;
|
||||||
|
}
|
||||||
|
|
||||||
|
.signout-button {
|
||||||
|
padding: 5px 10px;
|
||||||
|
background-color: #dc3545;
|
||||||
|
color: white;
|
||||||
|
border: none;
|
||||||
|
border-radius: 4px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.signout-button:hover {
|
||||||
|
background-color: #c82333;
|
||||||
}
|
}
|
||||||
|
|
||||||
.connect-button {
|
.connect-button {
|
||||||
margin-top: 10px;
|
padding: 10px 20px;
|
||||||
background-color: #007bff;
|
background-color: #4CAF50;
|
||||||
|
color: white;
|
||||||
|
border: none;
|
||||||
|
border-radius: 4px;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 16px;
|
||||||
|
transition: background-color 0.3s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.connect-button:hover:not(:disabled) {
|
.connect-button:hover {
|
||||||
background-color: #0056b3;
|
background-color: #45a049;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div ref="walletButton"></div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import { onMounted, ref } from 'vue';
|
|
||||||
import '@reown/appkit-wallet-button/react';
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: 'WalletButtonWrapper',
|
|
||||||
props: {
|
|
||||||
wallet: {
|
|
||||||
type: String,
|
|
||||||
required: true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
setup(props) {
|
|
||||||
const walletButton = ref(null);
|
|
||||||
|
|
||||||
onMounted(() => {
|
|
||||||
const button = document.createElement('appkit-wallet-button');
|
|
||||||
button.setAttribute('wallet', props.wallet);
|
|
||||||
walletButton.value.appendChild(button);
|
|
||||||
});
|
|
||||||
|
|
||||||
return {
|
|
||||||
walletButton
|
|
||||||
};
|
|
||||||
}
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
import { EthersAdapter } from '@reown/appkit-adapter-ethers'
|
|
||||||
import { sepolia } from '@reown/appkit/networks'
|
|
||||||
|
|
||||||
export const projectId = '9a6515f7259ebccd149fd53341e01e6b'
|
|
||||||
|
|
||||||
export const networks = [sepolia]
|
|
||||||
|
|
||||||
export const ethersAdapter = new EthersAdapter()
|
|
||||||
|
|
||||||
export const config = {
|
|
||||||
ethereum: {
|
|
||||||
networkUrl: import.meta.env.VITE_APP_ETHEREUM_NETWORK_URL as string,
|
|
||||||
projectId: import.meta.env.VITE_APP_PROJECT_ID as string
|
|
||||||
},
|
|
||||||
api: {
|
|
||||||
baseUrl: 'http://localhost:3000', // URL бэкенда
|
|
||||||
endpoints: {
|
|
||||||
verify: '/api/verify'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
contract: {
|
|
||||||
address: '0x6199Ba629C85Da887dBd8Ffd8d2C75Ea24EaDe2a',
|
|
||||||
abi: [
|
|
||||||
'function owner() view returns (address)',
|
|
||||||
'function setOwner(address newOwner)'
|
|
||||||
]
|
|
||||||
},
|
|
||||||
metadata: {
|
|
||||||
name: 'DApp for Business',
|
|
||||||
description: 'Управление смарт-контрактом',
|
|
||||||
url: window.location.origin,
|
|
||||||
icons: ['https://avatars.githubusercontent.com/u/37784886']
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
export default config;
|
|
||||||
7
frontend/src/env.d.ts
vendored
7
frontend/src/env.d.ts
vendored
@@ -1,7 +0,0 @@
|
|||||||
/// <reference types="vite/client" />
|
|
||||||
|
|
||||||
declare module '*.vue' {
|
|
||||||
import type { DefineComponent } from 'vue'
|
|
||||||
const component: DefineComponent<{}, {}, any>
|
|
||||||
export default component
|
|
||||||
}
|
|
||||||
@@ -1,26 +1,6 @@
|
|||||||
import { createApp } from 'vue';
|
import { createApp } from 'vue'
|
||||||
import App from './App.vue';
|
import App from './App.vue'
|
||||||
import { createAppKit } from '@reown/appkit/vue';
|
|
||||||
import { EthersAdapter } from '@reown/appkit-adapter-ethers';
|
|
||||||
import { sepolia } from '@reown/appkit/networks';
|
|
||||||
import config from './config'; // Импортируем конфигурацию
|
|
||||||
|
|
||||||
const appKit = createAppKit({
|
// Создаем и монтируем приложение Vue
|
||||||
adapters: [new EthersAdapter()],
|
const app = createApp(App)
|
||||||
projectId: config.ethereum.projectId,
|
app.mount('#app')
|
||||||
networks: [sepolia],
|
|
||||||
defaultNetwork: sepolia,
|
|
||||||
metadata: config.metadata,
|
|
||||||
features: {
|
|
||||||
analytics: true
|
|
||||||
},
|
|
||||||
themeMode: 'light', // Добавляем светлую тему
|
|
||||||
themeVariables: {
|
|
||||||
'--w3m-color-mix': '#00BB7F',
|
|
||||||
'--w3m-color-mix-strength': 40
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
const app = createApp(App);
|
|
||||||
app.use(appKit); // Подключаем AppKit как плагин
|
|
||||||
app.mount('#app');
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
export interface ContractState {
|
|
||||||
owner: string;
|
|
||||||
isConnected: boolean;
|
|
||||||
loading: boolean;
|
|
||||||
}
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
import { ethers } from 'ethers';
|
|
||||||
|
|
||||||
export const formatAddress = (address: string): string => {
|
|
||||||
return `${address.slice(0, 6)}...${address.slice(-4)}`;
|
|
||||||
};
|
|
||||||
|
|
||||||
export const isValidAddress = (address: string): boolean => {
|
|
||||||
return ethers.isAddress(address);
|
|
||||||
};
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
{
|
|
||||||
"compilerOptions": {
|
|
||||||
"target": "esnext",
|
|
||||||
"useDefineForClassFields": true,
|
|
||||||
"module": "esnext",
|
|
||||||
"moduleResolution": "node",
|
|
||||||
"strict": true,
|
|
||||||
"jsx": "preserve",
|
|
||||||
"sourceMap": true,
|
|
||||||
"resolveJsonModule": true,
|
|
||||||
"isolatedModules": true,
|
|
||||||
"esModuleInterop": true,
|
|
||||||
"lib": ["esnext", "dom"],
|
|
||||||
"skipLibCheck": true,
|
|
||||||
"allowJs": true,
|
|
||||||
"baseUrl": ".",
|
|
||||||
"paths": {
|
|
||||||
"@/*": ["./src/*"]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"include": [
|
|
||||||
"src/**/*.ts",
|
|
||||||
"src/**/*.d.ts",
|
|
||||||
"src/**/*.tsx",
|
|
||||||
"src/**/*.vue"
|
|
||||||
],
|
|
||||||
"exclude": [
|
|
||||||
"node_modules"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,22 +1,13 @@
|
|||||||
import { defineConfig } from 'vite';
|
import { defineConfig } from 'vite'
|
||||||
import vue from '@vitejs/plugin-vue';
|
import vue from '@vitejs/plugin-vue'
|
||||||
import { fileURLToPath, URL } from 'node:url';
|
|
||||||
|
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
plugins: [
|
plugins: [vue({
|
||||||
vue({
|
|
||||||
template: {
|
template: {
|
||||||
compilerOptions: {
|
compilerOptions: {
|
||||||
isCustomElement: (tag) =>
|
// Указываем Vue, что appkit-* компоненты являются кастомными элементами
|
||||||
tag.startsWith('appkit-') ||
|
isCustomElement: (tag) => tag.startsWith('appkit-')
|
||||||
tag.startsWith('w3m-')
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})]
|
||||||
],
|
})
|
||||||
resolve: {
|
|
||||||
alias: {
|
|
||||||
'@': fileURLToPath(new URL('./src', import.meta.url))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
1652
frontend/yarn.lock
1652
frontend/yarn.lock
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user