bridge_ui: terra address helper

Change-Id: I01d5a474d1f26fd3c500e6f9d1bcede65c013c1e
This commit is contained in:
Evan Gray 2021-08-30 17:44:13 -04:00
parent 4d7f11fc6c
commit 69349ab5c7
4 changed files with 15 additions and 6 deletions

View File

@ -24,7 +24,7 @@ export const SolanaWalletProvider: FC = (props) => {
}, []); }, []);
return ( return (
<WalletProvider wallets={wallets}> <WalletProvider wallets={wallets} autoConnect>
<WalletDialogProvider>{props.children}</WalletDialogProvider> <WalletDialogProvider>{props.children}</WalletDialogProvider>
</WalletProvider> </WalletProvider>
); );

View File

@ -22,7 +22,7 @@ import {
} from "../store/selectors"; } from "../store/selectors";
import { setTargetAddressHex } from "../store/transferSlice"; import { setTargetAddressHex } from "../store/transferSlice";
import { uint8ArrayToHex } from "../utils/array"; import { uint8ArrayToHex } from "../utils/array";
import bech32 from "bech32"; import { canonicalAddress } from "../utils/terra";
function useSyncTargetAddress(shouldFire: boolean) { function useSyncTargetAddress(shouldFire: boolean) {
const dispatch = useDispatch(); const dispatch = useDispatch();
@ -81,10 +81,7 @@ function useSyncTargetAddress(shouldFire: boolean) {
dispatch( dispatch(
setTargetAddressHex( setTargetAddressHex(
uint8ArrayToHex( uint8ArrayToHex(
zeroPad( zeroPad(canonicalAddress(terraWallet.walletAddress), 32)
new Uint8Array(bech32.fromWords(bech32.decode(terraWallet.walletAddress).words)),
32
)
) )
) )
); );

View File

@ -2,9 +2,11 @@ import {
ChainId, ChainId,
CHAIN_ID_ETH, CHAIN_ID_ETH,
CHAIN_ID_SOLANA, CHAIN_ID_SOLANA,
CHAIN_ID_TERRA,
} from "@certusone/wormhole-sdk"; } from "@certusone/wormhole-sdk";
import { PublicKey } from "@solana/web3.js"; import { PublicKey } from "@solana/web3.js";
import { hexValue } from "ethers/lib/utils"; import { hexValue } from "ethers/lib/utils";
import { humanAddress } from "./terra";
export const uint8ArrayToHex = (a: Uint8Array) => export const uint8ArrayToHex = (a: Uint8Array) =>
Buffer.from(a).toString("hex"); Buffer.from(a).toString("hex");
@ -17,4 +19,6 @@ export const hexToNativeString = (h: string | undefined, c: ChainId) =>
? new PublicKey(hexToUint8Array(h)).toString() ? new PublicKey(hexToUint8Array(h)).toString()
: c === CHAIN_ID_ETH : c === CHAIN_ID_ETH
? hexValue(hexToUint8Array(h)) ? hexValue(hexToUint8Array(h))
: c === CHAIN_ID_TERRA
? humanAddress(hexToUint8Array(h.substr(24))) // terra expects 20 bytes, not 32
: h; : h;

View File

@ -3,6 +3,7 @@ import {
ConnectedWallet as TerraConnectedWallet, ConnectedWallet as TerraConnectedWallet,
} from "@terra-money/wallet-provider"; } from "@terra-money/wallet-provider";
import { LCDClient } from "@terra-money/terra.js"; import { LCDClient } from "@terra-money/terra.js";
import bech32 from "bech32";
// TODO: Loop txInfo for timed out transactions. // TODO: Loop txInfo for timed out transactions.
// lcd.tx.txInfo(transaction.result.txhash); // lcd.tx.txInfo(transaction.result.txhash);
@ -16,3 +17,10 @@ export async function waitForTerraExecution(
}); });
return transaction; return transaction;
} }
export function canonicalAddress(humanAddress: string) {
return new Uint8Array(bech32.fromWords(bech32.decode(humanAddress).words));
}
export function humanAddress(canonicalAddress: Uint8Array) {
return bech32.encode("terra", bech32.toWords(canonicalAddress));
}