Pages:
Author

Topic: [Programmazione] Smart Contracts - page 3. (Read 20938 times)

full member
Activity: 1064
Merit: 166
June 01, 2018, 01:14:31 AM
#60
Tongue ;)grazie ma quindi questi consentono di trasferre automaticamente i token a chi invia eth
?

si, basterebbe aggiungerci la parte dove lo smart contract riceve gli eth, che qui non c'è. Appena ho un po di tempo vedo di fare un esempio, perchè lo smart contract non può ricevere direttamente ethereum se non è abilitato a farlo.
newbie
Activity: 69
Merit: 0
May 31, 2018, 05:58:02 PM
#59
 Tongue ;)grazie ma quindi questi consentono di trasferre automaticamente i token a chi invia eth
?
full member
Activity: 1064
Merit: 166
May 28, 2018, 09:03:05 AM
#58
Come gestire token in uno smart contract:

Dopo tanta pazienza sono riuscito a capire come funzionano i trasferimenti, quindi cerco di spiegarvi come funziona il tutto, come al solito con esempi che potete provare da voi.

Contratto:

Code:
pragma solidity ^0.4.4;

contract SafeMath {
  function safeMul(uint a, uint b) internal returns (uint) {
    uint c = a * b;
    assert(a == 0 || c / a == b);
    return c;
  }

  function safeSub(uint a, uint b) internal returns (uint) {
    assert(b <= a);
    return a - b;
  }

  function safeAdd(uint a, uint b) internal returns (uint) {
    uint c = a + b;
    assert(c>=a && c>=b);
    return c;
  }

  function assert(bool assertion) internal {
    if (!assertion) throw;
  }
}

contract Token {
  
  function balanceOf(address _owner) constant returns (uint256 balance) {}
  function transfer(address _to, uint256 _value) returns (bool success) {}
  function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {}
  function approve(address _spender, uint256 _value) returns (bool success) {}
}


contract Banca is SafeMath{
  mapping (address => mapping (address => uint)) public tokens; //questo mappa un indirizzo di un token con un la mappatura di un indirizzo di un proprietario e la quantità di quei tokens
  
  event Deposit(address token, address user, uint amount, uint balance);
  event Withdraw(address token, address user, uint amount, uint balance);
  
  function Banca(){
  
  }
  
  function depositoToken(address token, uint amount) {
    if (token==0) throw;
    if (!Token(token).transferFrom(msg.sender, this, amount)) throw;
    tokens[token][msg.sender] = safeAdd(tokens[token][msg.sender], amount);
    Deposit(token, msg.sender, amount, tokens[token][msg.sender]);
  }
  
  function prelievoToken(address token, uint amount) {
    if (token==0) throw;
    if (tokens[token][msg.sender] < amount) throw;
    tokens[token][msg.sender] = safeSub(tokens[token][msg.sender], amount);
    if (!Token(token).transfer(msg.sender, amount)) throw;
    Withdraw(token, msg.sender, amount, tokens[token][msg.sender]);
  }
}  
 

Contratto token per i test:
https://github.com/ConsenSys/Tokens/tree/master/contracts/eip20


Come depositare i token nel vostro smart contract?

I tokens possono essere spediti direttamente all’indirizzo dello smart contract con il vostro client preferito, però questo modo non permette allo smart contract di tenere traccia di chi ha mandato i token, quindi non è ottimale. Per il risolvere il problema dobbiamo prima mappare un indirizzo di un token con la mappatura di un indirizzo di un proprietario e la quantità di tokens:

Code:
mapping (address => mapping (address => uint)) public tokens;

e permettere allo smart contract di spendere parte dei nostri token, questo avviene tramite il metodo approve del contratto del token che volete trasferire. Interfacciandosi direttamente al contratto del token basta chiamare:
   
Code:
approve(address _spender, uint256 _value)

A questo punto il contratto può spendere parte dei vostri token, fino a raggiungere l’ammontare specificato. In questo modo lo smart contract prende in consegna i tokens e può salvare il mittente e la quantità di tokens depositati tramite la seguente funzione:

Code:
function depositoToken(address token, uint amount) {
    if (token==0) throw;
    if (!Token(token).transferFrom(msg.sender, this, amount)) throw;
    tokens[token][msg.sender] = safeAdd(tokens[token][msg.sender], amount);
    Deposit(token, msg.sender, amount, tokens[token][msg.sender]);
  }


