Creando un Smart Contract que hace la función de un Crowdfunding similar a kickstarter
Saludos cordiales, en el día de hoy voy a crear un kickstarter pero mejor porque lo voy a crear con un Smart Contract, que quiere decir esto ? Que mi dApp es descentralizada es decir que no depende de un tercero, ya que está distribuida en Miles de nodos alrededor del mundo. Además de distribuida es muy segura y es muy difícil de hackear digamos que imposible.
Pongámonos en contexto.
El funcionamiento de nuestra dApp será algo así:
Una persona quiere dinero para crear algo, dinero que no tiene, y el desea que las personas lo ayuden a crear ese "algo" digamos que desea crear un carro que vuela, y por ende necesita dinero para ello. El crea un Smart Contract para que las personas le den dinero. Pero las personas (contribuyentes deciden el destino de ese dinero) los que contribuirán tendrán la potestad de votar si esa persona gasta un dinero para un fin. El que crea el Smart Contract creará una lista de solicitudes por ejemplo :
- Comprar cauchos: dónde el incluirá la dirección (address) del proveedor. Entonces los que han contribuido decidirán en una votación si se efectúa esa solicitud. En caso de que la votación supere la mitad de contribuyentes se procederá a enviar ese dinero de esa solicitud automáticamente al proveedor.
Se diferencia nuestra dApp de Kickstarter en qué en esta última si se supera el monto del proyecto se envía todo ese dinero al que crea ese kickstarter sin más. Con el riesgo de que esta persona se agarre el dinero y no haga el proyecto. (Eso ha pasado en esa plataforma) y no es broma. Las personas se agarran el dinero y no hacen nada estafando a los que han contribuido a ese proyecto.
¿Que les parece?
Excelente dirán, bueno me pondré en marcha y crearé mi Smart Contract:
El código comienza desde aquí:
pragma solidity ^0.8.6;
contract Crowdfunding {
address public creator;
struct Request{
string description;
address provider;
uint amount;
uint votingCount;
mapping(address => bool) approvals;
}
mapping(address=> bool) public approvers;
mapping(uint=> Request) public requests;
uint public requetsCount;
uint public minimumContribution;
uint public contributors;
constructor(uint minimum){
creator=msg.sender;
minimumContribution = minimum;
}
function contribute() public payable{
require(msg.value >= minimumContribution);
approvers[msg.sender] = true;
contributors++;
}
function makeRequest(string memory description, uint amount, address provider) public {
require(msg.sender==creator);
require(bytes(description).length>0));
require(provider=!address(0));
requetsCount++;
Request storage request = requests[requestCount];
request.description = description;
request.amount= amount;
request.provider= provider;
request.votingCount= 0;
}
function voting(uint id) public {
require(id>0 && id<requestCount);
Request memory request = request[id];
require(!request.approvals [msg.sender]);
request.votingCount++;
request.approvals[msg.sender] = true;
}
function finalizeRequest(uint id) public {
require(msg.sender == creator);
Request memory requets = requests [id];
if( request.votingCount > contributors/2){
payable(request.provider).transfer (request.amount);
}
}
Electronic-terrorism, voice to skull and neuro monitoring on Hive and Steem. You can ignore this, but your going to wish you didnt soon. This is happening whether you believe it or not. https://ecency.com/fyrstikken/@fairandbalanced/i-am-the-only-motherfucker-on-the-internet-pointing-to-a-direct-source-for-voice-to-skull-electronic-terrorism
Te recomiendo usar
para meter tu codigo y se vea mas legible, sino asi amontonado no se puede apreciar, checa como es el markdown, para que te quede algo asi