Anindya Maiti
7 months ago
2 changed files with 93 additions and 0 deletions
@ -0,0 +1,32 @@ |
|||||
|
// SPDX-License-Identifier: MIT |
||||
|
pragma solidity ^0.8.0; |
||||
|
|
||||
|
// SimpleBank contract definition |
||||
|
contract SimpleBank { |
||||
|
// Mapping from addresses to balances |
||||
|
mapping(address => uint) private balances; |
||||
|
|
||||
|
// Event declarations |
||||
|
event DepositMade(address indexed accountAddress, uint amount); |
||||
|
event WithdrawalMade(address indexed accountAddress, uint withdrawAmount, uint newBalance); |
||||
|
|
||||
|
// Deposit function allows users to deposit Ether into the bank |
||||
|
function deposit() public payable { |
||||
|
require(msg.value > 0, "Deposit amount must be greater than zero."); |
||||
|
balances[msg.sender] += msg.value; |
||||
|
emit DepositMade(msg.sender, msg.value); |
||||
|
} |
||||
|
|
||||
|
// Withdraw function allows users to withdraw Ether from the bank |
||||
|
function withdraw(uint withdrawAmount) public { |
||||
|
require(withdrawAmount <= balances[msg.sender], "Insufficient balance."); |
||||
|
payable(msg.sender).transfer(withdrawAmount); |
||||
|
balances[msg.sender] -= withdrawAmount; |
||||
|
emit WithdrawalMade(msg.sender, withdrawAmount, balances[msg.sender]); |
||||
|
} |
||||
|
|
||||
|
// Get balance function returns the Ether balance of the user |
||||
|
function getBalance() public view returns (uint) { |
||||
|
return balances[msg.sender]; |
||||
|
} |
||||
|
} |
@ -0,0 +1,61 @@ |
|||||
|
const Web3 = require('web3'); |
||||
|
|
||||
|
// Configuration
|
||||
|
const web3 = new Web3('https://sepolia.infura.io/v3/YOUR_INFURA_PROJECT_ID'); |
||||
|
const account = 'YOUR_ACCOUNT_ADDRESS'; |
||||
|
const privateKey = 'YOUR_PRIVATE_KEY'; // Be cautious with your private key
|
||||
|
const simpleBankContractAddress = 'SIMPLE_BANK_CONTRACT_ADDRESS'; |
||||
|
const simpleBankABI = [ |
||||
|
// Simplified ABI with only the methods we'll interact with
|
||||
|
{ |
||||
|
"constant": false, |
||||
|
"inputs": [], |
||||
|
"name": "deposit", |
||||
|
"outputs": [], |
||||
|
"payable": true, |
||||
|
"stateMutability": "payable", |
||||
|
"type": "function" |
||||
|
}, |
||||
|
{ |
||||
|
"constant": false, |
||||
|
"inputs": [{"name": "withdrawAmount", "type": "uint256"}], |
||||
|
"name": "withdraw", |
||||
|
"outputs": [], |
||||
|
"stateMutability": "nonpayable", |
||||
|
"type": "function" |
||||
|
} |
||||
|
]; |
||||
|
|
||||
|
async function depositEther(amount) { |
||||
|
const simpleBank = new web3.eth.Contract(simpleBankABI, simpleBankContractAddress); |
||||
|
const transaction = simpleBank.methods.deposit(); |
||||
|
const options = { |
||||
|
to: transaction._parent._address, |
||||
|
data: transaction.encodeABI(), |
||||
|
gas: await transaction.estimateGas({from: account}), |
||||
|
gasPrice: await web3.eth.getGasPrice(), |
||||
|
value: web3.utils.toWei(amount.toString(), 'ether') |
||||
|
}; |
||||
|
|
||||
|
const signed = await web3.eth.accounts.signTransaction(options, privateKey); |
||||
|
const receipt = await web3.eth.sendSignedTransaction(signed.rawTransaction); |
||||
|
console.log('Transaction receipt:', receipt); |
||||
|
} |
||||
|
|
||||
|
async function withdrawEther(amount) { |
||||
|
const simpleBank = new web3.eth.Contract(simpleBankABI, simpleBankContractAddress); |
||||
|
const transaction = simpleBank.methods.withdraw(web3.utils.toWei(amount.toString(), 'ether')); |
||||
|
const options = { |
||||
|
to: transaction._parent._address, |
||||
|
data: transaction.encodeABI(), |
||||
|
gas: await transaction.estimateGas({from: account}), |
||||
|
gasPrice: await web3.eth.getGasPrice(), |
||||
|
}; |
||||
|
|
||||
|
const signed = await web3.eth.accounts.signTransaction(options, privateKey); |
||||
|
const receipt = await web3.eth.sendSignedTransaction(signed.rawTransaction); |
||||
|
console.log('Transaction receipt:', receipt); |
||||
|
} |
||||
|
|
||||
|
// Example usage
|
||||
|
depositEther(0.01).then(() => withdrawEther(0.01)); |
Loading…
Reference in new issue