diff --git a/src/components/SearchComponent.vue b/src/components/SearchComponent.vue
index af592ef..5cff2b8 100644
--- a/src/components/SearchComponent.vue
+++ b/src/components/SearchComponent.vue
@@ -9,7 +9,7 @@ import blockchain from "../utils/blockchain";
// Store reference
const etherStore = useEtherStore();
-const { walletAddress, depositList } = storeToRefs(etherStore);
+const { walletAddress, depositsAddedList } = storeToRefs(etherStore);
// Reactive state
const tokenValue = ref(0);
@@ -21,12 +21,13 @@ const selectedDeposit = ref();
// Emits
const emit = defineEmits(["tokenBuy"]);
-// Methods
+// Blockchain methods
const connectAccount = async () => {
await blockchain.connectProvider();
verifyLiquidity();
};
+// Debounce methods
const handleInputEvent = (event: any) => {
const { value } = event.target;
@@ -42,6 +43,8 @@ const handleInputEvent = (event: any) => {
verifyLiquidity();
};
+// Enable button methods
+// Check if has more than 2 decimal places
const decimalCount = (num: Number) => {
const numStr = String(num);
if (numStr.includes(".")) {
@@ -49,17 +52,15 @@ const decimalCount = (num: Number) => {
}
return 0;
};
-
+// Verify if there is a valid deposit to buy
const verifyLiquidity = () => {
enableSelectButton.value = false;
selectedDeposit.value = null;
- if (!walletAddress.value || tokenValue.value == 0) return;
+ if (!walletAddress.value || tokenValue.value <= 0) return;
- const found = depositList.value.find((element) => {
- const p2pixTokenValue = blockchain.verifyDepositAmmount(
- element.args.amount
- );
+ depositsAddedList.value.find((element) => {
+ const p2pixTokenValue = blockchain.formatBigNumber(element.args.amount);
if (
tokenValue.value!! <= Number(p2pixTokenValue) &&
tokenValue.value!! != 0 &&
@@ -68,7 +69,10 @@ const verifyLiquidity = () => {
enableSelectButton.value = true;
hasLiquidity.value = true;
selectedDeposit.value = element;
- console.log("Selected is :", blockchain.verifyDepositAmmount(element.args.amount))
+ console.log(
+ "Selected is :",
+ blockchain.formatBigNumber(element.args.amount)
+ );
return true;
}
return false;
diff --git a/src/components/TopBar.vue b/src/components/TopBar.vue
index 5349b61..f2bcb78 100644
--- a/src/components/TopBar.vue
+++ b/src/components/TopBar.vue
@@ -39,7 +39,6 @@ const formatWalletBalance = (): string => {
src="@/assets/logo.svg"
width="75"
height="75"
- @load="connectMetaMask()"
/>
diff --git a/src/store/ether.ts b/src/store/ether.ts
index 3a5b62b..4a56135 100644
--- a/src/store/ether.ts
+++ b/src/store/ether.ts
@@ -4,7 +4,14 @@ export const useEtherStore = defineStore("ether", {
state: () => ({
walletAddress: "",
balance: "",
- depositList: [{}],
+ // Depósitos válidos para compra
+ depositsValidList: [{}],
+ // Depósitos adicionados na blockchain
+ depositsAddedList: [{}],
+ // Depósitos expirados na blockchain
+ depositsExpiredList: [{}],
+ // Locks adicionados na blockchain
+ locksAddedList: [{}],
}),
actions: {
setWalletAddress(walletAddress: string) {
@@ -13,8 +20,17 @@ export const useEtherStore = defineStore("ether", {
setBalance(balance: string) {
this.balance = balance;
},
- setDepositList(depositList: any[]) {
- this.depositList = depositList;
+ setDepositsValidList(depositsValidList: any[]) {
+ this.depositsValidList = depositsValidList;
+ },
+ setDepositsAddedList(depositsAddedList: any[]) {
+ this.depositsAddedList = depositsAddedList;
+ },
+ setDepositsExpiredList(depositsExpiredList: any[]) {
+ this.depositsExpiredList = depositsExpiredList;
+ },
+ setLocksAddedList(locksAddedList: any[]) {
+ this.locksAddedList = locksAddedList;
},
},
});
diff --git a/src/utils/blockchain.ts b/src/utils/blockchain.ts
index a611981..246f8b6 100644
--- a/src/utils/blockchain.ts
+++ b/src/utils/blockchain.ts
@@ -1,14 +1,70 @@
import { useEtherStore } from "@/store/ether";
import { BigNumber, ethers } from "ethers";
-// smart contract imports
+// Smart contract imports
import mockToken from "./smart_contract_files/MockToken.json";
import p2pix from "./smart_contract_files/P2PIX.json";
import addresses from "./smart_contract_files/localhost.json";
-import p2pEventsAndErrors from "./smart_contract_files/EventAndErrors.json"
-
+// Mock wallets import
import { wallets } from "./smart_contract_files/wallets.json";
+// Provider methods
+const connectProvider = async () => {
+ const etherStore = useEtherStore();
+ const window_ = window as any;
+ const connection = window_.ethereum;
+ let provider: ethers.providers.Web3Provider | null = null;
+
+ if (!connection) return;
+ provider = new ethers.providers.Web3Provider(connection);
+ const signer = provider.getSigner();
+ const tokenContract = new ethers.Contract(
+ addresses.token,
+ mockToken.abi,
+ signer
+ );
+
+ const walletAddress = await provider.send("eth_requestAccounts", []);
+ const balance = await tokenContract.balanceOf(walletAddress[0]);
+
+ 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);
+ etherStore.setDepositsAddedList(eventsDeposits);
+
+ const filterLocks = p2pEvents.filters.LockAdded(null);
+ const eventsLocks = await p2pEvents.queryFilter(filterLocks);
+ console.log("Locks Added: ", eventsLocks);
+ etherStore.setLocksAddedList(eventsLocks);
+
+ const filterExpiredLocks = p2pEvents.filters.LockReturned(null);
+ const eventsExpiredLocks = await p2pEvents.queryFilter(filterExpiredLocks);
+ console.log("Expired Locks: ", eventsExpiredLocks);
+ etherStore.setDepositsExpiredList(eventsExpiredLocks);
+
+ // (TO DO) Filter valid deposits
+
+ connection.on("accountsChanged", (accounts: string[]) => {
+ updateWalletStatus(accounts[0]);
+ });
+};
+
+const getProvider = (): ethers.providers.Web3Provider | null => {
+ const window_ = window as any;
+ const connection = window_.ethereum;
+
+ if (!connection) return null;
+
+ 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();
@@ -23,36 +79,7 @@ const updateWalletStatus = async (walletAddress: string) => {
etherStore.setWalletAddress(ethers.utils.getAddress(walletAddress));
};
-const connectProvider = async () => {
- const etherStore = useEtherStore();
- const window_ = window as any;
- const connection = window_.ethereum;
- let provider: ethers.providers.Web3Provider | null = null;
-
- if (!connection) return;
- provider = new ethers.providers.Web3Provider(connection);
- 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.setWalletAddress(ethers.utils.getAddress(walletAddress[0]));
- etherStore.setBalance(String(balance));
-
- const p2pContract = new ethers.Contract(addresses.p2pix, p2pEventsAndErrors.abi, signer);
-
- const filter = p2pContract.filters.DepositAdded(null);
- const events = await p2pContract.queryFilter(filter);
-
- console.log(events);
- etherStore.setDepositList(events);
-
- connection.on("accountsChanged", (accounts: string[]) => {
- updateWalletStatus(accounts[0]);
- });
-};
-
+// Split tokens between wallets in wallets.json
const splitTokens = async () => {
const etherStore = useEtherStore();
const provider = getProvider();
@@ -71,13 +98,14 @@ const splitTokens = async () => {
}
};
-const mockDeposit = async (tokenQty = "1000.0", pixKey = "00011122233") => {
+// Deposit methods
+// 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 etherStore = useEtherStore();
const provider = getProvider();
+
if (!provider) return;
-
const signer = provider.getSigner();
-
const tokenContract = new ethers.Contract(
addresses.token,
mockToken.abi,
@@ -85,14 +113,14 @@ const mockDeposit = async (tokenQty = "1000.0", pixKey = "00011122233") => {
);
const p2pContract = new ethers.Contract(addresses.p2pix, p2pix.abi, signer);
- // first get the approval
+ // First get the approval
const apprv = await tokenContract.approve(
addresses.p2pix,
ethers.utils.parseEther(tokenQty)
);
await apprv.wait();
- // deposit
+ // Now we make the deposit
const deposit = await p2pContract.deposit(
addresses.token,
ethers.utils.parseEther(tokenQty),
@@ -102,65 +130,91 @@ const mockDeposit = async (tokenQty = "1000.0", pixKey = "00011122233") => {
updateWalletStatus(etherStore.walletAddress);
- const p2pEvents = new ethers.Contract(addresses.p2pix, p2pEventsAndErrors.abi, signer);
-
+ const p2pEvents = new ethers.Contract(addresses.p2pix, p2pix.abi, signer);
const filter = p2pEvents.filters.DepositAdded(null);
const events = await p2pEvents.queryFilter(filter);
- console.log(events);
-
- etherStore.setDepositList(events);
-};
-
-const countDeposit = async () => {
- const provider = getProvider();
- if (!provider) return;
-
- const signer = provider.getSigner();
- const contract = new ethers.Contract(addresses.p2pix, p2pix.abi, signer);
-
- const count = await contract.depositCount();
-
- console.log(Number(count));
+ etherStore.setDepositsAddedList(events);
};
+// Get specific deposit data by its ID
const mapDeposits = async (depositId: BigNumber) => {
const provider = getProvider();
+
if (!provider) return;
const signer = provider.getSigner();
const contract = new ethers.Contract(addresses.p2pix, p2pix.abi, signer);
-
- const deposit = await contract.mapDeposits(depositId);
+ const deposit = await contract.mapDeposits(depositId.toNumber());
console.log(deposit);
return deposit;
};
+// Lock methods
+// Gets value from user's form to create a lock in the blockchain
+const addLock = async (depositId: Number, amount: Number) => {
+ const etherStore = useEtherStore();
+ const provider = getProvider();
+
+ if (!provider) return;
+ const signer = provider.getSigner();
+ const p2pContract = new ethers.Contract(addresses.p2pix, p2pix.abi, signer);
+
+ // Make lock
+ await p2pContract.lock(
+ depositId,
+ etherStore.walletAddress,
+ ethers.constants.AddressZero,
+ 0,
+ ethers.utils.parseEther(amount.toString()),
+ []
+ );
+
+ const filterLocks = p2pContract.filters.LockAdded(null);
+ const eventsLocks = await p2pContract.queryFilter(filterLocks);
+ etherStore.setLocksAddedList(eventsLocks);
+};
+
+// Get specific lock data by its ID
+const mapLocks = async (lockId: string) => {
+ const provider = getProvider();
+
+ if (!provider) return;
+
+ const signer = provider.getSigner();
+ const contract = new ethers.Contract(addresses.p2pix, p2pix.abi, signer);
+ const lock = await contract.mapLocks(lockId);
+
+ console.log(lock);
+ return lock;
+};
+
+// Releases lock by specific ID and other additional data
+// (TO DO)
+const releaseLock = async () => {
+ return;
+};
+
+// Formatting methods
const formatEther = (balance: string) => {
const formatted = ethers.utils.formatEther(balance);
return formatted;
};
-const verifyDepositAmmount = (ammountBigNumber: BigNumber): string => {
- return ethers.utils.formatEther(ammountBigNumber);
-};
-
-const getProvider = (): ethers.providers.Web3Provider | null => {
- const window_ = window as any;
- const connection = window_.ethereum;
-
- if (!connection) return null;
-
- return new ethers.providers.Web3Provider(connection);
+const formatBigNumber = (num: BigNumber) => {
+ const formattedNum = ethers.utils.formatEther(num);
+ return formattedNum;
};
export default {
connectProvider,
formatEther,
splitTokens,
- mockDeposit,
- countDeposit,
+ addDeposit,
mapDeposits,
- verifyDepositAmmount,
+ formatBigNumber,
+ addLock,
+ mapLocks,
+ releaseLock,
};
diff --git a/src/utils/smart_contract_files/EventAndErrors.json b/src/utils/smart_contract_files/EventAndErrors.json
deleted file mode 100644
index 1cfa90a..0000000
--- a/src/utils/smart_contract_files/EventAndErrors.json
+++ /dev/null
@@ -1,219 +0,0 @@
-{
- "_format": "hh-sol-artifact-1",
- "contractName": "EventAndErrors",
- "sourceName": "contracts/EventAndErrors.sol",
- "abi": [
- {
- "inputs": [],
- "name": "AlreadyReleased",
- "type": "error"
- },
- {
- "inputs": [],
- "name": "DepositAlreadyExists",
- "type": "error"
- },
- {
- "inputs": [],
- "name": "InvalidDeposit",
- "type": "error"
- },
- {
- "inputs": [],
- "name": "InvalidSigner",
- "type": "error"
- },
- {
- "inputs": [],
- "name": "LoopOverflow",
- "type": "error"
- },
- {
- "inputs": [],
- "name": "NotEnoughTokens",
- "type": "error"
- },
- {
- "inputs": [],
- "name": "NotExpired",
- "type": "error"
- },
- {
- "inputs": [],
- "name": "OnlySeller",
- "type": "error"
- },
- {
- "inputs": [],
- "name": "TxAlreadyUsed",
- "type": "error"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "internalType": "address",
- "name": "seller",
- "type": "address"
- },
- {
- "indexed": false,
- "internalType": "uint256",
- "name": "depositID",
- "type": "uint256"
- },
- {
- "indexed": false,
- "internalType": "address",
- "name": "token",
- "type": "address"
- },
- {
- "indexed": false,
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- }
- ],
- "name": "DepositAdded",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "internalType": "address",
- "name": "seller",
- "type": "address"
- },
- {
- "indexed": false,
- "internalType": "uint256",
- "name": "depositID",
- "type": "uint256"
- }
- ],
- "name": "DepositClosed",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "internalType": "address",
- "name": "seller",
- "type": "address"
- },
- {
- "indexed": false,
- "internalType": "uint256",
- "name": "depositID",
- "type": "uint256"
- },
- {
- "indexed": false,
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- }
- ],
- "name": "DepositWithdrawn",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": false,
- "internalType": "address",
- "name": "owner",
- "type": "address"
- },
- {
- "indexed": false,
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- }
- ],
- "name": "FundsWithdrawn",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "internalType": "address",
- "name": "buyer",
- "type": "address"
- },
- {
- "indexed": true,
- "internalType": "bytes32",
- "name": "lockID",
- "type": "bytes32"
- },
- {
- "indexed": false,
- "internalType": "uint256",
- "name": "depositID",
- "type": "uint256"
- },
- {
- "indexed": false,
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- }
- ],
- "name": "LockAdded",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "internalType": "address",
- "name": "buyer",
- "type": "address"
- },
- {
- "indexed": false,
- "internalType": "bytes32",
- "name": "lockId",
- "type": "bytes32"
- }
- ],
- "name": "LockReleased",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "internalType": "address",
- "name": "buyer",
- "type": "address"
- },
- {
- "indexed": false,
- "internalType": "bytes32",
- "name": "lockId",
- "type": "bytes32"
- }
- ],
- "name": "LockReturned",
- "type": "event"
- }
- ],
- "bytecode": "0x",
- "deployedBytecode": "0x",
- "linkReferences": {},
- "deployedLinkReferences": {}
-}
diff --git a/src/utils/smart_contract_files/P2PIX.json b/src/utils/smart_contract_files/P2PIX.json
index 04d915b..34e712f 100644
--- a/src/utils/smart_contract_files/P2PIX.json
+++ b/src/utils/smart_contract_files/P2PIX.json
@@ -90,12 +90,6 @@
"name": "token",
"type": "address"
},
- {
- "indexed": false,
- "internalType": "uint256",
- "name": "premium",
- "type": "uint256"
- },
{
"indexed": false,
"internalType": "uint256",
@@ -150,6 +144,25 @@
"name": "DepositWithdrawn",
"type": "event"
},
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "FundsWithdrawn",
+ "type": "event"
+ },
{
"anonymous": false,
"inputs": [
@@ -238,25 +251,6 @@
"name": "OwnerUpdated",
"type": "event"
},
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": false,
- "internalType": "address",
- "name": "owner",
- "type": "address"
- },
- {
- "indexed": false,
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- }
- ],
- "name": "PremiumsWithdrawn",
- "type": "event"
- },
{
"inputs": [
{
@@ -306,17 +300,17 @@
"inputs": [
{
"internalType": "address",
- "name": "token",
+ "name": "_token",
"type": "address"
},
{
"internalType": "uint256",
- "name": "amount",
+ "name": "_amount",
"type": "uint256"
},
{
"internalType": "string",
- "name": "pixTarget",
+ "name": "_pixTarget",
"type": "string"
}
],
@@ -328,7 +322,7 @@
"type": "uint256"
}
],
- "stateMutability": "payable",
+ "stateMutability": "nonpayable",
"type": "function"
},
{
@@ -403,11 +397,6 @@
"name": "remaining",
"type": "uint256"
},
- {
- "internalType": "uint256",
- "name": "premium",
- "type": "uint256"
- },
{
"internalType": "string",
"name": "pixTarget",
@@ -587,14 +576,18 @@
},
{
"inputs": [],
- "name": "withdrawPremiums",
+ "name": "withdrawBalance",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
+ },
+ {
+ "stateMutability": "payable",
+ "type": "receive"
}
],
- "bytecode": "0x60806040526001805560405162001806380380620018068339810160408190526200002a9162000123565b600080546001600160a01b031916339081178255604051909182917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d76908290a350600382905580516000905b80821015620000d6576000620000ae8484815181106200009a576200009a62000203565b6020026020010151620000e060201b60201c565b6000908152600460205260409020805460ff1916600190811790915592909201915062000076565b5050505062000219565b600c1b611000600160ac1b031690565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b03811681146200011e57600080fd5b919050565b600080604083850312156200013757600080fd5b8251602080850151919350906001600160401b03808211156200015957600080fd5b818601915086601f8301126200016e57600080fd5b815181811115620001835762000183620000f0565b8060051b604051601f19603f83011681018181108582111715620001ab57620001ab620000f0565b604052918252848201925083810185019189831115620001ca57600080fd5b938501935b82851015620001f357620001e38562000106565b84529385019392850192620001cf565b8096505050505050509250929050565b634e487b7160e01b600052603260045260246000fd5b6115dd80620002296000396000f3fe6080604052600436106100e85760003560e01c80636193cdfb1161008a5780638e2a3d36116100595780638e2a3d36146102f55780639872dbfe1461032757806398a268711461033d578063bfe07da61461037d57600080fd5b80636193cdfb1461026857806372fada5c1461027d5780638da5cb5b1461029d5780638e2749d6146102d557600080fd5b80632dfdf0b5116100c65780632dfdf0b5146101d857806336317972146101ef5780634b2ae9801461020f5780634e1389ed1461024857600080fd5b806303aaf306146100ed57806313af40351461012057806316d7224014610142575b600080fd5b3480156100f957600080fd5b5061010d6101083660046111e7565b610390565b6040519081526020015b60405180910390f35b34801561012c57600080fd5b5061014061013b366004611269565b61053a565b005b34801561014e57600080fd5b5061019f61015d366004611284565b60066020526000908152604090208054600182015460028301546003840154600485015460059095015493949293919290916001600160a01b03918216911686565b6040805196875260208701959095529385019290925260608401526001600160a01b0390811660808401521660a082015260c001610117565b3480156101e457600080fd5b5060025461010d9081565b3480156101fb57600080fd5b5061014061020a36600461129d565b6105e0565b34801561021b57600080fd5b5061010d61022a366004611269565b600c1b750ffffffffffffffffffffffffffffffffffffffff0001690565b34801561025457600080fd5b506101406102633660046112e9565b6106a0565b34801561027457600080fd5b50610140610962565b34801561028957600080fd5b50610140610298366004611284565b6109f2565b3480156102a957600080fd5b506000546102bd906001600160a01b031681565b6040516001600160a01b039091168152602001610117565b3480156102e157600080fd5b506101406102f036600461133c565b610a7a565b34801561030157600080fd5b50610315610310366004611284565b610b76565b6040516101179695949392919061137e565b34801561033357600080fd5b5061010d60035481565b34801561034957600080fd5b5061036d610358366004611284565b60046020526000908152604090205460ff1681565b6040519015158152602001610117565b61010d61038b36600461140c565b610c46565b600061039a610e00565b6103a48383610a7a565b60008881526005602052604090206004810154600160a01b900460ff166103de57604051635972996f60e11b815260040160405180910390fd5b8054851115610400576040516308aeed0f60e21b815260040160405180910390fd5b61040b89868a610e2b565b915060006040518060c001604052808b81526020018881526020018781526020016003544361043a91906114a9565b81526001600160a01b03808c166020808401919091528b82166040938401526000878152600682528381208551815591850151600183015592840151600282015560608401516003820155608084015160048201805491841673ffffffffffffffffffffffffffffffffffffffff1992831617905560a085015160059092018054929093169116179055835491925087918491906104d99084906114c1565b9091555050604080518b81526020810188905284916001600160a01b038c16917f2a28b2ae47b0bd4b104e7cd29b1dfa72846af8c4cfdc009da2ae29db68cb67ea910160405180910390a3505061052f60018055565b979650505050505050565b6000546001600160a01b031633146105885760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064015b60405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909133917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d769190a350565b6105e8610e00565b6105f183610eaf565b6105fb8282610a7a565b60008381526005602052604090206004810154600160a01b900460ff1615156001141561062b5761062b846109f2565b600481015481546000835560038301546001600160a01b03928316926106549184911683610eec565b604080518781526020810183905233917f7719804546c0185709e60c90d164447ff251a5ba29af0216faa921350f6bebf7910160405180910390a250505061069b60018055565b505050565b6106a8610e00565b6000858152600660205260409020600381015443108015906106cc57506002810154155b156106ea576040516331da482760e11b815260040160405180910390fd5b80546000908152600560209081526040808320600280860154925191949361071893918601928b9101611513565b60405160208183030381529060405280519060200120905060008160405160200161076f91907f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b60408051601f1981840301815291815281516020928301206000858152600790935291205490915060ff161515600114156107bd57604051637a48537560e11b815260040160405180910390fd5b6040805160008082526020820180845284905260ff881692820192909252606081018990526080810188905261083f9060019060a0016020604051602081039080840390855afa158015610815573d6000803e3d6000fd5b5050604051601f190151600c1b750ffffffffffffffffffffffffffffffffffffffff00016919050565b60008181526004602052604090205490915060ff1661087157604051632057875960e21b815260040160405180910390fd5b6004840154600186015460028701546001600160a01b0390921691600091610898916114c1565b60006002890181905560038901819055868152600760205260409020805460ff1916600117905560048801549091506108dc9083906001600160a01b031683610eec565b60018701541561090757600587015460018801546109079184916001600160a01b0390911690610eec565b60048701546040518d81526001600160a01b03909116907f5e420822d2f7281fdc4b763c62c8b7874bf22108a35efe93144d79296aacc67d9060200160405180910390a25050505050505061095b60018055565b5050505050565b6000546001600160a01b031633146109ab5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b604482015260640161057f565b476109b63382610f78565b60408051338152602081018390527fbf0d92faf65e256806eefa1a0d281d4873cc3c80d1ed25b8ae6f7cc66fc918ef910160405180910390a150565b6109fb81610eaf565b6000818152600560209081526040918290206004810180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556003015491518381526001600160a01b03909216917fb4d98b272597e828d9b172c0d44390d5b267040e918088eac8a0a0fadcb81c70910160405180910390a250565b6000815b80821015610b5a57600060066000868686818110610a9e57610a9e6115ba565b9050602002013581526020019081526020016000209050610abe81610fd3565b6002810154815460009081526005602052604081208054909190610ae39084906114a9565b90915550506000600282015560048101546001600160a01b03167f67e089478e21dd12c98e69331c4152f6c9b2038b91e0f28268ffa01558c0b4ff868686818110610b3057610b306115ba565b90506020020135604051610b4691815260200190565b60405180910390a282600101925050610a7e565b80821015610b705763dfb035c96000526004601cfd5b50505050565b60056020526000908152604090208054600182015460028301805492939192610b9e906114d8565b80601f0160208091040260200160405190810160405280929190818152602001828054610bca906114d8565b8015610c175780601f10610bec57610100808354040283529160200191610c17565b820191906000526020600020905b815481529060010190602001808311610bfa57829003601f168201915b50505050600383015460049093015491926001600160a01b03908116929081169150600160a01b900460ff1686565b6000610c50611006565b9050600085905060006040518060c0016040528087815260200134815260200186868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050908252503360208201526001600160a01b038916604082015260016060909101529050610cd0610e00565b60008381526005602090815260409182902083518155818401516001820155918301518051849392610d099260028501929101906110e6565b50606082015160038201805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392831617905560808301516004909201805460a090940151929091167fffffffffffffffffffffff00000000000000000000000000000000000000000090931692909217600160a01b91151591909102179055600280546001019055610d9c82333089611056565b610da560018055565b604080518481526001600160a01b0389166020820152348183015260608101889052905133917fe0cfbec12278e314697ee34bb7a1ba4d704e84c438680672f7c1175f287e5910919081900360800190a25050949350505050565b60015460021415610e245760405163558a1e0360e11b815260040160405180910390fd5b6002600155565b6040805160208101859052908101839052606082811b6bffffffffffffffffffffffff19169082015260009060740160405160208183030381529060405280519060200120905043600660008381526020019081526020016000206003015410610ea85760405163d0404f8560e01b815260040160405180910390fd5b9392505050565b6000818152600560205260409020600301546001600160a01b03163314610ee9576040516342e8fb9360e11b815260040160405180910390fd5b50565b600060405163a9059cbb60e01b6000528360045282602452602060006044600080895af13d15601f3d1160016000511416171691506000606052806040525080610b705760405162461bcd60e51b815260206004820152600f60248201527f5452414e534645525f4641494c45440000000000000000000000000000000000604482015260640161057f565b600080600080600085875af190508061069b5760405162461bcd60e51b815260206004820152601360248201527f4554485f5452414e534645525f4641494c454400000000000000000000000000604482015260640161057f565b438160030154101580610fe857506002810154155b15610ee95760405163d0404f8560e01b815260040160405180910390fd5b600061101160025490565b600081815260056020526040902060040154909150600160a01b900460ff161515600114156110535760405163c44bd76560e01b815260040160405180910390fd5b90565b60006040516323b872dd60e01b6000528460045283602452826044526020600060646000808a5af13d15601f3d116001600051141617169150600060605280604052508061095b5760405162461bcd60e51b815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c4544000000000000000000000000604482015260640161057f565b8280546110f2906114d8565b90600052602060002090601f016020900481019282611114576000855561115a565b82601f1061112d57805160ff191683800117855561115a565b8280016001018555821561115a579182015b8281111561115a57825182559160200191906001019061113f565b5061116692915061116a565b5090565b5b80821115611166576000815560010161116b565b80356001600160a01b038116811461119657600080fd5b919050565b60008083601f8401126111ad57600080fd5b50813567ffffffffffffffff8111156111c557600080fd5b6020830191508360208260051b85010111156111e057600080fd5b9250929050565b600080600080600080600060c0888a03121561120257600080fd5b873596506112126020890161117f565b95506112206040890161117f565b9450606088013593506080880135925060a088013567ffffffffffffffff81111561124a57600080fd5b6112568a828b0161119b565b989b979a50959850939692959293505050565b60006020828403121561127b57600080fd5b610ea88261117f565b60006020828403121561129657600080fd5b5035919050565b6000806000604084860312156112b257600080fd5b83359250602084013567ffffffffffffffff8111156112d057600080fd5b6112dc8682870161119b565b9497909650939450505050565b600080600080600060a0868803121561130157600080fd5b85359450602086013593506040860135925060608601359150608086013560ff8116811461132e57600080fd5b809150509295509295909350565b6000806020838503121561134f57600080fd5b823567ffffffffffffffff81111561136657600080fd5b6113728582860161119b565b90969095509350505050565b86815260006020878184015260c0604084015286518060c085015260005b818110156113b85788810183015185820160e00152820161139c565b818111156113ca57600060e083870101525b50601f01601f1916830160e00191506113f0905060608301866001600160a01b03169052565b6001600160a01b038416608083015282151560a083015261052f565b6000806000806060858703121561142257600080fd5b61142b8561117f565b935060208501359250604085013567ffffffffffffffff8082111561144f57600080fd5b818701915087601f83011261146357600080fd5b81358181111561147257600080fd5b88602082850101111561148457600080fd5b95989497505060200194505050565b634e487b7160e01b600052601160045260246000fd5b600082198211156114bc576114bc611493565b500190565b6000828210156114d3576114d3611493565b500390565b600181811c908216806114ec57607f821691505b6020821081141561150d57634e487b7160e01b600052602260045260246000fd5b50919050565b600080855481600182811c91508083168061152f57607f831692505b602080841082141561154f57634e487b7160e01b86526022600452602486fd5b8180156115635760018114611574576115a1565b60ff198616895284890196506115a1565b60008c81526020902060005b868110156115995781548b820152908501908301611580565b505084890196505b5098855250505050938401929092525050604001919050565b634e487b7160e01b600052603260045260246000fdfea164736f6c6343000809000a",
- "deployedBytecode": "0x6080604052600436106100e85760003560e01c80636193cdfb1161008a5780638e2a3d36116100595780638e2a3d36146102f55780639872dbfe1461032757806398a268711461033d578063bfe07da61461037d57600080fd5b80636193cdfb1461026857806372fada5c1461027d5780638da5cb5b1461029d5780638e2749d6146102d557600080fd5b80632dfdf0b5116100c65780632dfdf0b5146101d857806336317972146101ef5780634b2ae9801461020f5780634e1389ed1461024857600080fd5b806303aaf306146100ed57806313af40351461012057806316d7224014610142575b600080fd5b3480156100f957600080fd5b5061010d6101083660046111e7565b610390565b6040519081526020015b60405180910390f35b34801561012c57600080fd5b5061014061013b366004611269565b61053a565b005b34801561014e57600080fd5b5061019f61015d366004611284565b60066020526000908152604090208054600182015460028301546003840154600485015460059095015493949293919290916001600160a01b03918216911686565b6040805196875260208701959095529385019290925260608401526001600160a01b0390811660808401521660a082015260c001610117565b3480156101e457600080fd5b5060025461010d9081565b3480156101fb57600080fd5b5061014061020a36600461129d565b6105e0565b34801561021b57600080fd5b5061010d61022a366004611269565b600c1b750ffffffffffffffffffffffffffffffffffffffff0001690565b34801561025457600080fd5b506101406102633660046112e9565b6106a0565b34801561027457600080fd5b50610140610962565b34801561028957600080fd5b50610140610298366004611284565b6109f2565b3480156102a957600080fd5b506000546102bd906001600160a01b031681565b6040516001600160a01b039091168152602001610117565b3480156102e157600080fd5b506101406102f036600461133c565b610a7a565b34801561030157600080fd5b50610315610310366004611284565b610b76565b6040516101179695949392919061137e565b34801561033357600080fd5b5061010d60035481565b34801561034957600080fd5b5061036d610358366004611284565b60046020526000908152604090205460ff1681565b6040519015158152602001610117565b61010d61038b36600461140c565b610c46565b600061039a610e00565b6103a48383610a7a565b60008881526005602052604090206004810154600160a01b900460ff166103de57604051635972996f60e11b815260040160405180910390fd5b8054851115610400576040516308aeed0f60e21b815260040160405180910390fd5b61040b89868a610e2b565b915060006040518060c001604052808b81526020018881526020018781526020016003544361043a91906114a9565b81526001600160a01b03808c166020808401919091528b82166040938401526000878152600682528381208551815591850151600183015592840151600282015560608401516003820155608084015160048201805491841673ffffffffffffffffffffffffffffffffffffffff1992831617905560a085015160059092018054929093169116179055835491925087918491906104d99084906114c1565b9091555050604080518b81526020810188905284916001600160a01b038c16917f2a28b2ae47b0bd4b104e7cd29b1dfa72846af8c4cfdc009da2ae29db68cb67ea910160405180910390a3505061052f60018055565b979650505050505050565b6000546001600160a01b031633146105885760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064015b60405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909133917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d769190a350565b6105e8610e00565b6105f183610eaf565b6105fb8282610a7a565b60008381526005602052604090206004810154600160a01b900460ff1615156001141561062b5761062b846109f2565b600481015481546000835560038301546001600160a01b03928316926106549184911683610eec565b604080518781526020810183905233917f7719804546c0185709e60c90d164447ff251a5ba29af0216faa921350f6bebf7910160405180910390a250505061069b60018055565b505050565b6106a8610e00565b6000858152600660205260409020600381015443108015906106cc57506002810154155b156106ea576040516331da482760e11b815260040160405180910390fd5b80546000908152600560209081526040808320600280860154925191949361071893918601928b9101611513565b60405160208183030381529060405280519060200120905060008160405160200161076f91907f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b60408051601f1981840301815291815281516020928301206000858152600790935291205490915060ff161515600114156107bd57604051637a48537560e11b815260040160405180910390fd5b6040805160008082526020820180845284905260ff881692820192909252606081018990526080810188905261083f9060019060a0016020604051602081039080840390855afa158015610815573d6000803e3d6000fd5b5050604051601f190151600c1b750ffffffffffffffffffffffffffffffffffffffff00016919050565b60008181526004602052604090205490915060ff1661087157604051632057875960e21b815260040160405180910390fd5b6004840154600186015460028701546001600160a01b0390921691600091610898916114c1565b60006002890181905560038901819055868152600760205260409020805460ff1916600117905560048801549091506108dc9083906001600160a01b031683610eec565b60018701541561090757600587015460018801546109079184916001600160a01b0390911690610eec565b60048701546040518d81526001600160a01b03909116907f5e420822d2f7281fdc4b763c62c8b7874bf22108a35efe93144d79296aacc67d9060200160405180910390a25050505050505061095b60018055565b5050505050565b6000546001600160a01b031633146109ab5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b604482015260640161057f565b476109b63382610f78565b60408051338152602081018390527fbf0d92faf65e256806eefa1a0d281d4873cc3c80d1ed25b8ae6f7cc66fc918ef910160405180910390a150565b6109fb81610eaf565b6000818152600560209081526040918290206004810180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556003015491518381526001600160a01b03909216917fb4d98b272597e828d9b172c0d44390d5b267040e918088eac8a0a0fadcb81c70910160405180910390a250565b6000815b80821015610b5a57600060066000868686818110610a9e57610a9e6115ba565b9050602002013581526020019081526020016000209050610abe81610fd3565b6002810154815460009081526005602052604081208054909190610ae39084906114a9565b90915550506000600282015560048101546001600160a01b03167f67e089478e21dd12c98e69331c4152f6c9b2038b91e0f28268ffa01558c0b4ff868686818110610b3057610b306115ba565b90506020020135604051610b4691815260200190565b60405180910390a282600101925050610a7e565b80821015610b705763dfb035c96000526004601cfd5b50505050565b60056020526000908152604090208054600182015460028301805492939192610b9e906114d8565b80601f0160208091040260200160405190810160405280929190818152602001828054610bca906114d8565b8015610c175780601f10610bec57610100808354040283529160200191610c17565b820191906000526020600020905b815481529060010190602001808311610bfa57829003601f168201915b50505050600383015460049093015491926001600160a01b03908116929081169150600160a01b900460ff1686565b6000610c50611006565b9050600085905060006040518060c0016040528087815260200134815260200186868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050908252503360208201526001600160a01b038916604082015260016060909101529050610cd0610e00565b60008381526005602090815260409182902083518155818401516001820155918301518051849392610d099260028501929101906110e6565b50606082015160038201805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392831617905560808301516004909201805460a090940151929091167fffffffffffffffffffffff00000000000000000000000000000000000000000090931692909217600160a01b91151591909102179055600280546001019055610d9c82333089611056565b610da560018055565b604080518481526001600160a01b0389166020820152348183015260608101889052905133917fe0cfbec12278e314697ee34bb7a1ba4d704e84c438680672f7c1175f287e5910919081900360800190a25050949350505050565b60015460021415610e245760405163558a1e0360e11b815260040160405180910390fd5b6002600155565b6040805160208101859052908101839052606082811b6bffffffffffffffffffffffff19169082015260009060740160405160208183030381529060405280519060200120905043600660008381526020019081526020016000206003015410610ea85760405163d0404f8560e01b815260040160405180910390fd5b9392505050565b6000818152600560205260409020600301546001600160a01b03163314610ee9576040516342e8fb9360e11b815260040160405180910390fd5b50565b600060405163a9059cbb60e01b6000528360045282602452602060006044600080895af13d15601f3d1160016000511416171691506000606052806040525080610b705760405162461bcd60e51b815260206004820152600f60248201527f5452414e534645525f4641494c45440000000000000000000000000000000000604482015260640161057f565b600080600080600085875af190508061069b5760405162461bcd60e51b815260206004820152601360248201527f4554485f5452414e534645525f4641494c454400000000000000000000000000604482015260640161057f565b438160030154101580610fe857506002810154155b15610ee95760405163d0404f8560e01b815260040160405180910390fd5b600061101160025490565b600081815260056020526040902060040154909150600160a01b900460ff161515600114156110535760405163c44bd76560e01b815260040160405180910390fd5b90565b60006040516323b872dd60e01b6000528460045283602452826044526020600060646000808a5af13d15601f3d116001600051141617169150600060605280604052508061095b5760405162461bcd60e51b815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c4544000000000000000000000000604482015260640161057f565b8280546110f2906114d8565b90600052602060002090601f016020900481019282611114576000855561115a565b82601f1061112d57805160ff191683800117855561115a565b8280016001018555821561115a579182015b8281111561115a57825182559160200191906001019061113f565b5061116692915061116a565b5090565b5b80821115611166576000815560010161116b565b80356001600160a01b038116811461119657600080fd5b919050565b60008083601f8401126111ad57600080fd5b50813567ffffffffffffffff8111156111c557600080fd5b6020830191508360208260051b85010111156111e057600080fd5b9250929050565b600080600080600080600060c0888a03121561120257600080fd5b873596506112126020890161117f565b95506112206040890161117f565b9450606088013593506080880135925060a088013567ffffffffffffffff81111561124a57600080fd5b6112568a828b0161119b565b989b979a50959850939692959293505050565b60006020828403121561127b57600080fd5b610ea88261117f565b60006020828403121561129657600080fd5b5035919050565b6000806000604084860312156112b257600080fd5b83359250602084013567ffffffffffffffff8111156112d057600080fd5b6112dc8682870161119b565b9497909650939450505050565b600080600080600060a0868803121561130157600080fd5b85359450602086013593506040860135925060608601359150608086013560ff8116811461132e57600080fd5b809150509295509295909350565b6000806020838503121561134f57600080fd5b823567ffffffffffffffff81111561136657600080fd5b6113728582860161119b565b90969095509350505050565b86815260006020878184015260c0604084015286518060c085015260005b818110156113b85788810183015185820160e00152820161139c565b818111156113ca57600060e083870101525b50601f01601f1916830160e00191506113f0905060608301866001600160a01b03169052565b6001600160a01b038416608083015282151560a083015261052f565b6000806000806060858703121561142257600080fd5b61142b8561117f565b935060208501359250604085013567ffffffffffffffff8082111561144f57600080fd5b818701915087601f83011261146357600080fd5b81358181111561147257600080fd5b88602082850101111561148457600080fd5b95989497505060200194505050565b634e487b7160e01b600052601160045260246000fd5b600082198211156114bc576114bc611493565b500190565b6000828210156114d3576114d3611493565b500390565b600181811c908216806114ec57607f821691505b6020821081141561150d57634e487b7160e01b600052602260045260246000fd5b50919050565b600080855481600182811c91508083168061152f57607f831692505b602080841082141561154f57634e487b7160e01b86526022600452602486fd5b8180156115635760018114611574576115a1565b60ff198616895284890196506115a1565b60008c81526020902060005b868110156115995781548b820152908501908301611580565b505084890196505b5098855250505050938401929092525050604001919050565b634e487b7160e01b600052603260045260246000fdfea164736f6c6343000809000a",
+ "bytecode": "0x60806040526001805560405162001807380380620018078339810160408190526200002a9162000123565b600080546001600160a01b031916339081178255604051909182917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d76908290a350600382905580516000905b80821015620000d6576000620000ae8484815181106200009a576200009a62000203565b6020026020010151620000e060201b60201c565b6000908152600460205260409020805460ff1916600190811790915592909201915062000076565b5050505062000219565b600c1b611000600160ac1b031690565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b03811681146200011e57600080fd5b919050565b600080604083850312156200013757600080fd5b8251602080850151919350906001600160401b03808211156200015957600080fd5b818601915086601f8301126200016e57600080fd5b815181811115620001835762000183620000f0565b8060051b604051601f19603f83011681018181108582111715620001ab57620001ab620000f0565b604052918252848201925083810185019189831115620001ca57600080fd5b938501935b82851015620001f357620001e38562000106565b84529385019392850192620001cf565b8096505050505050509250929050565b634e487b7160e01b600052603260045260246000fd5b6115de80620002296000396000f3fe6080604052600436106100ec5760003560e01c80635fd8c7101161008a5780638e2a3d36116100595780638e2a3d36146103005780639872dbfe1461033157806398a2687114610347578063bfe07da61461038757600080fd5b80635fd8c7101461027357806372fada5c146102885780638da5cb5b146102a85780638e2749d6146102e057600080fd5b80632dfdf0b5116100c65780632dfdf0b5146101e357806336317972146101fa5780634b2ae9801461021a5780634e1389ed1461025357600080fd5b806303aaf306146100f857806313af40351461012b57806316d722401461014d57600080fd5b366100f357005b600080fd5b34801561010457600080fd5b506101186101133660046111e9565b6103a7565b6040519081526020015b60405180910390f35b34801561013757600080fd5b5061014b61014636600461126b565b610551565b005b34801561015957600080fd5b506101aa610168366004611286565b60066020526000908152604090208054600182015460028301546003840154600485015460059095015493949293919290916001600160a01b03918216911686565b6040805196875260208701959095529385019290925260608401526001600160a01b0390811660808401521660a082015260c001610122565b3480156101ef57600080fd5b506002546101189081565b34801561020657600080fd5b5061014b61021536600461129f565b6105f7565b34801561022657600080fd5b5061011861023536600461126b565b600c1b750ffffffffffffffffffffffffffffffffffffffff0001690565b34801561025f57600080fd5b5061014b61026e3660046112eb565b6106b7565b34801561027f57600080fd5b5061014b61097a565b34801561029457600080fd5b5061014b6102a3366004611286565b610a0a565b3480156102b457600080fd5b506000546102c8906001600160a01b031681565b6040516001600160a01b039091168152602001610122565b3480156102ec57600080fd5b5061014b6102fb36600461133e565b610a92565b34801561030c57600080fd5b5061032061031b366004611286565b610b8e565b604051610122959493929190611380565b34801561033d57600080fd5b5061011860035481565b34801561035357600080fd5b50610377610362366004611286565b60046020526000908152604090205460ff1681565b6040519015158152602001610122565b34801561039357600080fd5b506101186103a236600461140d565b610c58565b60006103b1610e02565b6103bb8383610a92565b60008881526005602052604090206003810154600160a01b900460ff166103f557604051635972996f60e11b815260040160405180910390fd5b8054851115610417576040516308aeed0f60e21b815260040160405180910390fd5b61042289868a610e2d565b915060006040518060c001604052808b81526020018881526020018781526020016003544361045191906114aa565b81526001600160a01b03808c166020808401919091528b82166040938401526000878152600682528381208551815591850151600183015592840151600282015560608401516003820155608084015160048201805491841673ffffffffffffffffffffffffffffffffffffffff1992831617905560a085015160059092018054929093169116179055835491925087918491906104f09084906114c2565b9091555050604080518b81526020810188905284916001600160a01b038c16917f2a28b2ae47b0bd4b104e7cd29b1dfa72846af8c4cfdc009da2ae29db68cb67ea910160405180910390a3505061054660018055565b979650505050505050565b6000546001600160a01b0316331461059f5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064015b60405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909133917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d769190a350565b6105ff610e02565b61060883610eb1565b6106128282610a92565b60008381526005602052604090206003810154600160a01b900460ff161515600114156106425761064284610a0a565b600381015481546000835560028301546001600160a01b039283169261066b9184911683610eee565b604080518781526020810183905233917f7719804546c0185709e60c90d164447ff251a5ba29af0216faa921350f6bebf7910160405180910390a25050506106b260018055565b505050565b6106bf610e02565b60008581526006602052604090206003810154431015806106e257506002810154155b15610700576040516331da482760e11b815260040160405180910390fd5b805460009081526005602090815260408083206002850154915190939261073092600186019290918b9101611514565b60405160208183030381529060405280519060200120905060008160405160200161078791907f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b60408051601f1981840301815291815281516020928301206000858152600790935291205490915060ff161515600114156107d557604051637a48537560e11b815260040160405180910390fd5b6040805160008082526020820180845284905260ff88169282019290925260608101899052608081018890526108579060019060a0016020604051602081039080840390855afa15801561082d573d6000803e3d6000fd5b5050604051601f190151600c1b750ffffffffffffffffffffffffffffffffffffffff00016919050565b60008181526004602052604090205490915060ff1661088957604051632057875960e21b815260040160405180910390fd5b6003840154600186015460028701546001600160a01b03909216916000916108b0916114c2565b60006002890181905560038901819055868152600760205260409020805460ff1916600117905560048801549091506108f49083906001600160a01b031683610eee565b60018701541561091f576005870154600188015461091f9184916001600160a01b0390911690610eee565b60048701546040518d81526001600160a01b03909116907f5e420822d2f7281fdc4b763c62c8b7874bf22108a35efe93144d79296aacc67d9060200160405180910390a25050505050505061097360018055565b5050505050565b6000546001600160a01b031633146109c35760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401610596565b476109ce3382610f7a565b60408051338152602081018390527feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d910160405180910390a150565b610a1381610eb1565b6000818152600560209081526040918290206003810180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556002015491518381526001600160a01b03909216917fb4d98b272597e828d9b172c0d44390d5b267040e918088eac8a0a0fadcb81c70910160405180910390a250565b6000815b80821015610b7257600060066000868686818110610ab657610ab66115bb565b9050602002013581526020019081526020016000209050610ad681610fd5565b6002810154815460009081526005602052604081208054909190610afb9084906114aa565b90915550506000600282015560048101546001600160a01b03167f67e089478e21dd12c98e69331c4152f6c9b2038b91e0f28268ffa01558c0b4ff868686818110610b4857610b486115bb565b90506020020135604051610b5e91815260200190565b60405180910390a282600101925050610a96565b80821015610b885763dfb035c96000526004601cfd5b50505050565b60056020526000908152604090208054600182018054919291610bb0906114d9565b80601f0160208091040260200160405190810160405280929190818152602001828054610bdc906114d9565b8015610c295780601f10610bfe57610100808354040283529160200191610c29565b820191906000526020600020905b815481529060010190602001808311610c0c57829003601f168201915b50505050600283015460039093015491926001600160a01b03908116929081169150600160a01b900460ff1685565b6000610c62611008565b9050600085905060006040518060a0016040528087815260200186868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050908252503360208201526001600160a01b038916604082015260016060909101529050610cdc610e02565b6000838152600560209081526040909120825181558183015180518493610d0a9260018501929101906110e8565b506040820151600280830180546001600160a01b0393841673ffffffffffffffffffffffffffffffffffffffff199091161790556060840151600390930180546080909501511515600160a01b027fffffffffffffffffffffff000000000000000000000000000000000000000000909516939092169290921792909217909155610d989080546001019055565b610da482333089611058565b610dad60018055565b604080518481526001600160a01b038916602082015290810187905233907f25ac57b911b0f66b64c294827f539545fbc3ddd002cafab117776274f3241e4c9060600160405180910390a25050949350505050565b60015460021415610e265760405163558a1e0360e11b815260040160405180910390fd5b6002600155565b6040805160208101859052908101839052606082811b6bffffffffffffffffffffffff19169082015260009060740160405160208183030381529060405280519060200120905043600660008381526020019081526020016000206003015410610eaa5760405163d0404f8560e01b815260040160405180910390fd5b9392505050565b6000818152600560205260409020600201546001600160a01b03163314610eeb576040516342e8fb9360e11b815260040160405180910390fd5b50565b600060405163a9059cbb60e01b6000528360045282602452602060006044600080895af13d15601f3d1160016000511416171691506000606052806040525080610b885760405162461bcd60e51b815260206004820152600f60248201527f5452414e534645525f4641494c454400000000000000000000000000000000006044820152606401610596565b600080600080600085875af19050806106b25760405162461bcd60e51b815260206004820152601360248201527f4554485f5452414e534645525f4641494c4544000000000000000000000000006044820152606401610596565b438160030154101580610fea57506002810154155b15610eeb5760405163d0404f8560e01b815260040160405180910390fd5b600061101360025490565b600081815260056020526040902060030154909150600160a01b900460ff161515600114156110555760405163c44bd76560e01b815260040160405180910390fd5b90565b60006040516323b872dd60e01b6000528460045283602452826044526020600060646000808a5af13d15601f3d11600160005114161716915060006060528060405250806109735760405162461bcd60e51b815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006044820152606401610596565b8280546110f4906114d9565b90600052602060002090601f016020900481019282611116576000855561115c565b82601f1061112f57805160ff191683800117855561115c565b8280016001018555821561115c579182015b8281111561115c578251825591602001919060010190611141565b5061116892915061116c565b5090565b5b80821115611168576000815560010161116d565b80356001600160a01b038116811461119857600080fd5b919050565b60008083601f8401126111af57600080fd5b50813567ffffffffffffffff8111156111c757600080fd5b6020830191508360208260051b85010111156111e257600080fd5b9250929050565b600080600080600080600060c0888a03121561120457600080fd5b8735965061121460208901611181565b955061122260408901611181565b9450606088013593506080880135925060a088013567ffffffffffffffff81111561124c57600080fd5b6112588a828b0161119d565b989b979a50959850939692959293505050565b60006020828403121561127d57600080fd5b610eaa82611181565b60006020828403121561129857600080fd5b5035919050565b6000806000604084860312156112b457600080fd5b83359250602084013567ffffffffffffffff8111156112d257600080fd5b6112de8682870161119d565b9497909650939450505050565b600080600080600060a0868803121561130357600080fd5b85359450602086013593506040860135925060608601359150608086013560ff8116811461133057600080fd5b809150509295509295909350565b6000806020838503121561135157600080fd5b823567ffffffffffffffff81111561136857600080fd5b6113748582860161119d565b90969095509350505050565b8581526000602060a08184015286518060a085015260005b818110156113b45788810183015185820160c001528201611398565b818111156113c657600060c083870101525b50601f01601f1916830160c00191506113ec905060408301866001600160a01b03169052565b6001600160a01b038416606083015282151560808301529695505050505050565b6000806000806060858703121561142357600080fd5b61142c85611181565b935060208501359250604085013567ffffffffffffffff8082111561145057600080fd5b818701915087601f83011261146457600080fd5b81358181111561147357600080fd5b88602082850101111561148557600080fd5b95989497505060200194505050565b634e487b7160e01b600052601160045260246000fd5b600082198211156114bd576114bd611494565b500190565b6000828210156114d4576114d4611494565b500390565b600181811c908216806114ed57607f821691505b6020821081141561150e57634e487b7160e01b600052602260045260246000fd5b50919050565b600080855481600182811c91508083168061153057607f831692505b602080841082141561155057634e487b7160e01b86526022600452602486fd5b8180156115645760018114611575576115a2565b60ff198616895284890196506115a2565b60008c81526020902060005b8681101561159a5781548b820152908501908301611581565b505084890196505b5098855250505050938401929092525050604001919050565b634e487b7160e01b600052603260045260246000fdfea164736f6c6343000809000a",
+ "deployedBytecode": "0x6080604052600436106100ec5760003560e01c80635fd8c7101161008a5780638e2a3d36116100595780638e2a3d36146103005780639872dbfe1461033157806398a2687114610347578063bfe07da61461038757600080fd5b80635fd8c7101461027357806372fada5c146102885780638da5cb5b146102a85780638e2749d6146102e057600080fd5b80632dfdf0b5116100c65780632dfdf0b5146101e357806336317972146101fa5780634b2ae9801461021a5780634e1389ed1461025357600080fd5b806303aaf306146100f857806313af40351461012b57806316d722401461014d57600080fd5b366100f357005b600080fd5b34801561010457600080fd5b506101186101133660046111e9565b6103a7565b6040519081526020015b60405180910390f35b34801561013757600080fd5b5061014b61014636600461126b565b610551565b005b34801561015957600080fd5b506101aa610168366004611286565b60066020526000908152604090208054600182015460028301546003840154600485015460059095015493949293919290916001600160a01b03918216911686565b6040805196875260208701959095529385019290925260608401526001600160a01b0390811660808401521660a082015260c001610122565b3480156101ef57600080fd5b506002546101189081565b34801561020657600080fd5b5061014b61021536600461129f565b6105f7565b34801561022657600080fd5b5061011861023536600461126b565b600c1b750ffffffffffffffffffffffffffffffffffffffff0001690565b34801561025f57600080fd5b5061014b61026e3660046112eb565b6106b7565b34801561027f57600080fd5b5061014b61097a565b34801561029457600080fd5b5061014b6102a3366004611286565b610a0a565b3480156102b457600080fd5b506000546102c8906001600160a01b031681565b6040516001600160a01b039091168152602001610122565b3480156102ec57600080fd5b5061014b6102fb36600461133e565b610a92565b34801561030c57600080fd5b5061032061031b366004611286565b610b8e565b604051610122959493929190611380565b34801561033d57600080fd5b5061011860035481565b34801561035357600080fd5b50610377610362366004611286565b60046020526000908152604090205460ff1681565b6040519015158152602001610122565b34801561039357600080fd5b506101186103a236600461140d565b610c58565b60006103b1610e02565b6103bb8383610a92565b60008881526005602052604090206003810154600160a01b900460ff166103f557604051635972996f60e11b815260040160405180910390fd5b8054851115610417576040516308aeed0f60e21b815260040160405180910390fd5b61042289868a610e2d565b915060006040518060c001604052808b81526020018881526020018781526020016003544361045191906114aa565b81526001600160a01b03808c166020808401919091528b82166040938401526000878152600682528381208551815591850151600183015592840151600282015560608401516003820155608084015160048201805491841673ffffffffffffffffffffffffffffffffffffffff1992831617905560a085015160059092018054929093169116179055835491925087918491906104f09084906114c2565b9091555050604080518b81526020810188905284916001600160a01b038c16917f2a28b2ae47b0bd4b104e7cd29b1dfa72846af8c4cfdc009da2ae29db68cb67ea910160405180910390a3505061054660018055565b979650505050505050565b6000546001600160a01b0316331461059f5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064015b60405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909133917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d769190a350565b6105ff610e02565b61060883610eb1565b6106128282610a92565b60008381526005602052604090206003810154600160a01b900460ff161515600114156106425761064284610a0a565b600381015481546000835560028301546001600160a01b039283169261066b9184911683610eee565b604080518781526020810183905233917f7719804546c0185709e60c90d164447ff251a5ba29af0216faa921350f6bebf7910160405180910390a25050506106b260018055565b505050565b6106bf610e02565b60008581526006602052604090206003810154431015806106e257506002810154155b15610700576040516331da482760e11b815260040160405180910390fd5b805460009081526005602090815260408083206002850154915190939261073092600186019290918b9101611514565b60405160208183030381529060405280519060200120905060008160405160200161078791907f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b60408051601f1981840301815291815281516020928301206000858152600790935291205490915060ff161515600114156107d557604051637a48537560e11b815260040160405180910390fd5b6040805160008082526020820180845284905260ff88169282019290925260608101899052608081018890526108579060019060a0016020604051602081039080840390855afa15801561082d573d6000803e3d6000fd5b5050604051601f190151600c1b750ffffffffffffffffffffffffffffffffffffffff00016919050565b60008181526004602052604090205490915060ff1661088957604051632057875960e21b815260040160405180910390fd5b6003840154600186015460028701546001600160a01b03909216916000916108b0916114c2565b60006002890181905560038901819055868152600760205260409020805460ff1916600117905560048801549091506108f49083906001600160a01b031683610eee565b60018701541561091f576005870154600188015461091f9184916001600160a01b0390911690610eee565b60048701546040518d81526001600160a01b03909116907f5e420822d2f7281fdc4b763c62c8b7874bf22108a35efe93144d79296aacc67d9060200160405180910390a25050505050505061097360018055565b5050505050565b6000546001600160a01b031633146109c35760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401610596565b476109ce3382610f7a565b60408051338152602081018390527feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d910160405180910390a150565b610a1381610eb1565b6000818152600560209081526040918290206003810180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556002015491518381526001600160a01b03909216917fb4d98b272597e828d9b172c0d44390d5b267040e918088eac8a0a0fadcb81c70910160405180910390a250565b6000815b80821015610b7257600060066000868686818110610ab657610ab66115bb565b9050602002013581526020019081526020016000209050610ad681610fd5565b6002810154815460009081526005602052604081208054909190610afb9084906114aa565b90915550506000600282015560048101546001600160a01b03167f67e089478e21dd12c98e69331c4152f6c9b2038b91e0f28268ffa01558c0b4ff868686818110610b4857610b486115bb565b90506020020135604051610b5e91815260200190565b60405180910390a282600101925050610a96565b80821015610b885763dfb035c96000526004601cfd5b50505050565b60056020526000908152604090208054600182018054919291610bb0906114d9565b80601f0160208091040260200160405190810160405280929190818152602001828054610bdc906114d9565b8015610c295780601f10610bfe57610100808354040283529160200191610c29565b820191906000526020600020905b815481529060010190602001808311610c0c57829003601f168201915b50505050600283015460039093015491926001600160a01b03908116929081169150600160a01b900460ff1685565b6000610c62611008565b9050600085905060006040518060a0016040528087815260200186868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050908252503360208201526001600160a01b038916604082015260016060909101529050610cdc610e02565b6000838152600560209081526040909120825181558183015180518493610d0a9260018501929101906110e8565b506040820151600280830180546001600160a01b0393841673ffffffffffffffffffffffffffffffffffffffff199091161790556060840151600390930180546080909501511515600160a01b027fffffffffffffffffffffff000000000000000000000000000000000000000000909516939092169290921792909217909155610d989080546001019055565b610da482333089611058565b610dad60018055565b604080518481526001600160a01b038916602082015290810187905233907f25ac57b911b0f66b64c294827f539545fbc3ddd002cafab117776274f3241e4c9060600160405180910390a25050949350505050565b60015460021415610e265760405163558a1e0360e11b815260040160405180910390fd5b6002600155565b6040805160208101859052908101839052606082811b6bffffffffffffffffffffffff19169082015260009060740160405160208183030381529060405280519060200120905043600660008381526020019081526020016000206003015410610eaa5760405163d0404f8560e01b815260040160405180910390fd5b9392505050565b6000818152600560205260409020600201546001600160a01b03163314610eeb576040516342e8fb9360e11b815260040160405180910390fd5b50565b600060405163a9059cbb60e01b6000528360045282602452602060006044600080895af13d15601f3d1160016000511416171691506000606052806040525080610b885760405162461bcd60e51b815260206004820152600f60248201527f5452414e534645525f4641494c454400000000000000000000000000000000006044820152606401610596565b600080600080600085875af19050806106b25760405162461bcd60e51b815260206004820152601360248201527f4554485f5452414e534645525f4641494c4544000000000000000000000000006044820152606401610596565b438160030154101580610fea57506002810154155b15610eeb5760405163d0404f8560e01b815260040160405180910390fd5b600061101360025490565b600081815260056020526040902060030154909150600160a01b900460ff161515600114156110555760405163c44bd76560e01b815260040160405180910390fd5b90565b60006040516323b872dd60e01b6000528460045283602452826044526020600060646000808a5af13d15601f3d11600160005114161716915060006060528060405250806109735760405162461bcd60e51b815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006044820152606401610596565b8280546110f4906114d9565b90600052602060002090601f016020900481019282611116576000855561115c565b82601f1061112f57805160ff191683800117855561115c565b8280016001018555821561115c579182015b8281111561115c578251825591602001919060010190611141565b5061116892915061116c565b5090565b5b80821115611168576000815560010161116d565b80356001600160a01b038116811461119857600080fd5b919050565b60008083601f8401126111af57600080fd5b50813567ffffffffffffffff8111156111c757600080fd5b6020830191508360208260051b85010111156111e257600080fd5b9250929050565b600080600080600080600060c0888a03121561120457600080fd5b8735965061121460208901611181565b955061122260408901611181565b9450606088013593506080880135925060a088013567ffffffffffffffff81111561124c57600080fd5b6112588a828b0161119d565b989b979a50959850939692959293505050565b60006020828403121561127d57600080fd5b610eaa82611181565b60006020828403121561129857600080fd5b5035919050565b6000806000604084860312156112b457600080fd5b83359250602084013567ffffffffffffffff8111156112d257600080fd5b6112de8682870161119d565b9497909650939450505050565b600080600080600060a0868803121561130357600080fd5b85359450602086013593506040860135925060608601359150608086013560ff8116811461133057600080fd5b809150509295509295909350565b6000806020838503121561135157600080fd5b823567ffffffffffffffff81111561136857600080fd5b6113748582860161119d565b90969095509350505050565b8581526000602060a08184015286518060a085015260005b818110156113b45788810183015185820160c001528201611398565b818111156113c657600060c083870101525b50601f01601f1916830160c00191506113ec905060408301866001600160a01b03169052565b6001600160a01b038416606083015282151560808301529695505050505050565b6000806000806060858703121561142357600080fd5b61142c85611181565b935060208501359250604085013567ffffffffffffffff8082111561145057600080fd5b818701915087601f83011261146457600080fd5b81358181111561147357600080fd5b88602082850101111561148557600080fd5b95989497505060200194505050565b634e487b7160e01b600052601160045260246000fd5b600082198211156114bd576114bd611494565b500190565b6000828210156114d4576114d4611494565b500390565b600181811c908216806114ed57607f821691505b6020821081141561150e57634e487b7160e01b600052602260045260246000fd5b50919050565b600080855481600182811c91508083168061153057607f831692505b602080841082141561155057634e487b7160e01b86526022600452602486fd5b8180156115645760018114611575576115a2565b60ff198616895284890196506115a2565b60008c81526020902060005b8681101561159a5781548b820152908501908301611581565b505084890196505b5098855250505050938401929092525050604001919050565b634e487b7160e01b600052603260045260246000fdfea164736f6c6343000809000a",
"linkReferences": {},
"deployedLinkReferences": {}
}
diff --git a/src/views/HomeView.vue b/src/views/HomeView.vue
index 8ea3c70..2ee8a58 100644
--- a/src/views/HomeView.vue
+++ b/src/views/HomeView.vue
@@ -2,6 +2,12 @@
import SearchComponent from "../components/SearchComponent.vue";
import blockchain from "../utils/blockchain";
+// (TO DO) Tirar isso tudo daqui
+import p2pix from "../utils/smart_contract_files/P2PIX.json";
+import addresses from "../utils/smart_contract_files/localhost.json";
+import { useEtherStore } from "@/store/ether";
+import { ethers } from "ethers";
+
const confirmBuyClick = async ({ selectedDeposit, tokenValue }: any) => {
// finish buy screen
console.log(selectedDeposit);
@@ -11,6 +17,32 @@ const confirmBuyClick = async ({ selectedDeposit, tokenValue }: any) => {
.then((deposit) => (depositDetail = deposit));
console.log(tokenValue);
console.log(depositDetail);
+
+ // Makes lock with deposit ID and the Amount
+ if (depositDetail) {
+ const lock = await blockchain.addLock(
+ depositDetail.args.depositID,
+ tokenValue
+ );
+ console.log(lock);
+
+ // (TO DO) Tirar isso daqui
+ const window_ = window as any;
+ const connection = window_.ethereum;
+ let provider: ethers.providers.Web3Provider | null = null;
+ if (!connection) return;
+ provider = new ethers.providers.Web3Provider(connection);
+ const signer = provider.getSigner();
+ const etherStore = useEtherStore();
+ const p2pContract = new ethers.Contract(addresses.p2pix, p2pix.abi, signer);
+ const filterLocks = p2pContract.filters.LockAdded(null);
+ const eventsLocks = await p2pContract.queryFilter(filterLocks);
+ etherStore.setLocksAddedList(eventsLocks);
+
+ // Data to QRCode
+ // Chave Pix = depositDetail.pixTarget
+ // Valor = tokenValue
+ }
};
diff --git a/src/views/MockView.vue b/src/views/MockView.vue
index 68ab74f..b958d43 100644
--- a/src/views/MockView.vue
+++ b/src/views/MockView.vue
@@ -5,38 +5,59 @@ import { ref } from "vue";
import { useEtherStore } from "../store/ether";
import blockchain from "../utils/blockchain";
+// Blockchain Data
const etherStore = useEtherStore();
+const { depositsAddedList } = storeToRefs(etherStore);
+const { locksAddedList } = storeToRefs(etherStore);
-const { depositList } = storeToRefs(etherStore);
-
+// Buyer's flow Data
const depositValue = ref
();
const depositPixKey = ref("");
+// Split tokens between wallets in wallets.json
const splitTokens = () => {
blockchain.splitTokens();
};
+// Formatting methods
+// Formats wallet address in 0x000...0000 format
+const formatWalletAddress = (wallet: string): string => {
+ const walletAddressLength = wallet.length;
+ const initialText = wallet.substring(0, 5);
+ const finalText = wallet.substring(
+ walletAddressLength - 4,
+ walletAddressLength
+ );
+ return `${initialText}...${finalText}`;
+};
+
+// Deposit methods
+// Gets value and pix key from user's form to create a deposit in the blockchain
const mockDeposit = () => {
if (!depositValue.value || !depositPixKey.value) return;
- blockchain.mockDeposit(depositValue.value.toString(), depositPixKey.value);
-};
-
-const countDeposit = () => {
- blockchain.countDeposit();
+ blockchain.addDeposit(depositValue.value.toString(), depositPixKey.value);
};
+// Get specific deposit data by its ID
const mapDeposit = (depositId: BigNumber) => {
blockchain.mapDeposits(depositId);
};
+
+// Lock methods
+// (TO DO) Releases lock by specific ID and other additional data
+const releaseLock = () => {
+ blockchain.releaseLock();
+};
+
+// Get specific lock data by its ID
+const mapLock = (lockId: string) => {
+ blockchain.mapLocks(lockId);
+};
-
-
{
+
+
-
- Address:
{{ deposit["args"]["0"] }}
- MRBZ: {{ blockchain.formatEther(deposit["args"]["amount"]) }}
+ Seller:
{{ formatWalletAddress(deposit.args.seller) }}
+ MRBZ: {{ blockchain.formatEther(deposit.args.amount) }}
+
+
+
+ -
+ Buyer:
{{ formatWalletAddress(lock.args.buyer) }}
+ MRBZ: {{ blockchain.formatEther(lock.args.amount) }}