Description:
Multi-signature wallet contract requiring multiple confirmations for transaction execution.
Blockchain: Ethereum
Source Code: View Code On The Blockchain
Solidity Source Code:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.26;
// Interfaz para conectar con el contrato BankData
interface IBankData {
function getAmount() external view returns (uint256);
}
contract BankToken {
// Datos del token
string public name = "BankToken";
string public symbol = "BTK";
uint8 public decimals = 2;
uint256 public totalSupply;
// Propiedad del contrato
address public owner;
// Conexión con BankData
IBankData public bankData;
bool public initialized;
// Balances y autorizaciones
mapping(address => uint256) public balanceOf;
mapping(address => mapping(address => uint256)) public allowance;
// Eventos
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
event Initialized(address indexed bankDataAddress, uint256 supply);
// Constructor básico
constructor(address bankDataAddress) {
require(bankDataAddress != address(0), "BankData address required");
bankData = IBankData(bankDataAddress);
owner = msg.sender;
}
// Inicializa el suministro desde BankData (solo una vez)
function initializeSupply() public {
require(msg.sender == owner, "Only owner can initialize");
require(!initialized, "Already initialized");
totalSupply = bankData.getAmount();
balanceOf[owner] = totalSupply;
initialized = true;
emit Initialized(address(bankData), totalSupply);
}
// Transferencia de tokens
function transfer(address to, uint256 value) public returns (bool success) {
require(balanceOf[msg.sender] >= value, "Insufficient balance");
balanceOf[msg.sender] -= value;
balanceOf[to] += value;
emit Transfer(msg.sender, to, value);
return true;
}
// Aprobación de gasto
function approve(address spender, uint256 value) public returns (bool success) {
allowance[msg.sender][spender] = value;
emit Approval(msg.sender, spender, value);
return true;
}
// Transferencia desde cuenta autorizada
function transferFrom(address from, address to, uint256 value) public returns (bool success) {
require(balanceOf[from] >= value, "Insufficient balance");
require(allowance[from][msg.sender] >= value, "Not authorized");
balanceOf[from] -= value;
balanceOf[to] += value;
allowance[from][msg.sender] -= value;
emit Transfer(from, to, value);
return true;
}
// Transferencia de propiedad
function transferOwnership(address newOwner) public {
require(msg.sender == owner, "Only owner can transfer");
require(newOwner != address(0), "Invalid address");
emit OwnershipTransferred(owner, newOwner);
owner = newOwner;
}
// Consulta del origen del suministro
function getSupplySource() public view returns (address) {
return address(bankData);
}
}
Submitted on: 2025-10-01 13:14:09
Comments
Log in to comment.
No comments yet.