feat: add lock release method at blockchain util
Co-authored-by: brunoedcf <brest.dallacosta@outlook.com>
This commit is contained in:
parent
e7ca40c30f
commit
1027744a83
@ -4,14 +4,19 @@ export const useEtherStore = defineStore("ether", {
|
|||||||
state: () => ({
|
state: () => ({
|
||||||
walletAddress: "",
|
walletAddress: "",
|
||||||
balance: "",
|
balance: "",
|
||||||
|
|
||||||
// Depósitos válidos para compra
|
// Depósitos válidos para compra
|
||||||
depositsValidList: [{}],
|
depositsValidList: [] as any[],
|
||||||
// Depósitos adicionados na blockchain
|
// Depósitos adicionados na blockchain
|
||||||
depositsAddedList: [{}],
|
depositsAddedList: [] as any[],
|
||||||
// Depósitos expirados na blockchain
|
// Depósitos expirados na blockchain
|
||||||
depositsExpiredList: [{}],
|
depositsExpiredList: [] as any[],
|
||||||
// Locks adicionados na blockchain
|
// Locks adicionados na blockchain
|
||||||
locksAddedList: [{}],
|
locksAddedList: [] as any[],
|
||||||
|
// Locks 'released' na blockchain
|
||||||
|
locksReleasedList: [] as any[],
|
||||||
|
// Locks expirados na blockchain
|
||||||
|
locksExpiredList: [] as any[]
|
||||||
}),
|
}),
|
||||||
actions: {
|
actions: {
|
||||||
setWalletAddress(walletAddress: string) {
|
setWalletAddress(walletAddress: string) {
|
||||||
@ -32,5 +37,11 @@ export const useEtherStore = defineStore("ether", {
|
|||||||
setLocksAddedList(locksAddedList: any[]) {
|
setLocksAddedList(locksAddedList: any[]) {
|
||||||
this.locksAddedList = locksAddedList;
|
this.locksAddedList = locksAddedList;
|
||||||
},
|
},
|
||||||
|
setLocksReleasedList(locksReleasedList: any[]) {
|
||||||
|
this.locksReleasedList = locksReleasedList;
|
||||||
|
},
|
||||||
|
setLocksExpiredList(locksExpiredList: any[]) {
|
||||||
|
this.locksExpiredList = locksExpiredList;
|
||||||
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
@ -8,8 +8,44 @@ import addresses from "./smart_contract_files/localhost.json";
|
|||||||
// Mock wallets import
|
// Mock wallets import
|
||||||
import { wallets } from "./smart_contract_files/wallets.json";
|
import { wallets } from "./smart_contract_files/wallets.json";
|
||||||
|
|
||||||
// Provider methods
|
// Wallet methods
|
||||||
const connectProvider = async () => {
|
// Update wallet state (balance and address)
|
||||||
|
const updateWalletStatus = async () => {
|
||||||
|
const etherStore = useEtherStore();
|
||||||
|
const provider = getProvider();
|
||||||
|
if (!provider) return;
|
||||||
|
|
||||||
|
const signer = provider.getSigner();
|
||||||
|
const contract = new ethers.Contract(addresses.token, mockToken.abi, signer);
|
||||||
|
|
||||||
|
const walletAddress = await provider.send("eth_requestAccounts", []);
|
||||||
|
|
||||||
|
const balance = await contract.balanceOf(walletAddress[0]);
|
||||||
|
|
||||||
|
etherStore.setBalance(String(balance));
|
||||||
|
etherStore.setWalletAddress(ethers.utils.getAddress(walletAddress[0]));
|
||||||
|
};
|
||||||
|
|
||||||
|
// Split tokens between wallets in wallets.json
|
||||||
|
const splitTokens = async () => {
|
||||||
|
const provider = getProvider();
|
||||||
|
if (!provider) return;
|
||||||
|
|
||||||
|
const signer = provider.getSigner();
|
||||||
|
const tokenContract = new ethers.Contract(addresses.token, mockToken.abi, signer);
|
||||||
|
|
||||||
|
for (let i = 0; i < wallets.length; i++) {
|
||||||
|
const tx = await tokenContract.transfer(
|
||||||
|
wallets[i],
|
||||||
|
ethers.utils.parseEther("4000000.0")
|
||||||
|
);
|
||||||
|
await tx.wait();
|
||||||
|
updateWalletStatus();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Update store
|
||||||
|
const updateStore = async () => {
|
||||||
const etherStore = useEtherStore();
|
const etherStore = useEtherStore();
|
||||||
const window_ = window as any;
|
const window_ = window as any;
|
||||||
const connection = window_.ethereum;
|
const connection = window_.ethereum;
|
||||||
@ -17,40 +53,44 @@ const connectProvider = async () => {
|
|||||||
|
|
||||||
if (!connection) return;
|
if (!connection) return;
|
||||||
provider = new ethers.providers.Web3Provider(connection);
|
provider = new ethers.providers.Web3Provider(connection);
|
||||||
|
|
||||||
const signer = provider.getSigner();
|
const signer = provider.getSigner();
|
||||||
const tokenContract = new ethers.Contract(
|
const p2pContract = new ethers.Contract(addresses.p2pix, p2pix.abi, signer);
|
||||||
addresses.token,
|
|
||||||
mockToken.abi,
|
|
||||||
signer
|
|
||||||
);
|
|
||||||
|
|
||||||
const walletAddress = await provider.send("eth_requestAccounts", []);
|
const filterDeposits = p2pContract.filters.DepositAdded(null);
|
||||||
const balance = await tokenContract.balanceOf(walletAddress[0]);
|
const eventsDeposits = await p2pContract.queryFilter(filterDeposits);
|
||||||
|
|
||||||
etherStore.setWalletAddress(ethers.utils.getAddress(walletAddress[0]));
|
|
||||||
etherStore.setBalance(String(balance));
|
|
||||||
|
|
||||||
const p2pEvents = new ethers.Contract(addresses.p2pix, p2pix.abi, signer);
|
|
||||||
|
|
||||||
const filterDeposits = p2pEvents.filters.DepositAdded(null);
|
|
||||||
const eventsDeposits = await p2pEvents.queryFilter(filterDeposits);
|
|
||||||
console.log("Deposits Added: ", eventsDeposits);
|
console.log("Deposits Added: ", eventsDeposits);
|
||||||
etherStore.setDepositsAddedList(eventsDeposits);
|
etherStore.setDepositsAddedList(eventsDeposits);
|
||||||
|
|
||||||
const filterLocks = p2pEvents.filters.LockAdded(null);
|
const filterLocks = p2pContract.filters.LockAdded(null);
|
||||||
const eventsLocks = await p2pEvents.queryFilter(filterLocks);
|
const eventsLocks = await p2pContract.queryFilter(filterLocks);
|
||||||
console.log("Locks Added: ", eventsLocks);
|
console.log("Locks Added: ", eventsLocks);
|
||||||
etherStore.setLocksAddedList(eventsLocks);
|
etherStore.setLocksAddedList(eventsLocks);
|
||||||
|
|
||||||
const filterExpiredLocks = p2pEvents.filters.LockReturned(null);
|
const filterReleasedLocks = p2pContract.filters.LockReleased(null);
|
||||||
const eventsExpiredLocks = await p2pEvents.queryFilter(filterExpiredLocks);
|
const eventsReleasedLocks = await p2pContract.queryFilter(filterReleasedLocks);
|
||||||
|
console.log("Released Locks: ", eventsReleasedLocks);
|
||||||
|
etherStore.setLocksReleasedList(eventsReleasedLocks);
|
||||||
|
|
||||||
|
const filterExpiredLocks = p2pContract.filters.LockReturned(null);
|
||||||
|
const eventsExpiredLocks = await p2pContract.queryFilter(filterExpiredLocks);
|
||||||
console.log("Expired Locks: ", eventsExpiredLocks);
|
console.log("Expired Locks: ", eventsExpiredLocks);
|
||||||
etherStore.setDepositsExpiredList(eventsExpiredLocks);
|
etherStore.setLocksExpiredList(eventsExpiredLocks);
|
||||||
|
|
||||||
|
|
||||||
// (TO DO) Filter valid deposits
|
// (TO DO) Filter valid deposits
|
||||||
|
}
|
||||||
|
|
||||||
connection.on("accountsChanged", (accounts: string[]) => {
|
// Provider methods
|
||||||
updateWalletStatus(accounts[0]);
|
const connectProvider = async () => {
|
||||||
|
const window_ = window as any;
|
||||||
|
const connection = window_.ethereum;
|
||||||
|
|
||||||
|
await updateWalletStatus();
|
||||||
|
await updateStore();
|
||||||
|
|
||||||
|
connection.on("accountsChanged", () => {
|
||||||
|
updateWalletStatus();
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -63,55 +103,24 @@ const getProvider = (): ethers.providers.Web3Provider | null => {
|
|||||||
return new ethers.providers.Web3Provider(connection);
|
return new ethers.providers.Web3Provider(connection);
|
||||||
};
|
};
|
||||||
|
|
||||||
// Wallet methods
|
|
||||||
// Update wallet state (balance and address)
|
|
||||||
const updateWalletStatus = async (walletAddress: string) => {
|
|
||||||
const etherStore = useEtherStore();
|
|
||||||
const provider = getProvider();
|
|
||||||
if (!provider) return;
|
|
||||||
|
|
||||||
const signer = provider.getSigner();
|
|
||||||
const contract = new ethers.Contract(addresses.token, mockToken.abi, signer);
|
|
||||||
|
|
||||||
const balance = await contract.balanceOf(walletAddress);
|
|
||||||
|
|
||||||
etherStore.setBalance(String(balance));
|
|
||||||
etherStore.setWalletAddress(ethers.utils.getAddress(walletAddress));
|
|
||||||
};
|
|
||||||
|
|
||||||
// Split tokens between wallets in wallets.json
|
|
||||||
const splitTokens = async () => {
|
|
||||||
const etherStore = useEtherStore();
|
|
||||||
const provider = getProvider();
|
|
||||||
if (!provider) return;
|
|
||||||
|
|
||||||
const signer = provider.getSigner();
|
|
||||||
const contract = new ethers.Contract(addresses.token, mockToken.abi, signer);
|
|
||||||
|
|
||||||
for (let i = 0; i < wallets.length; i++) {
|
|
||||||
const tx = await contract.transfer(
|
|
||||||
wallets[i],
|
|
||||||
ethers.utils.parseEther("4000000.0")
|
|
||||||
);
|
|
||||||
await tx.wait();
|
|
||||||
updateWalletStatus(etherStore.walletAddress);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Deposit methods
|
// Deposit methods
|
||||||
// Gets value and pix key from user's form to create a deposit in the blockchain
|
// Gets value and pix key from user's form to create a deposit in the blockchain
|
||||||
const addDeposit = async (tokenQty = "1000.0", pixKey = "00011122233") => {
|
const addDeposit = async (tokenQty = "1000.0", pixKey = "00011122233") => {
|
||||||
const etherStore = useEtherStore();
|
|
||||||
const provider = getProvider();
|
const provider = getProvider();
|
||||||
|
|
||||||
if (!provider) return;
|
if (!provider) return;
|
||||||
|
|
||||||
const signer = provider.getSigner();
|
const signer = provider.getSigner();
|
||||||
|
|
||||||
const tokenContract = new ethers.Contract(
|
const tokenContract = new ethers.Contract(
|
||||||
addresses.token,
|
addresses.token,
|
||||||
mockToken.abi,
|
mockToken.abi,
|
||||||
signer
|
signer
|
||||||
);
|
);
|
||||||
const p2pContract = new ethers.Contract(addresses.p2pix, p2pix.abi, signer);
|
const p2pContract = new ethers.Contract(
|
||||||
|
addresses.p2pix,
|
||||||
|
p2pix.abi,
|
||||||
|
signer
|
||||||
|
);
|
||||||
|
|
||||||
// First get the approval
|
// First get the approval
|
||||||
const apprv = await tokenContract.approve(
|
const apprv = await tokenContract.approve(
|
||||||
@ -128,13 +137,7 @@ const addDeposit = async (tokenQty = "1000.0", pixKey = "00011122233") => {
|
|||||||
);
|
);
|
||||||
await deposit.wait();
|
await deposit.wait();
|
||||||
|
|
||||||
updateWalletStatus(etherStore.walletAddress);
|
updateStore();
|
||||||
|
|
||||||
const p2pEvents = new ethers.Contract(addresses.p2pix, p2pix.abi, signer);
|
|
||||||
const filter = p2pEvents.filters.DepositAdded(null);
|
|
||||||
const events = await p2pEvents.queryFilter(filter);
|
|
||||||
|
|
||||||
etherStore.setDepositsAddedList(events);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Get specific deposit data by its ID
|
// Get specific deposit data by its ID
|
||||||
@ -162,7 +165,7 @@ const addLock = async (depositId: Number, amount: Number) => {
|
|||||||
const p2pContract = new ethers.Contract(addresses.p2pix, p2pix.abi, signer);
|
const p2pContract = new ethers.Contract(addresses.p2pix, p2pix.abi, signer);
|
||||||
|
|
||||||
// Make lock
|
// Make lock
|
||||||
await p2pContract.lock(
|
const lock = await p2pContract.lock(
|
||||||
depositId,
|
depositId,
|
||||||
etherStore.walletAddress,
|
etherStore.walletAddress,
|
||||||
ethers.constants.AddressZero,
|
ethers.constants.AddressZero,
|
||||||
@ -170,10 +173,9 @@ const addLock = async (depositId: Number, amount: Number) => {
|
|||||||
ethers.utils.parseEther(amount.toString()),
|
ethers.utils.parseEther(amount.toString()),
|
||||||
[]
|
[]
|
||||||
);
|
);
|
||||||
|
lock.wait();
|
||||||
|
|
||||||
const filterLocks = p2pContract.filters.LockAdded(null);
|
updateStore();
|
||||||
const eventsLocks = await p2pContract.queryFilter(filterLocks);
|
|
||||||
etherStore.setLocksAddedList(eventsLocks);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Get specific lock data by its ID
|
// Get specific lock data by its ID
|
||||||
@ -187,13 +189,62 @@ const mapLocks = async (lockId: string) => {
|
|||||||
const lock = await contract.mapLocks(lockId);
|
const lock = await contract.mapLocks(lockId);
|
||||||
|
|
||||||
console.log(lock);
|
console.log(lock);
|
||||||
|
|
||||||
|
console.log("Expiration block = ", Number(lock.expirationBlock))
|
||||||
return lock;
|
return lock;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Releases lock by specific ID and other additional data
|
// Releases lock by specific ID and other additional data
|
||||||
// (TO DO)
|
|
||||||
const releaseLock = async () => {
|
const releaseLock = async () => {
|
||||||
return;
|
const etherStore = useEtherStore();
|
||||||
|
const provider = getProvider();
|
||||||
|
if (!provider) return;
|
||||||
|
|
||||||
|
const myLock = etherStore.locksAddedList[0];
|
||||||
|
const lockId = myLock.args.lockID
|
||||||
|
const depositId = myLock.args.depositID
|
||||||
|
const amount = formatBigNumber(myLock.args.amount);
|
||||||
|
|
||||||
|
const myDeposit = await mapDeposits(depositId);
|
||||||
|
const pixKey = myDeposit.pixTarget
|
||||||
|
|
||||||
|
const e2eId = 123
|
||||||
|
|
||||||
|
console.log(pixKey, amount, e2eId)
|
||||||
|
|
||||||
|
const mockBacenSigner = new ethers.Wallet("0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80")
|
||||||
|
|
||||||
|
const messageToSign = ethers.utils.solidityKeccak256(
|
||||||
|
[
|
||||||
|
"string",
|
||||||
|
"uint256",
|
||||||
|
"uint256"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
pixKey,
|
||||||
|
ethers.utils.parseEther(amount),
|
||||||
|
e2eId
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
const messageHashBytes = ethers.utils.arrayify(messageToSign);
|
||||||
|
const flatSig = await mockBacenSigner.signMessage(messageHashBytes);
|
||||||
|
const sig = ethers.utils.splitSignature(flatSig);
|
||||||
|
|
||||||
|
const signer = provider.getSigner();
|
||||||
|
const p2pContract = new ethers.Contract(addresses.p2pix, p2pix.abi, signer);
|
||||||
|
|
||||||
|
const release = await p2pContract.release(
|
||||||
|
lockId,
|
||||||
|
e2eId,
|
||||||
|
sig.r,
|
||||||
|
sig.s,
|
||||||
|
sig.v
|
||||||
|
)
|
||||||
|
release.wait()
|
||||||
|
console.log(release)
|
||||||
|
|
||||||
|
updateStore();
|
||||||
};
|
};
|
||||||
|
|
||||||
// Formatting methods
|
// Formatting methods
|
||||||
@ -216,5 +267,5 @@ export default {
|
|||||||
formatBigNumber,
|
formatBigNumber,
|
||||||
addLock,
|
addLock,
|
||||||
mapLocks,
|
mapLocks,
|
||||||
releaseLock,
|
releaseLock
|
||||||
};
|
};
|
Loading…
x
Reference in New Issue
Block a user