-
- Spread dApp
- -
-
-
-
-
-
-
+
+
+
+
SPREAD
-Synonym: Verb
-to broadcast, circulate
- + + +
+
+ Spread dApp
+ +
+
-
-
+
-
+
+
+
+
SPREAD
+Synonym: Verb
+to broadcast, circulate
+ +
-
-
-
-
-
-
@@ -248,7 +248,6 @@ Spread your assets across multiple accounts in one transaction.
+ +
+
+
+
-
+
-
+
+
Spread your assets across multiple accounts in one transaction.
+
-
-
+
-
-
-
-
-
-
@@ -208,7 +208,7 @@
- Spread dApp
@@ -120,11 +120,11 @@
@@ -167,7 +167,7 @@
-
+
-
+
-
-
+
-
+
+
-
-
-
+
-
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
+
\ No newline at end of file
From 10dc4efa45d48b768ed574de71ff19d97e6e28c5 Mon Sep 17 00:00:00 2001
From: Markus Bielaszka <69858432+Markus-55@users.noreply.github.com>
Date: Sun, 24 Jul 2022 01:00:02 +0200
Subject: [PATCH 7/9] Fix: function calls in frontend and show correct chain in
dropdown
---
assets/js/spread/ABI.js | 159 ++++++++++++++++++++++++++++++++++++++
assets/js/spread/app.js | 5 +-
assets/js/spread/utils.js | 101 +++++++++++++-----------
spread-dapp.html | 11 ++-
4 files changed, 221 insertions(+), 55 deletions(-)
create mode 100644 assets/js/spread/ABI.js
diff --git a/assets/js/spread/ABI.js b/assets/js/spread/ABI.js
new file mode 100644
index 0000000..b555b8a
--- /dev/null
+++ b/assets/js/spread/ABI.js
@@ -0,0 +1,159 @@
+const ABI = [
+ {
+ "inputs": [],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "inputs": [],
+ "name": "Error_1",
+ "type": "error"
+ },
+ {
+ "inputs": [],
+ "name": "Error_2",
+ "type": "error"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "previousOwner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "newOwner",
+ "type": "address"
+ }
+ ],
+ "name": "OwnershipTransferred",
+ "type": "event"
+ },
+ {
+ "inputs": [],
+ "name": "owner",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "renounceOwnership",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "saveAsset",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "contract IERC20",
+ "name": "token",
+ "type": "address"
+ }
+ ],
+ "name": "saveERC20",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "recipients",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "spreadAsset",
+ "outputs": [],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "contract IERC20",
+ "name": "token",
+ "type": "address"
+ },
+ {
+ "internalType": "address[]",
+ "name": "recipients",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "spreadERC20",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "contract IERC20",
+ "name": "token",
+ "type": "address"
+ },
+ {
+ "internalType": "address[]",
+ "name": "recipients",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "spreadERC20Simple",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "newOwner",
+ "type": "address"
+ }
+ ],
+ "name": "transferOwnership",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "stateMutability": "payable",
+ "type": "receive"
+ }
+]
+
+export { ABI }
\ No newline at end of file
diff --git a/assets/js/spread/app.js b/assets/js/spread/app.js
index bfc23b3..63daf1f 100644
--- a/assets/js/spread/app.js
+++ b/assets/js/spread/app.js
@@ -3,7 +3,6 @@ import { setNetworkId, getNetworkData, getAssets, networkSwitch } from "./utils.
let selectedChain = document.querySelector("#selectedChain");
let token, logOut;
-
// Auto log in with metamask and get native assets and token balances.
(async function () {
await setNetworkId();
@@ -28,4 +27,6 @@ selectedChain.addEventListener("change", async (event) => {
});
// listens when user selects a token in front-end
-selectAssets.addEventListener("change", (event) => token = event.target.value);
\ No newline at end of file
+selectAssets.addEventListener("change", (event) => token = event.target.value);
+
+export { token }
\ No newline at end of file
diff --git a/assets/js/spread/utils.js b/assets/js/spread/utils.js
index ec826e6..0a535df 100644
--- a/assets/js/spread/utils.js
+++ b/assets/js/spread/utils.js
@@ -1,3 +1,6 @@
+import { ABI } from "./ABI.js";
+import { token } from "./app.js";
+
let addrList = [];
let valueList = [];
let valsToSum = [];
@@ -12,6 +15,27 @@ let selectAssets = document.querySelector("#selectAssets");
let nativeOption = document.createElement('option');
let erc20Option = document.createElement('option');
+// Get the nework data like network and chain data.
+async function getNetworkData() {
+ let web3Provider = await Moralis.enableWeb3();
+ let network = await web3Provider.getNetwork();
+ let chainId = await Moralis.chainId;
+
+ let response = await fetch("https://chainid.network/chains.json");
+ let data = await response.json();
+
+ return [network, data, chainId];
+}
+
+// Set the correct network ID in the select options droppdown.
+async function setNetworkId() {
+ let chainId = await getNetworkData();
+
+ if(chainId[2] == "0x1") document.querySelector("#eth").selected = "true";
+ else if(chainId[2] == "0x89") document.querySelector("#matic").selected = "true";
+ else document.getElementById("chooseChain").selected = "true";
+}
+
// fetch the native balance of the address and display it in the select options element
const getNativeAsset = async (network, data) => {
const nativeBalances = await Moralis.Web3API.account.getNativeBalance({chain: Moralis.getChainId()});
@@ -45,13 +69,20 @@ const getERC20Assets = async () => {
}
}
+// fetch both native asset and ERC20, and return them.
+async function getAssets(network, data) {
+ let native = await getNativeAsset(network, data);
+ let erc20 = await getERC20Assets(network);
+ return [native, erc20];
+}
+
// @notice Spreads main asset to multiple recipients with corresponding values, all in just one transaction.
// @param recipients[] An array of addresses.
// @param values[] An array of values.
async function sendNativeAsset(network) {
const spreadOptions = {
functionName: "spreadAsset",
- abi: SPREAD_ABI,
+ abi: ABI,
params: {
recipients: addrList,
values: valueList
@@ -60,22 +91,35 @@ async function sendNativeAsset(network) {
if (network.chainId === 1) await Moralis.executeFunction({msgValue: sumOf(valsToSum), contractAddress: spreadMainnet, ...spreadOptions});
if (network.chainId === 137) await Moralis.executeFunction({msgValue: sumOf(valsToSum), contractAddress: spreadPolygon, ...spreadOptions});
}
+
// @notice execute method to spread ERC20 assets.
// @param token The token to spread.
async function sendErc20(token, network) {
const spreadERC20Options = {
functionName: "spreadERC20",
- abi: SPREAD_ABI,
+ abi: ABI,
params: {
token: token,
recipients: addrList,
values: valueList
- }
- }
+ }
+ }
if (network.chainId === 1) await Moralis.executeFunction({msgValue: sumOf(valsToSum), contractAddress: spreadMainnet, ...spreadERC20Options});
if (network.chainId === 137) await Moralis.executeFunction({msgValue: sumOf(valsToSum), contractAddress: spreadPolygon, ...spreadERC20Options});
}
+// spreads native or erc20 assets
+async function spread() {
+ let networkData = await getNetworkData();
+
+ if(selectAssets.value === "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee") sendNativeAsset(networkData[0]);
+ else if(selectAssets.value === "") {
+ alert("Please select an asset to spread");
+ throw "no selected asset";
+ } else sendErc20(token, networkData[0]);
+}
+document.querySelector("#spread").onclick = spread;
+
// switch network with to selected chain
async function networkSwitch(chain) {
try {
@@ -106,21 +150,6 @@ async function addPolygonChain() {
);
}
-// gives the sum of an array
-function sumOf(arr) {
- let total = 0;
- for(let i = 0; i < arr.length; i++) total += arr[i];
-
- return total;
-}
-
-// fetch both native asset and ERC20, and return them.
-async function getAssets(network, data) {
- let native = await getNativeAsset(network, data);
- let erc20 = await getERC20Assets(network);
- return [native, erc20];
-}
-
// sets all values in the table
function setTableValues() {
let address = document.getElementById("input-address").value;
@@ -147,6 +176,7 @@ function setTableValues() {
addRecieverDataToLists(address, amount);
}
+document.querySelector("#setTableValues").onclick = setTableValues;
// adds all data to arrays
function addRecieverDataToLists(account, value) {
@@ -155,35 +185,12 @@ function addRecieverDataToLists(account, value) {
valsToSum.push(Number(Moralis.Units.ETH(value)));
}
-// Get the nework data like network and chain data.
-async function getNetworkData() {
- let web3Provider = await Moralis.enableWeb3();
- let network = await web3Provider.getNetwork();
-
- let response = await fetch("https://chainid.network/chains.json");
- let data = await response.json();
-
- return [network, data];
-}
-
-// Set the correct network ID in the select options droppdown.
-async function setNetworkId() {
- let chainId = await Moralis.chainId;
-
- if(chainId === "0x1") document.getElementById("eth").selected = "true";
- else if(chainId === "0x89") document.getElementById("matic").selected = "true";
- else document.getElementById("chooseChain").selected = "true";
-}
+// gives the sum of an array
+function sumOf(arr) {
+ let total = 0;
+ for(let i = 0; i < arr.length; i++) total += arr[i];
-// spreads native or erc20 assets
-async function spread() {
- let networkData = await getNetworkData();
-
- if(selectAssets.value === "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee") sendNativeAsset(networkData[0]);
- else if(selectAssets.value === "") {
- alert("Please select an asset to spread");
- throw "no selected asset";
- } else sendErc20(token, networkData[0]);
+ return total;
}
export { spread, setNetworkId, getNetworkData, addRecieverDataToLists, setTableValues, getAssets, sumOf, networkSwitch }
\ No newline at end of file
diff --git a/spread-dapp.html b/spread-dapp.html
index b3ed194..21dc759 100644
--- a/spread-dapp.html
+++ b/spread-dapp.html
@@ -3,7 +3,7 @@
-
+
-
-
-
-
+
+ Spread list:
-
-
-
-
-
-
-
-
-
-
-
-
+
# | -Recipient | -Amount | -
---|
+
+
+
+
-
+
Spread list:
+
+
+
+
-
-
+
+
+
+
+
+
+
+
# | +Recipient | +Amount | +
---|
Spread dApp
-
+