Come prelevare i token dal vostro smart contract?

Per prelevare i token dallo smart contract non dobbiamo far altro che chiamare dal nostro smart contract la funzione transfer del contratto del token:

Code:
function transfer(address _to, uint256 _value) returns (bool success) {}

Che compare nella nostra funzione per il prelievo:

Code:
function prelievoToken(address token, uint amount) public payable{
    if (token==0) throw;
    if (tokens[token][msg.sender] < amount) throw;
    tokens[token][msg.sender] = safeSub(tokens[token][msg.sender], amount);
    if (!Token(token).transfer(msg.sender, amount)) throw;
    Withdraw(token, msg.sender, amount, tokens[token][msg.sender]);
  }










Piccola parentesi:
In un primo momento per generare un token velocemente avevo utilizzato il codice presente qui, senza guardarci troppo: https://www.ethereum.org/token

Come potete vedere questo in questo contratto la funzione transfer non ritorna un boolean, quindi in questo caso quando chiamo la funzione transfer dal mio contratto mi ritorna sempre false e metamask mi avvisa che c’e’ un errore nel contratto, senza specificare dove. Dopo un pò che ci ho sbattuto la testa mi sono reso conto del problema e preso un contratto standard da qui https://github.com/ConsenSys/Tokens/tree/master/contracts/eip20 anche se per risolvere il problema nel vecchio contratto basta aggiungere:

Code:
   function transfer(address _from, address _to, uint256 _value) public returns (bool success) {
        _transfer(_from, _to, _value);
        return true;
    }

Questo è tutto. Se qualcosa non ho chiaro chiedete pure.
newbie
Activity: 69
Merit: 0
May 25, 2018, 09:59:43 AM
#57
la funzione di redistribuzione è un casotto hahaha alemno per me
full member
Activity: 1064
Merit: 166
May 24, 2018, 07:37:09 AM
#56
in questi giorni sto cercando di capire come mandare token ad uno smart contract e poi fare in modo di riprenderli, la prima parte è piuttosto semplice e ci sono diversi modi per farlo ma la seconda mi sta facendo smadonnare non poco.
Appena riesco a capire per bene il tutto metto qua un esempio funzionante :/
full member
Activity: 1064
Merit: 166
May 16, 2018, 11:10:44 AM
#55
ho sviluppato diversi smartcontract in Solidity, e Golang, chiedi pure in pvt o email

[email protected]

Ciao quali sono i vantaggi nello sviluppare in Golang è più semplice rispetto ad usare Solidity ?
newbie
Activity: 22
Merit: 0
May 15, 2018, 11:32:08 PM
#54
ho sviluppato diversi smartcontract in Solidity, e Golang, chiedi pure in pvt o email

[email protected]
newbie
Activity: 69
Merit: 0
May 08, 2018, 01:34:48 PM
#53
bankera utilizzera lo standard ERC223 Contract
https://blog.bankera.com/2018/05/07/why-is-the-bnk-token-unique/
di seguito il link per trovare il contratto
https://github.com/Bankera-token/BNK-ETH-Contract

erc223 pare abbia più alti standard di sicurezza e verifica degli errori
newbie
Activity: 38
Merit: 0
May 08, 2018, 12:39:41 PM
#52
qualcuno sta studiando eos?
Domani se riesco scrivo un altro entusiasmante esempio per smart contract  Shocked

Aspetto con ansia!  Grin
legendary
Activity: 3724
Merit: 1739
Join the world-leading crypto sportsbook NOW!
May 08, 2018, 04:44:20 AM
#51
Bello cryptozombies! Salvato nei preferiti
full member
Activity: 1064
Merit: 166
May 07, 2018, 11:10:28 AM
#50
qualcuno sta studiando eos?

No, hai qualche link per vedere un pò cosa offre rispetto ad ethereum? Domani se riesco scrivo un altro entusiasmante esempio per smart contract  Shocked
newbie
Activity: 69
Merit: 0
May 07, 2018, 05:01:14 AM
#49
qualcuno sta studiando eos?
newbie
Activity: 38
Merit: 0
May 05, 2018, 07:40:23 PM
#48
Ottimo thread per esempi, lascio qua una robetta che avevo proposto su meta e per la quale ho preso pesci in faccia  Undecided, è comunque un esempio completo, con tanto di interfaccia web.

Tutte le istruzioni e codice sono qui:
https://bitcointalksearch.org/topic/m.36022761


