'Save cryto in one account and then send to others with solidity
I am creating a Dapp to practice solidity where people buy the ERC20 coin from my smart contract to keep it as their account balance, to pay other Dapp users and in the same payment that the user makes send a percentage to an account own for me to earn by commission, but that the user can also decide if he changes the token for a cryptocurrency to send it to his account, my questions are:
- how is it done in solidity so that people can buy the ERC20 coin and then save it in my Dapp, and then the user can pay others and I keep the commission?
I hope someone knows about it, thanks.
This is what I have done to practice, my code is in Spanish, I do not speak English.
This is the ERC20 token code:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
contract token {
string public name; /// funcion para obtener el nombre del token
string public symbol; /// funcion para obtener el simbolo del token
uint8 public decimals; /// funcion para obtener el numero de decimales del token
uint256 public totalSupply; /// funcion para obtener la cantidad total de tokens
mapping(address => uint256) public balanceOf; /// funcion para obtener el balance de una direccion
mapping(address => mapping(address => uint256)) public allowance; /// funcion para obtener el permiso de una direccion y pretar los token
event Transfer(address indexed desde, address indexed para, uint256 valor); /// evento para notificar cuando una transferencia es hecha
event Approval(address indexed propiedario, address indexed autorizado, uint256 valor); /// evento para notificar que una persona autoriza una transferencia
constructor(string memory _name, string memory _symbol, uint8 _decimals, uint256 _totalSupply) public {
name = _name;
symbol = _symbol;
decimals = _decimals;
totalSupply = _totalSupply;
balanceOf[msg.sender] = totalSupply;
emit Transfer(address(0), msg.sender, totalSupply);
}
function transfer(address para, uint256 valor) public returns (bool) { /// funcion para transferir tokens
require(balanceOf[msg.sender] >= valor, "Fondos insuficientes."); /// verifica que el balance del emisor sea mayor o igual al valor a transferir
balanceOf[msg.sender] -= valor; /// resta el valor a transferir del balance del emisor
balanceOf[para] += valor; /// suma el valor a transferir al balance del destinatario
emit Transfer(msg.sender, para, valor); /// notifica que una transferencia fue hecha
return true;
}
function approve(address gastador, uint256 valor) public returns (bool) {
require( balanceOf[msg.sender] >= valor, "Fondos Insuficientes." ); /// verifica que el balance del emisor sea mayor o igual al valor a transferir
allowance[msg.sender][gastador] = valor; /// permite que una persona gastador pueda transferir tokens
emit Approval(msg.sender, gastador, valor); /// notifica que una persona autorizo una transferencia
return true;
}
function transferFrom(address desde, address para, uint256 valor) public returns (bool) {
require(allowance[desde][msg.sender] >= valor, "No tienes permiso para transferir."); /// verifica que el permiso del emisor sea mayor o igual al valor a transferir
require(balanceOf[desde] >= valor, "Fondos insuficientes."); /// verifica que el balance del emisor sea mayor o igual al valor a transferir
balanceOf[desde] -= valor; /// resta el valor a transferir del balance del emisor
allowance[desde][msg.sender] -= valor; /// resta el valor a transferir del permiso del emisor
balanceOf[para] += valor; /// suma el valor a transferir al balance del destinatario
emit Transfer(desde, para, valor); /// notifica que una transferencia fue hecha
return true;
}
}
This is a code to create a task:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
contract tarea {
struct datosTarea {
uint256 id;
string titulo;
string descripcion;
uint256 fecha;
}
uint256 public contador;
mapping( uint256 => datosTarea ) public ListaTareas;
function crearTarea( string memory _titulo, string memory _descripcion ) public returns(bool){
ListaTareas[contador] = datosTarea(contador,_titulo,_descripcion,block.timestamp);
contador++;
return true;
}
}
this is my html and javascript to create, save and get the tasks of the simulated blockchain that ganache offers me:
<html>
<head>
<title>blockchain</title>
<script src="web3.js"></script>
</head>
<body>
<h2 id="cuenta">Cuenta: No Conectado</h2>
<h2 id="ntares">N Tareas: No Conectado</h2>
<h2 id="nbalance">ETH: No Conectado</h2>
<div style="border:1px solid black;margin:10px;">
<input id="a" type="text" placeholder="titulo"></input>
<input id="b" type="text" placeholder="descripcion"></input>
<input onclick="window.guardarr();" id="c" type="button" value="Guardar en blockchain"></input>
</div>
<script>
var cuentas;
var web3;
var LaCuenta;
var contratoJson;
var contrato;
window.guardarr = function() {
guarda();
};
async function guarda() {
var titulo = document.getElementById('a').value;
var descripcion = document.getElementById('b').value;
var dd = await contrato.methods.crearTarea(titulo,descripcion).send({from:LaCuenta});
window.location.reload();
}
async function cargarContrato() {
const res = await fetch('tarea.json');
contratoJson = await res.json();
const idRed = await web3.eth.net.getId();
contrato = new web3.eth.Contract(contratoJson.abi,contratoJson.networks[idRed].address);
console.log(contrato);
}
async function conectar () {
if( window.ethereum ) {
try{
/// conectar metamask
cuentas = await window.ethereum.request({'method': 'eth_requestAccounts'});
/// obtener el objeto web3
web3 = new Web3(window.ethereum);
console.log(web3);
/// obtener la cuenta
var LaCuentaTemp = await web3.eth.getAccounts();
LaCuenta = LaCuentaTemp[0];
document.getElementById('cuenta').innerText = 'Cuenta: '+LaCuenta;
await cargarContrato();
const totalTareas = await contrato.methods.contador().call();
document.getElementById('ntares').innerText = 'N Tareas: '+totalTareas;
const balancee = await web3.eth.getBalance(LaCuenta);
document.getElementById('nbalance').innerText = 'ETH: '+balancee;
var cont = '';
for(var i = 0; i < totalTareas; i++) {
const Tareas = await contrato.methods.ListaTareas(i).call();
var idTarea = Tareas[0];
var TituloTarea = Tareas[1];
var DescripcionTarea = Tareas[2];
var FechaTarea = Tareas[3];
cont += '<div style="border:1px solid gray;">';
cont += '<h3>'+TituloTarea+' - id: '+idTarea+'</h3>';
cont += '<p>'+DescripcionTarea+'</p>';
cont += '<p>'+(new Date(FechaTarea*1000).toLocaleString())+'</p>';
cont += '</div>';
}
document.body.innerHTML += cont;
}catch(error){
alert(error);
}
}else{
alert("Instala primero metamask.");
}
}
conectar();
</script>
</body>
</html>
I really hope someone can help me, I'm new to stackoverflow, I came here hoping to receive a little help.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
