Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ export const validateInjectionData = (requestData: InjectionMessage): InjectionM
export const validateInjectionDataWithAddress = (
requestData: InjectionMessage,
address: string,
multisig?: boolean,
): InjectionMessage | null => {
if (!validateInjectionTransactionType(requestData)) {
return InjectionMessageInstance.failure(
Expand All @@ -24,7 +25,7 @@ export const validateInjectionDataWithAddress = (
);
}

if (!validateInjectionTransactionMessageWithAddress(requestData, address)) {
if (!multisig && !validateInjectionTransactionMessageWithAddress(requestData, address)) {
return InjectionMessageInstance.failure(
WalletResponseFailureType.ACCOUNT_MISMATCH,
{ requestData, address },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ export interface ApproveTransactionProps {
onClickConfirm: () => void;
onClickCancel: () => void;
useNetworkFeeReturn: UseNetworkFeeReturn;
multisig?: boolean;
}

export const ApproveTransaction: React.FC<ApproveTransactionProps> = ({
Expand Down Expand Up @@ -78,10 +79,15 @@ export const ApproveTransaction: React.FC<ApproveTransactionProps> = ({
onClickConfirm,
onClickCancel,
openScannerLink,
multisig,
}) => {
const [openedNetworkFeeSetting, setOpenedNetworkFeeSetting] = useState(false);

const disabledApprove = useMemo(() => {
if (multisig) {
return false
}

if (useNetworkFeeReturn.isLoading) {
return true;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,21 @@ const ApproveSignTransactionContainer: React.FC = () => {
const { openScannerLink } = useLink();
const { data: currentBalance = null } = useGetGnotBalance();

const useNetworkFeeReturn = useNetworkFee(document, true);
let useNetworkFeeReturn = useNetworkFee(document, true);

if (requestData?.data?.multisig) {
useNetworkFeeReturn = {
...useNetworkFeeReturn,
networkFee: {
amount: requestData.data.gasFee.toString(),
denom: GasToken.denom,
},
isLoading: false,
isSimulateError: false,
currentGasFeeRawAmount: requestData.data.gasFee,
}
}

const networkFee = useNetworkFeeReturn.networkFee;

const processing = useMemo(() => processType !== 'INIT', [processType]);
Expand Down Expand Up @@ -187,6 +201,7 @@ const ApproveSignTransactionContainer: React.FC = () => {
const validationMessage = validateInjectionDataWithAddress(
requestData,
await currentAccount.getAddress(defaultAddressPrefix),
requestData.data?.multisig,
);
if (validationMessage) {
chrome.runtime.sendMessage(validationMessage);
Expand Down Expand Up @@ -247,22 +262,45 @@ const ApproveSignTransactionContainer: React.FC = () => {
}

const currentMemo = memo;
const currentGasPrice = useNetworkFeeReturn.currentGasFeeRawAmount;
const currentGasWanted = useNetworkFeeReturn.currentGasInfo?.gasWanted || 0;

const updatedDocument: Document = {
...document,
memo: currentMemo,
fee: {
amount: [
{
amount: currentGasPrice.toString(),
denom: GasToken.denom,
},
],
gas: currentGasWanted.toString(),
},
};

let updatedDocument: Document
if (requestData?.data?.multisig) {
const currentGasPrice = requestData.data.gasFee
const currentGasWanted = requestData.data.gasWanted

updatedDocument = {
...document,
memo: currentMemo,
account_number: requestData.data.accountNumber.toString(),
sequence: requestData.data.sequence.toString(),
fee: {
amount: [
{
amount: currentGasPrice.toString(),
denom: GasToken.denom,
},
],
gas: currentGasWanted.toString(),
},
};
} else {
const currentGasPrice = useNetworkFeeReturn.currentGasFeeRawAmount;
const currentGasWanted = useNetworkFeeReturn.currentGasInfo?.gasWanted || 0;

updatedDocument = {
...document,
memo: currentMemo,
fee: {
amount: [
{
amount: currentGasPrice.toString(),
denom: GasToken.denom,
},
],
gas: currentGasWanted.toString(),
},
};
}

setDocument(updatedDocument);
setTransactionData(mappedTransactionData(updatedDocument));
Expand Down Expand Up @@ -406,6 +444,7 @@ const ApproveSignTransactionContainer: React.FC = () => {
openScannerLink={openScannerLink}
opened={visibleTransactionInfo}
transactionData={JSON.stringify(document, null, 2)}
multisig={requestData?.data?.multisig}
/>
);
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,21 @@ const ApproveSignContainer: React.FC = () => {

const { data: currentBalance = null } = useGetGnotBalance();

const useNetworkFeeReturn = useNetworkFee(document, true);
let useNetworkFeeReturn = useNetworkFee(document, true); // XXX: prevent useless network calls

if (requestData?.data?.multisig) {
useNetworkFeeReturn = {
...useNetworkFeeReturn,
networkFee: {
amount: requestData.data.gasFee.toString(),
denom: GasToken.denom,
},
isLoading: false,
isSimulateError: false,
currentGasFeeRawAmount: requestData.data.gasFee,
}
}

const networkFee = useNetworkFeeReturn.networkFee;

const processing = useMemo(() => processType !== 'INIT', [processType]);
Expand Down Expand Up @@ -186,6 +200,7 @@ const ApproveSignContainer: React.FC = () => {
const validationMessage = validateInjectionDataWithAddress(
requestData,
await currentAccount.getAddress('g'),
requestData.data?.multisig,
);
if (validationMessage) {
chrome.runtime.sendMessage(validationMessage);
Expand Down Expand Up @@ -246,22 +261,45 @@ const ApproveSignContainer: React.FC = () => {
}

const currentMemo = memo;
const currentGasPrice = useNetworkFeeReturn.currentGasFeeRawAmount;
const currentGasWanted = useNetworkFeeReturn.currentGasInfo?.gasWanted || 0;

const updatedDocument: Document = {
...document,
memo: currentMemo,
fee: {
amount: [
{
amount: currentGasPrice.toString(),
denom: GasToken.denom,
},
],
gas: currentGasWanted.toString(),
},
};

let updatedDocument: Document
if (requestData?.data?.multisig) {
const currentGasPrice = requestData.data.gasFee
const currentGasWanted = requestData.data.gasWanted

updatedDocument = {
...document,
memo: currentMemo,
account_number: requestData.data.accountNumber.toString(),
sequence: requestData.data.sequence.toString(),
fee: {
amount: [
{
amount: currentGasPrice.toString(),
denom: GasToken.denom,
},
],
gas: currentGasWanted.toString(),
},
};
} else {
const currentGasPrice = useNetworkFeeReturn.currentGasFeeRawAmount;
const currentGasWanted = useNetworkFeeReturn.currentGasInfo?.gasWanted || 0;

updatedDocument = {
...document,
memo: currentMemo,
fee: {
amount: [
{
amount: currentGasPrice.toString(),
denom: GasToken.denom,
},
],
gas: currentGasWanted.toString(),
},
};
}

setDocument(updatedDocument);
setTransactionData(mappedTransactionData(updatedDocument));
Expand All @@ -280,12 +318,16 @@ const ApproveSignContainer: React.FC = () => {
}

try {
const signature = await transactionService.createSignature(currentAccount, document);
const signature = await transactionService.createSignature(
currentAccount,
document,
);
const addr = await currentAccount?.getAddress('g')
setProcessType('PROCESSING');
setResponse(
InjectionMessageInstance.success(
WalletResponseSuccessType.SIGN_SUCCESS,
{ document, signature },
{ document, signature, account: addr},
requestData?.key,
),
);
Expand All @@ -306,7 +348,7 @@ const ApproveSignContainer: React.FC = () => {
setResponse(
InjectionMessageInstance.failure(
WalletResponseFailureType.SIGN_FAILED,
{},
{ error: { message: `${e}` } },
requestData?.key,
),
);
Expand Down Expand Up @@ -401,6 +443,7 @@ const ApproveSignContainer: React.FC = () => {
openScannerLink={openScannerLink}
opened={visibleTransactionInfo}
transactionData={JSON.stringify(document, null, 2)}
multisig={requestData?.data?.multisig}
/>
);
};
Expand Down
12 changes: 10 additions & 2 deletions packages/adena-module/src/wallet/keyring/keyring-util.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Tx, Wallet as Tm2Wallet } from '@gnolang/tm2-js-client';
import { Tx, Wallet as Tm2Wallet, SignTransactionOptions } from '@gnolang/tm2-js-client';

import { decodeTxMessages, Document, documentToTx } from './../../utils/messages';
import { AddressKeyring } from './address-keyring';
Expand Down Expand Up @@ -51,5 +51,13 @@ export function makeSignedTx(wallet: Tm2Wallet, document: Document): Promise<Tx>
const tx = documentToTx(document);
const decodeTxMessageFunction = decodeTxMessages;

return wallet.signTransaction(tx, decodeTxMessageFunction);
const opts: SignTransactionOptions = {}
if (document.account_number) {
opts.accountNumber = document.account_number
}
if (document.sequence) {
opts.sequence = document.sequence
}

return wallet.signTransaction(tx, decodeTxMessageFunction, opts);
}