Complimenti Piggy!
full member
Activity: 1064
Merit: 166
May 04, 2018, 01:46:04 PM
#47
Ottimo thread per esempi, lascio qua una robetta che avevo proposto su meta e per la quale ho preso pesci in faccia  Undecided, è comunque un esempio completo, con tanto di interfaccia web.

Tutte le istruzioni e codice sono qui:
https://bitcointalksearch.org/topic/m.36022761


hero member
Activity: 784
Merit: 1416
May 04, 2018, 05:46:37 AM
#46
Ottimo thread per esempi, lascio qua una robetta che avevo proposto su meta e per la quale ho preso pesci in faccia  Undecided, è comunque un esempio completo, con tanto di interfaccia web.

Tutte le istruzioni e codice sono qui:
https://bitcointalksearch.org/topic/m.36022761
full member
Activity: 1064
Merit: 166
May 01, 2018, 07:31:29 AM
#45
Qualcuno ha già' provato Ganache? Permette di creare una chain Ethereum personale dove testare tutto quello che serve. In più' ha anche il block explorer.

http://truffleframework.com/ganache/

Ne ho sentito parlare bene ma per il momento faccio ancora tutto da remix, non sono ancora arrivato al punto di avere un interfaccia "seria". Ho notato che su cryptozombie c'è anche una parte per l'UI, magari comincio a vedere da li.

Aggiunti i nuovi link che hai pubblicato
newbie
Activity: 38
Merit: 0
April 29, 2018, 08:37:33 PM
#44
ma scusate ...uno scambio di gattini mi sembra limitato ...potrebbe associarsi al token un auto ..una targa..o un bene infungibile giusto?



Lol. CryptoKitties e' il progetto più geniale di sempre. Sai quanti milioni sono stati spesi dagli utenti per comprare sti cazzo di crypto gatti?

https://www.cnbc.com/2017/12/06/meet-cryptokitties-the-new-digital-beanie-babies-selling-for-100k.html

Oltretutto se guardi sui vari profili c'e' gente che ha oltre centinaia di k $ di cryptogatti... il che fa riflettere. Alla fine sono solo token ERC721 generati da uno smartcontract che in base ad alcuni valori creano un' IMMAGINE di un gatto di colore diverso.

Considerando che il cryptogatto più caro e' stato venduto per centomila dollari...
newbie
Activity: 38
Merit: 0
April 28, 2018, 07:34:21 PM
#43
Qualcuno ha già' provato Ganache? Permette di creare una chain Ethereum personale dove testare tutto quello che serve. In più' ha anche il block explorer.

http://truffleframework.com/ganache/
newbie
Activity: 69
Merit: 0
April 28, 2018, 05:23:40 PM
#42
WOO ECCELLENTE QUI COME HO CAPITO SI STRUTTURA PROPRIO UN NUOVA CHAIN INTERESSANTE
newbie
Activity: 38
Merit: 0
April 28, 2018, 12:16:26 PM
#41

Considera che in questo caso, partendo dai dati della transazione(input data qui ad esempio) è possibile risalire al contenuto della variabile pass, quindi la seguente operazione non è sicura:

Code:
   
function setPass(string pass) {
        uint pass_cryptata = uint(keccak256(pass));
...
}

Ah ok questo non lo sapevo. Quindi in tal caso di dovrebbe criptare il contenuto prima offchain, inviare il contenuto già' criptato, e conservare la chiave offchain.


in pratica c'è questo per fare quello che vuoi https://ipfs.io/, però devi avere un server dove farlo girare è un altra cosa che ho nella lista "da guardare"  Smiley



In tal caso comunque la chiave pubblica la dovrei conservare io?
Comunque tirare su il server IPFS ci metti un secondo, la problematica sta più su come effettivamente utilizzarlo con Blockchain.


Super interessante. Praticamente lo si può' usare come storage decentralizzato? Cioè' invio un contenuto hashato, ok, ma per riprenderlo mi basta avere questo hash? Quindi teoricamente chiunque disponga di questo hash può' vederne il contenuto? Dovrei quindi rinviare il contenuto criptato dal quale ipfs genera un hash per ovviare a questo problema?

Qua' c'e' un tutorial non male
https://medium.com/@mycoralhealth/learn-to-securely-share-files-on-the-blockchain-with-ipfs-219ee47df54c


Certo che Blockchain + IPFS e' qualcosa di veramente potente.
Pages:
Jump to: