diff --git a/src/Contracts.svelte b/src/Contracts.svelte index 1ddade5..02eb143 100644 --- a/src/Contracts.svelte +++ b/src/Contracts.svelte @@ -46,6 +46,7 @@ const performCheck = async () => { let tokenIds = []; let recipients = []; + let isERC1155 = false; checksPending = true; errorMessage = ''; @@ -54,6 +55,7 @@ evm.attachContract('nft', contractAddress, IERC721.abi); } else { evm.attachContract('nft', contractAddress, IERC1155.abi); + isERC1155 = true; } // Check the contract is valid @@ -99,7 +101,7 @@ try { let balance = await $contracts.nft.methods.balanceOf($selectedAccount, tokenId).call(); if (Number(balance) < 1) { throw new Error(`You must own the token in order to send it (token ${tokenId}, balance ${balance})`); } - if (tokenIds.length < Number(balance)) { throw new Error(`Provided more tokens than balance(token ${tokenId}, balance ${balance})`); } + if (Number(tokenIds.length) > Number(balance)) { throw new Error(`Provided more tokens than balance (token ${tokenId}, balance ${balance})`); } tokenIds.push(tokenId); } catch(e) { errorMessage = e; @@ -127,34 +129,42 @@ } // Show gas consumption forecasts - await estimateGas(recipients, tokenIds); + await estimateGas(recipients, tokenIds, isERC1155); checked = true; } - async function estimateCBT(recipients, tokens) { + async function estimateCBT(recipients, tokens, isERC1155) { si_gasLimit = 0; let fee = await $contracts.sendit.methods.usageFee().call(); - await $contracts.sendit.methods.contractBulkTransfer(contractAddress, tokens, recipients, false).estimateGas({from: $selectedAccount, value: fee * recipients.length}, function(err, gas){ + console.log(recipients) + console.log(tokens) + await $contracts.sendit.methods.contractBulkTransfer(contractAddress, tokens, recipients, isERC1155).estimateGas({from: $selectedAccount, value: fee * recipients.length}, function(err, gas){ si_gasLimit += gas; }); } - async function estimateSTF(recipients, tokens) { + async function estimateSTF(recipients, tokens, isERC1155) { gasLimit = 0; for (let i = 0; i < recipients.length; i++) { - await $contracts.nft.methods.safeTransferFrom($selectedAccount, recipients[i], tokens[i]).estimateGas({from: $selectedAccount}, function(err, gas){ - gasLimit += gas; - }); + if (isERC1155) { + await $contracts.nft.methods.safeTransferFrom($selectedAccount, recipients[i], tokens[i], 1, "").estimateGas({from: $selectedAccount}, function(err, gas){ + gasLimit += gas; + }); + } else { + await $contracts.nft.methods.safeTransferFrom($selectedAccount, recipients[i], tokens[i]).estimateGas({from: $selectedAccount}, function(err, gas){ + gasLimit += gas; + }); + } } } - async function estimateGas(recipients, tokens) { + async function estimateGas(recipients, tokens, isERC1155) { if (recipients.length != tokens.length) { errorMessage = 'Invalid recipient/token IDs provided; please review'; return; } - await estimateCBT(recipients, tokens); - await estimateSTF(recipients, tokens); + await estimateCBT(recipients, tokens, isERC1155); + await estimateSTF(recipients, tokens, isERC1155); let gasPrice = await $web3.eth.getGasPrice(); - // let gasPrice = 50000000000; + // let gasPrice = 50000000000; // override for testing let gasPriceGwei = await $web3.utils.fromWei(gasPrice.toString(), 'gwei'); let gasCostWei = gasPrice * gasLimit; let gasCostEth = await $web3.utils.fromWei(gasCostWei.toString()); @@ -174,7 +184,6 @@ } else { gasCalculation.push(`That is a savings of ${diffEth} Ξ (saved ~${Math.round(diffPerc)}%)`); } - gasCalculation = gasCalculation; // trigger recheck }