From 0a039a643446dce739066b5a25fc7f65564ead43 Mon Sep 17 00:00:00 2001 From: BokkyPooBah Date: Fri, 3 May 2024 13:20:05 +1000 Subject: [PATCH] wip --- docs/datatxmap.js | 65 ++++++++++++++++++- docs/online.html | 156 ++++++++++++++++++++++++++++------------------ 2 files changed, 159 insertions(+), 62 deletions(-) diff --git a/docs/datatxmap.js b/docs/datatxmap.js index cbb5735..15a2338 100644 --- a/docs/datatxmap.js +++ b/docs/datatxmap.js @@ -1,7 +1,68 @@ -function dataToTx(data) { +async function dataToTx(data, amountUnit, provider) { console.log(moment().format("HH:mm:ss") + " dataToTx: " + JSON.stringify(data, bigNumberReplacer, 2)); let tx = null; - return tx; + const errors = {}; + if (data.action == "ethtransfer") { + let from = null; + if (data.from) { + try { + from = ethers.utils.getAddress(data.from); + } catch (e) { + errors.from = "Invalid"; + } + } else { + errors.complete = false; + } + let to = null; + if (data.to) { + try { + to = ethers.utils.getAddress(data.to); + } catch (e) { + errors.to = "Invalid"; + } + } else { + errors.complete = false; + } + let value = null; + if (data.amount) { + try { + value = ethers.utils.parseUnits(data.amount, amountUnit); + } catch (e) { + errors.amount = "Invalid"; + } + } else { + errors.complete = false; + } + tx = { + from, + to, + value, + data: null, + }; + } else if (data.action == "erc20transfer") { + const contract = new ethers.Contract(data.token, ERC20ABI, provider); + const tokens = ethers.utils.parseUnits(data.tokens, 18); // TODO: Decimals + // let tokens = null; + if (data.tokens) { + try { + tokens = ethers.utils.parseUnits(data.tokens, amountUnit); + } catch (e) { + errors.tokens = "Invalid"; + } + } else { + errors.complete = false; + } + const tokenData = await contract.populateTransaction.transfer(data.to, tokens.toString()); + tx = { + from: data.from, + to: data.token, + value: 0, + data: tokenData, + }; + } else { + errors.complete = false; + } + return { tx, errors }; } function txToData(tx, oldData) { diff --git a/docs/online.html b/docs/online.html index 35edb3a..e911c02 100644 --- a/docs/online.html +++ b/docs/online.html @@ -168,36 +168,36 @@ -