Skip to content

Commit

Permalink
add keplr txn support
Browse files Browse the repository at this point in the history
  • Loading branch information
blackpanther1881 committed May 22, 2023
1 parent 9c08218 commit c64a8e2
Show file tree
Hide file tree
Showing 4 changed files with 116 additions and 43 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import {
submitFormData
} from "../../../../../store/actions/transactions/delegationTransfer";
import { DelegationTransferMsg } from "../../../../../utils/protoMsgHelper";
import { setTxName } from "../../../../../store/actions/transactions/common";
import {setTxIno, setTxName} from "../../../../../store/actions/transactions/common";
import { keplrSubmit } from "../../../../../store/actions/transactions/keplr";

const Submit = () => {
Expand Down Expand Up @@ -50,6 +50,19 @@ const Submit = () => {
)
);
});
dispatch(
setTxIno({
value: {
modal: handleDelegationTokenizeModal(false),
data: {
message: "",
amount: "",
list: [],
memo: ""
}
}
})
);
dispatch(
setTxName({
value: {
Expand Down
88 changes: 48 additions & 40 deletions src/store/actions/transactions/keplr.js
Original file line number Diff line number Diff line change
@@ -1,61 +1,69 @@
import transactions from "../../../utils/transactions";
import { fee } from "../../../utils/aminoMsgHelper";
import {
showTxResultModal,
txFailed,
txInProgress,
txResponse,
txSuccess
closeLoader,
showTxResultModal,
txFailed,
txInProgress,
txResponse,
txSuccess
} from "./common";
import * as Sentry from "@sentry/browser";
import { fetchTransferableVestingAmount } from "../balance";
import { handleDelegationTransferModal } from "./delegationTransfer";
import { hideKeyStoreModal } from "./keyStore";
import { LOGIN_INFO } from "../../../constants/localStorage";
import {pollAccountBalance} from "../../../utils/queries";
import {hideKeyStoreModal} from "./keyStore";

export const keplrSubmit =
(messages = "") =>
(dispatch, getState) => {
async (dispatch, getState) => {
dispatch(txInProgress());
const txName = getState().common.txName.value.name;
const loginInfo = JSON.parse(localStorage.getItem(LOGIN_INFO));
const response = transactions.TransactionWithKeplr(
messages,
fee(0, 250000),
""
);
console.log(messages, "messages");
response
.then((result) => {
console.log(result, "result");
try {
const txName = getState().common.txName.value.name;
const balance = getState().balance.list;
const loginInfo = JSON.parse(localStorage.getItem(LOGIN_INFO));
const response = await transactions.TransactionWithKeplr(
messages,
fee(0, 250000),
""
);
console.log("here", response, txName)

if (
getState().common.txName.value.name !== "send" &&
getState().common.txName.value.name !== "ibc"
) {
dispatch(getState().common.txInfo.value.modal);
}
if (result.code !== undefined) {
if (txName === "delegation-transfer") {
dispatch(
fetchTransferableVestingAmount(loginInfo && loginInfo.address)
);
dispatch(handleDelegationTransferModal(true));
} else {
dispatch(txSuccess());
dispatch(txResponse(result));
dispatch(showTxResultModal());
}
if (response.code !== undefined && response.code === 0) {
console.log("here0",txName)
if (
txName !== "send" &&
txName !== "ibc"
) {
console.log("here in")
dispatch(getState().common.txInfo.value.modal);
}
if (txName === "delegation-transfer") {
const pollResult = await pollAccountBalance(balance,loginInfo && loginInfo.address);
dispatch(closeLoader());
if(pollResult){
dispatch(
fetchTransferableVestingAmount(loginInfo && loginInfo.address)
);
dispatch(handleDelegationTransferModal(true))
}else {
throw Error('something went wrong');
}
} else {
dispatch(txSuccess());
dispatch(txResponse(response));
dispatch(showTxResultModal());
}
} else {
console.log(result, "final result");
throw Error(response.rawLog);
}
})
.catch((error) => {
}catch (error) {
dispatch(showTxResultModal());
console.log(error.message, "error");
Sentry.captureException(
error.response ? error.response.data.message : error.message
error.response ? error.response.data.message : error.message
);
dispatch(txFailed(error.message));
});
}
};
29 changes: 29 additions & 0 deletions src/utils/aminoConvter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
export function createLSNativeAminoConverters() {
return {
"/lsnative.staking.v1beta1.MsgTokenizeShares": {
aminoType: "cosmos/MsgTokenizeShares",
toAmino: ({
delegatorAddress,
amount,
validatorAddress,
tokenizedShareOwner
}) => ({
delegator_address: delegatorAddress,
amount: amount,
validator_address:validatorAddress,
tokenized_share_owner: tokenizedShareOwner
}),
fromAmino: ({
delegator_address,
amount,
validator_address,
tokenized_share_owner
}) => ({
delegatorAddress: delegator_address,
amount: amount,
validatorAddress: validator_address,
tokenizedShareOwner: tokenized_share_owner
})
}
}
}
27 changes: 25 additions & 2 deletions src/utils/transactions.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { DirectSecp256k1HdWallet, Registry } from "@cosmjs/proto-signing";
import Long from "long";
import { Tendermint34Client } from "@cosmjs/tendermint-rpc";
import {
AminoTypes,
createProtobufRpcClient,
defaultRegistryTypes
} from "@cosmjs/stargate";
Expand All @@ -27,6 +28,15 @@ const {
QueryClient,
setupIbcExtension
} = require("@cosmjs/stargate");
import { createLSNativeAminoConverters } from "./aminoConvter";
import {
createAuthzAminoConverters,
createBankAminoConverters,
createDistributionAminoConverters,
createGovAminoConverters,
createIbcAminoConverters,
createStakingAminoConverters,
} from "@cosmjs/stargate";
const tmRPC = require("@cosmjs/tendermint-rpc");
const { TransferMsg } = require("./protoMsgHelper");
const addressPrefix = DefaultChainInfo.prefix;
Expand All @@ -35,6 +45,18 @@ const configCoinType = DefaultChainInfo.coinType;

const tendermintRPCURL = process.env.REACT_APP_TENDERMINT_RPC_ENDPOINT;

function createAminoTypes(prefix) {
return {
...createAuthzAminoConverters(),
...createBankAminoConverters(),
...createDistributionAminoConverters(),
...createGovAminoConverters(),
...createStakingAminoConverters(prefix),
...createIbcAminoConverters(),
...createLSNativeAminoConverters()
};
}

async function Transaction(wallet, signerAddress, msgs, fee, memo = "") {
const cosmJS = await SigningStargateClient.connectWithSigner(
tendermintRPCURL,
Expand All @@ -44,7 +66,8 @@ async function Transaction(wallet, signerAddress, msgs, fee, memo = "") {
...defaultRegistryTypes,
[msgTokenizeShares, MsgTokenizeShares],
[msgRedeemTokensforShares, MsgRedeemTokensforShares]
])
]),
aminoTypes: new AminoTypes(createAminoTypes(signerAddress.split("1")[0]))
}
);
return await cosmJS.signAndBroadcast(signerAddress, msgs, fee, memo);
Expand All @@ -62,7 +85,7 @@ async function TransactionWithKeplr(

async function KeplrWallet(chainID = configChainID) {
await window.keplr.enable(chainID);
const offlineSigner = window.getOfflineSignerOnlyAmino(chainID);
const offlineSigner = await window.getOfflineSignerAuto(chainID);
const accounts = await offlineSigner.getAccounts();
return [offlineSigner, accounts[0].address];
}
Expand Down

0 comments on commit c64a8e2

Please sign in to comment.