title | actions | requireLogin | material | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Saques |
|
true |
|
No capítulo anterior, aprendemos como enviar Ether para um contrato. Então o que acontece após o envio?
Após você enviar Ether para um contrato, este fica guardado na conta Ethereum do contrato, e ficará preso no contrato - ao menos que você adicione uma função para sacar o Ether do contrato.
Você pode escrever a função para sacar o Ether do contrato conforme exemplo:
contract GetPaid is Ownable {
function withdraw() external onlyOwner {
owner.transfer(this.balance);
}
}
Note que usamos owner
e onlyOwner
do contrato Ownable
, assumindo que foi importado.
Você pode transferir Ether para um endereço usando a função transfer
, e this.balance
irá retornar o saldo total guardado no contrato. Então se 100 usuários pagarem 1 Ether para nos contrato, this.balance
irá ser igual a 100 Ether.
Você pode usar transfer
para enviar fundos para qualquer endereço Ethereum. Por exemplo, você poderia ter uma função que transfere Ether de volta para o msg.sender
se eles pagarem à mais por um item:
uint itemFee = 0.001 ether;
msg.sender.transfer(msg.value - itemFee);
Ou dentro de um contrato com um comprador e um vendedor, você poderia salvar o endereço do vendedor em memória permanente (storage), então quando alguém comprar o item deste vendedor, transfira para o mesmo o custo que o comprador pagou: seller.transfer(msg.value)
.
Estes são alguns exemplos que fazem a programação em Ethereum tão legal - você pode ter marketplaces decentralizados como este que não são controlados por ninguém.
-
Crie uma função
withdraw
em nosso contrato, que deverá ser idêntica ao exemploGetPaid
acima. -
O preço do Ether subiu 10x no último ano. Então enquanto 0.001 ether é como
$1 USD no momento que escrevemos isto, se o preço subir 10x novamente, 0.001 ETH será 10$ e nosso jogo será muito mais caro.
Então é uma boa idea criar uma função que nos permita como donos do contrato ajustar o valor de levelUpFee
.
a. Crie uma função chamada setLevelUpFee
que recebe um argumento, uint _fee
, é external
, e usa o modificador onlyOwner
.
b. A função deve atribuir levelUpFee
igual a _fee
.