Skip to content

Instantly share code, notes, and snippets.

@maellson
Created May 29, 2020 16:52
Show Gist options
  • Save maellson/2ad4fd34aa7b2eeccf86f27daac1c2c6 to your computer and use it in GitHub Desktop.
Save maellson/2ad4fd34aa7b2eeccf86f27daac1c2c6 to your computer and use it in GitHub Desktop.
Created using remix-ide: Realtime Ethereum Contract Compiler and Runtime. Load this file by pasting this gists URL or ID at https://remix.ethereum.org/#version=soljson-v0.5.17+commit.d19bba13.js&optimize=false&gist=
pragma solidity ^0.4.0;
contract GuardaLoteria {
uint numeroSorteado;
function set(uint enviado) public{
numeroSorteado = enviado;
}
function get() public view returns (uint) {
return numeroSorteado;
}
}
pragma solidity ^0.5.17;
/**
* The contractName contract does this and that...
*/
contract HelloWorld {
string public text;//defeiniu uma string como sendo publica de acesso global
uint public number;//definiu uma variavel numerica
address public userAddress;//definiu uma variavel do tipo endereco
bool public answer;// definiu uma variavel booleana
//mapping (address => bool) public hasInteracted;//definiu uma variavel mapeada que informa se um endereco interagiu no contrato (modelo_1)
mapping (address => uint) public hasInteracted;//essa variavel recebe a quantidade de vezes em que houve interacao no contrato(modelo_2)
mapping (address => uint) public balances;//saldo da conta;
function setText (string memory myText) public {
text = myText;
setInteracted();
}
function setNumber (uint myNumber) public payable{
require (msg.value >= 1 ether, "Insufficient ETH sent.");
balances[msg.sender]+=msg.value; //procura o endereco pra fazer o incrmento do valor
number = myNumber;
setInteracted();
}
//esta funcao ler de imediato de qual endereco partiu a mensagem ou os termos do contrato.
function setUserAddress() public {
userAddress = msg.sender;
setInteracted();
}
//variaveis booleana so aceitam dois valores true ou false, caso seja inserido outro valor, sera interpretado como true
function setAnswer (bool myAnswer) public {
answer = myAnswer;
setInteracted();
}
//(modelo_1)guarda dentro da variavel hasInteracted o valor true, pra dizer que aquele endereco interegiu dentro do contrato
//(modelo_2) Incrementa o valor da varivael para contar quantas vezes houve interacoes no contrato.
//toda ver que um metodo acima e chamado ess funcao e executada.
function setInteracted()private{
//hasInteracted[msg.sender] = true; //modelo_1
hasInteracted[msg.sender] +=1; //modelo_2
}
//envia eth para uma conta payable
function sendETH(address payable targetAddress) public payable{
targetAddress.transfer(msg.value);
}
function withdraw() public {
require (balances[msg.sender] > 0, "Insufficient funds!");
uint amount = balances[msg.sender];//variavel de escopo e sera esquecida
balances[msg.sender] =0;// o saldo e zerado antes da tranferencia impedido loop de saques
msg.sender.transfer(amount);// usa o valor do amount e verifica o saldo, como agora esta zerado, nao podera ser executada novamente
}
//funcoes pure nao alteram nem consultam coisas na blockchain e sao gratuitas
function sum (uint num1, uint num2) public pure returns(uint){
return num1 + num2;
}
function sub (uint num1, uint num2) public pure returns(uint){
return num1 - num2;
}
function prod (uint num1, uint num2) public pure returns(uint){
return num1 * num2;
}
function div (uint num1, uint num2) public pure returns(uint){
return num1 / num2;
}
function power (uint num1, uint num2) public pure returns(uint){
return num1 ** num2;
}
//funcoes do tipo view fazem consulta na blockchain. ela esta consultando o valor de number
function sumStored (uint num1) public view returns(uint){
return num1 + number;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment