Created
June 13, 2020 01:49
-
-
Save maellson/1a5438fb2d51d2dfce23f902e1e16205 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=
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
pragma solidity ^0.4.0; | |
contract GuardaLoteria { | |
uint numeroSorteado; | |
function set(uint enviado) public{ | |
numeroSorteado = enviado; | |
} | |
function get() public view returns (uint) { | |
return numeroSorteado; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
pragma solidity ^0.5.17; | |
/** | |
* The SafeMath library does this and that... | |
*/ | |
library SafeMath { | |
//funcoes pure nao alteram nem consultam coisas na blockchain e sao gratuitas | |
function sum(uint num1, uint num2) internal pure returns(uint){ | |
uint num3 = num1+num2; | |
require(num3 >=num1, "Erro de soma: Sum Overflow"); | |
return num3; | |
} | |
function sub(uint num1, uint num2) internal pure returns(uint){ | |
require(num2 <= num1, "Erro de Subtracao: Sub Underflow"); | |
uint num3 = num1 - num2; | |
return num3; | |
} | |
function prod(uint num1, uint num2) internal pure returns(uint){ | |
if (num1 == 0){ | |
return 0; | |
} | |
uint num3 = num1 * num2; | |
require(num3 / num1 == num2, "Erro multiplicacao: Prod Overflow"); | |
return num3; | |
} | |
function div(uint num1, uint num2) internal pure returns(uint){ | |
uint num3 = num1 / num2; | |
return num3; | |
} | |
function power (uint num1, uint num2) internal pure returns(uint){ | |
return num1 ** num2; | |
} | |
} | |
contract HelloWorld { | |
using SafeMath for uint; | |
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] = balances[msg.sender].sum(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] = hasInteracted[msg.sender].sum(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 do tipo view fazem consulta na blockchain. ela esta consultando o valor de number | |
function sumStored (uint num1) public view returns(uint){ | |
return num1.sum(number); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment