diff --git a/example-web/pages/components/DaoBreakdown/ApproveDonate.tsx b/example-web/pages/components/DaoBreakdown/ApproveDonate.tsx index c6ff81b..83cd285 100644 --- a/example-web/pages/components/DaoBreakdown/ApproveDonate.tsx +++ b/example-web/pages/components/DaoBreakdown/ApproveDonate.tsx @@ -6,43 +6,74 @@ const ApproveDonate = () => { const [approvedAmount, setApprovedAmount] = useState(false); const [donationIsLoading, setDonationIsLoading] = useState(false); const [donationAmount, setDonationAmount] = useState(''); - + const [communityAddress, setCommunityAddress] = useState(''); const approveDonation = async () => { setDonationIsLoading(true); - const response = await donationMiner.approve(donationAmount); + let response; + if (communityAddress.length > 0) { + response = await donationMiner.approve(donationAmount, communityAddress); + } else { + response = await donationMiner.approve(donationAmount); + } setDonationIsLoading(false); if (response?.status) { setApprovedAmount(true); } - } + }; const executeDonation = async () => { setDonationIsLoading(true); - const response = await donationMiner.donateToTreasury(donationAmount); + let response; + if (communityAddress.length > 0) { + response = await donationMiner.donateToCommunity(communityAddress, donationAmount); + } else { + response = await donationMiner.donateToTreasury(donationAmount); + } setDonationIsLoading(false); if (response?.status) { setApprovedAmount(false); } - } + }; return ( <>

Approve & Donate

- setDonationAmount(event.target.value)} type="number" value={donationAmount || ''} /> - - + setDonationAmount(event.target.value)} + type="number" + value={donationAmount || ''} + /> +
+ setCommunityAddress(event.target.value)} + value={communityAddress || ''} + style={{ width: 400 }} + /> +
+ +
+ +
{donationIsLoading && Loading...}
- ) -} + ); +}; export default ApproveDonate; diff --git a/src/internalUseTransaction.tsx b/src/internalUseTransaction.tsx index 10fbd3d..f8cbc17 100644 --- a/src/internalUseTransaction.tsx +++ b/src/internalUseTransaction.tsx @@ -50,6 +50,10 @@ export const internalUseTransaction = () => { throw new Error('no valid address connected'); } + if (signer) { + return tx; + } + const [_nonce, _gasPrice, _gasLimit, _value] = await Promise.all([ apiGetAccountNonce(jsonRpcUrl, tx.from || address), apiGetGasPrice(jsonRpcUrl, defaultFeeCurrency), @@ -62,7 +66,7 @@ export const internalUseTransaction = () => { ...tx, account: (tx.from || address) as `0x${string}`, gas: BigInt(_gasLimit.toNumber() * 2), - gasPrice: BigInt(_gasPrice), + gasPrice: BigInt(parseInt(_gasPrice, 16) * 2), nonce: _nonce, value: BigInt(_value) }; @@ -92,7 +96,7 @@ export const internalUseTransaction = () => { const txResponse = await connection.sendTransaction({ data: tx.data, from: tx.from || address, - gasPrice: await apiGetGasPrice(jsonRpcUrl, defaultFeeCurrency), + gasPrice: parseInt(await apiGetGasPrice(jsonRpcUrl, defaultFeeCurrency), 16) * 2, to: tx.to }); diff --git a/src/useBorrower.tsx b/src/useBorrower.tsx index 2ee46cc..7d2760b 100644 --- a/src/useBorrower.tsx +++ b/src/useBorrower.tsx @@ -163,6 +163,8 @@ export const useBorrower = () => { if (loanId !== -1) { userLoans(address, loanId).then(() => setIsReady(true)); + } else { + setIsReady(true); } }; diff --git a/src/useDonationMiner.tsx b/src/useDonationMiner.tsx index e170370..ed505c0 100644 --- a/src/useDonationMiner.tsx +++ b/src/useDonationMiner.tsx @@ -16,33 +16,27 @@ export const useDonationMiner = () => { const executeTransaction = internalUseTransaction(); const approve = async (value: string | number, to?: string) => { - try { - const { cusd, donationMiner } = getContracts(provider, networkId); - const amount = toToken(value, { EXPONENTIAL_AT: 29 }); - - if (to === undefined) { - to = donationMiner.address; - } - if (!address || !donationMiner?.provider || !cusd?.provider || !amount) { - return; - } + const { cusd, donationMiner } = getContracts(provider, networkId); + const amount = toToken(value, { EXPONENTIAL_AT: 29 }); - const cUSDAllowance = await cusd.allowance(address, to); - const cusdAllowance = toNumber(cUSDAllowance); - const allowance = cusdAllowance || 0; + if (to === undefined) { + to = donationMiner.address; + } + if (!address || !donationMiner?.provider || !cusd?.provider || !amount) { + return; + } - if (allowance >= Number(value)) { - return { status: true }; - } + const cUSDAllowance = await cusd.allowance(address, to); + const cusdAllowance = toNumber(cUSDAllowance); + const allowance = cusdAllowance || 0; - const tx = await cusd.populateTransaction.approve(to, amount); + if (allowance >= Number(value)) { + return { status: true }; + } - return await executeTransaction(tx); - } catch (error) { - console.log('Error approving amount: \n', error); + const tx = await cusd.populateTransaction.approve(to, amount); - return { status: false }; - } + return await executeTransaction(tx); }; const donateToTreasury = async (value: string | number) => {