diff --git a/index.html b/index.html
index 0145e3b..3d0b0f7 100644
--- a/index.html
+++ b/index.html
@@ -155,6 +155,14 @@
+
@@ -832,10 +840,14 @@
}
function checkSenderBalance() {
let address;
- const wif = getRef('private_key_input').value.trim()
- if (!wif)
+ const privateKey = getRef('private_key_input').value.trim()
+ if (!privateKey)
return notify(`Please enter sender's private key to check balance`)
- address = floEthereum.ethAddressFromPrivateKey(coinjs.wif2privkey(wif).privkey)
+ if (privateKey.startsWith('R') || privateKey.startsWith('L') || privateKey.startsWith('K')) {
+ address = floEthereum.ethAddressFromPrivateKey(coinjs.wif2privkey(privateKey).privkey)
+ } else {
+ address = floEthereum.ethAddressFromPrivateKey(privateKey)
+ }
getRef('sender_balance_container').classList.remove('hidden')
renderElem(getRef('sender_balance_container'), html` Loading balance... `)
const promises = [ethOperator.getBalance(address)]
diff --git a/scripts/floEthereum.js b/scripts/floEthereum.js
index 52488d0..2717684 100644
--- a/scripts/floEthereum.js
+++ b/scripts/floEthereum.js
@@ -4,47 +4,53 @@
'use strict';
const floEthereum = EXPORTS;
-const ethAddressFromPrivateKey = floEthereum.ethAddressFromPrivateKey = function(privateKey){
- var t1,t2,t3,t4;
+ const ethAddressFromPrivateKey = floEthereum.ethAddressFromPrivateKey = function (privateKey, onlyEvenY = false) {
+ var t1, t1_x, t1_y, t1_y_BigInt, t2, t3, t4;
+ var groupOrder = BigInt("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F");
- t1 = secp.Point.fromPrivateKey(hex.decode(privateKey));
- if (!t1.hasEvenY()) { t1 = t1.negate(); }
- t2 = t1.x.toString(16) + t1.y.toString(16);
- t3 = keccak.keccak_256(Crypto.util.hexToBytes(t2));
- t4 = keccak.extractLast20Bytes(t3);
- return "0x" + t4;
-}
+ t1 = bitjs.newPubkey(privateKey);
+ t1_x = t1.slice(2, 66); t1_y = t1.slice(-64);
+ if (onlyEvenY) {
+ t1_y_BigInt = BigInt("0x" + t1_y);
+ if (t1_y_BigInt % 2n !== 0n) { t1_y_BigInt = (groupOrder - t1_y_BigInt) % groupOrder; t1_y = t1_y_BigInt.toString(16) }
+ };
-const ethAddressFromCompressedPublicKey = floEthereum.ethAddressFromCompressedPublicKey = function(compressedPublicKey){
- var t1,t2,t3,t4;
- t1 = coinjs.compressedToUncompressed(compressedPublicKey);
- t2 = t1.slice(2);
- t3 = keccak.keccak_256(Crypto.util.hexToBytes(t2));
- t4 = keccak.extractLast20Bytes(t3);
- return "0x" + t4;
-}
+ t2 = t1_x.toString(16) + t1_y.toString(16);
+ t3 = keccak.keccak_256(Crypto.util.hexToBytes(t2));
+ t4 = keccak.extractLast20Bytes(t3);
+ return "0x" + t4;
+ }
-const ethPrivateKeyFromUntweakedPrivateKey = floEthereum.ethPrivateKeyFromUntweakedPrivateKey = function(untweakedPrivateKey) {
- var t1;
- t1 = hex.encode(taproot.taprootTweakPrivKey(hex.decode(untweakedPrivateKey)));
- return t1;
-}
+ const ethAddressFromCompressedPublicKey = floEthereum.ethAddressFromCompressedPublicKey = function (compressedPublicKey) {
+ var t1, t2, t3, t4;
+ t1 = coinjs.compressedToUncompressed(compressedPublicKey);
+ t2 = t1.slice(2);
+ t3 = keccak.keccak_256(Crypto.util.hexToBytes(t2));
+ t4 = keccak.extractLast20Bytes(t3);
+ return "0x" + t4;
+ }
-const ethAddressFromUntweakedPrivateKey = floEthereum.ethAddressFromUntweakedPrivateKey = function(untweakedPrivateKey) {
- var t1,t2;
- t1 = hex.encode(taproot.taprootTweakPrivKey(hex.decode(untweakedPrivateKey)));
- t2 = ethAddressFromPrivateKey(t1);
- return t2;
-}
+ const ethPrivateKeyFromUntweakedPrivateKey = floEthereum.ethPrivateKeyFromUntweakedPrivateKey = function (untweakedPrivateKey) {
+ var t1;
+ t1 = hex.encode(taproot.taprootTweakPrivKey(hex.decode(untweakedPrivateKey)));
+ return t1;
+ }
-const ethAddressFromTaprootAddress = floEthereum.ethAddressFromTaprootAddress = function(taprootAddress) {
- var t1,t2,t3,t4;
- t1 = coinjs.addressDecode(taprootAddress);
- t2 = t1.outstring.slice(4);
- t3 = "02" + t2;
- t4 = ethAddressFromCompressedPublicKey(t3);
- return t4;
-}
+ const ethAddressFromUntweakedPrivateKey = floEthereum.ethAddressFromUntweakedPrivateKey = function (untweakedPrivateKey) {
+ var t1, t2;
+ t1 = hex.encode(taproot.taprootTweakPrivKey(hex.decode(untweakedPrivateKey)));
+ t2 = ethAddressFromPrivateKey(t1);
+ return t2;
+ }
+
+ const ethAddressFromTaprootAddress = floEthereum.ethAddressFromTaprootAddress = function (taprootAddress) {
+ var t1, t2, t3, t4;
+ t1 = coinjs.addressDecode(taprootAddress);
+ t2 = t1.outstring.slice(4);
+ t3 = "02" + t2;
+ t4 = ethAddressFromCompressedPublicKey(t3);
+ return t4;
+ }
diff --git a/scripts/floEthereum.min.js b/scripts/floEthereum.min.js
new file mode 100644
index 0000000..c39765f
--- /dev/null
+++ b/scripts/floEthereum.min.js
@@ -0,0 +1 @@
+!function(EXPORTS){"use strict";const floEthereum="object"===typeof module?module.exports:window.floEthereum={},ethAddressFromPrivateKey=floEthereum.ethAddressFromPrivateKey=function(privateKey,onlyEvenY=!1){var t1,t1_x,t1_y,t1_y_BigInt,t2,t3,groupOrder=BigInt("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F");return t1_x=(t1=bitjs.newPubkey(privateKey)).slice(2,66),t1_y=t1.slice(-64),onlyEvenY&&(t1_y_BigInt=BigInt("0x"+t1_y))%2n!==0n&&(t1_y=(t1_y_BigInt=(groupOrder-t1_y_BigInt)%groupOrder).toString(16)),t2=t1_x.toString(16)+t1_y.toString(16),t3=keccak.keccak_256(Crypto.util.hexToBytes(t2)),"0x"+keccak.extractLast20Bytes(t3)},ethAddressFromCompressedPublicKey=floEthereum.ethAddressFromCompressedPublicKey=function(compressedPublicKey){var t2,t3;return t2=coinjs.compressedToUncompressed(compressedPublicKey).slice(2),t3=keccak.keccak_256(Crypto.util.hexToBytes(t2)),"0x"+keccak.extractLast20Bytes(t3)};floEthereum.ethPrivateKeyFromUntweakedPrivateKey=function(untweakedPrivateKey){return hex.encode(taproot.taprootTweakPrivKey(hex.decode(untweakedPrivateKey)))},floEthereum.ethAddressFromUntweakedPrivateKey=function(untweakedPrivateKey){var t1;return t1=hex.encode(taproot.taprootTweakPrivKey(hex.decode(untweakedPrivateKey))),ethAddressFromPrivateKey(t1)},floEthereum.ethAddressFromTaprootAddress=function(taprootAddress){var t2;return t2=coinjs.addressDecode(taprootAddress).outstring.slice(4),ethAddressFromCompressedPublicKey("02"+t2)}}();
\ No newline at end of file