Bitcoin Forum
November 06, 2024, 02:50:05 PM *
News: Latest Bitcoin Core release: 28.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1] 2 3 4 5  All
  Print  
Author Topic: [Programmazione] Smart Contracts  (Read 20981 times)
Makkara (OP)
Full Member
***
Offline Offline

Activity: 1064
Merit: 166



View Profile
March 25, 2018, 12:53:02 PM
Last edit: May 01, 2018, 11:31:54 AM by Makkara
Merited by redsn0w (5), alexrossi (2), Micio (2), Piggy (2), Speculatoross (2)
 #1

Buongiorno,

è da un pò che mi sto documentando e provando a fare esperimenti con gli smart contract. Non ho nessun fine particolare solo curiosità per il momento, visto che il tempo che ho a disposizione non è nemmeno poi tanto.  

Mi domandavo se qualcun'altro qui ha già scritto qualche smart contract, oppure vuole condividere qualcosa che ha fatto o rispondere a domande/chiedere aiuto.

Alcuni link utili per cominciare:

Tools:

- http://remix.ethereum.org/
- https://metamask.io/
- http://truffleframework.com/ganache/


Guide:

- https://medium.com/@mvmurthy/ethereum-for-web-developers-890be23d1d0c
- https://cryptozombies.io/
- http://www.cryptominando.it/2018/04/17/creare-uno-smart-contract-solidity/
- https://medium.com/@mycoralhealth/learn-to-securely-share-files-on-the-blockchain-with-ipfs-219ee47df54c - IPFS

Documentazione:

- http://solidity.readthedocs.io






Condivido qualcosa che non credo sia ovvia (almeno non per me )

Stavo cercando di creare uno smart contract per salvare un numero indeterminato di bytes nel modo piu efficente possibile in quanto i costi possono essere esorbitanti come sappiamo tutti. Dopo vari tentativi non andati a buon fine ho trovato che l'EVM utilizza come dimensione nativa word a 256bit -> 32byte, questo significa che anche se provi a salvare meno di 32byte ti ritrovi sempre a passare minimo 32byte (sticazzi!  Grin)

Ho verificato la cosa con questo smart contract usando http://remix.ethereum.org e Metamask

Code:
pragma solidity ^0.4.19;

contract SimpleStorage {
  bytes input;
  function setInput(bytes enterBytes){
    input = enterBytes;
  }
}

Provando a passare a setInput 1 byte
Code:
["0x00"]
o 32 byte
Code:
["0x00","0xaa","0xff","0xaa","0xaa","0xaa","0xaa","0xaa",
"0x00","0xaa","0xff","0xaa","0xaa","0xaa","0xaa","0xaa",
"0x00","0xaa","0xff","0xaa","0xaa","0xaa","0xaa","0xaa",
"0x00","0xaa","0xff","0xaa","0xaa","0xaa","0xaa","0xaa"]

Metamask avvisa che la dimensione non varia: Data included: 100 bytes

Infine passando 33 byte
Code:
["0x00","0xaa","0xff","0xaa","0xaa","0xaa","0xaa","0xaa",
"0x00","0xaa","0xff","0xaa","0xaa","0xaa","0xaa","0xaa",
"0x00","0xaa","0xff","0xaa","0xaa","0xaa","0xaa","0xaa",
"0x00","0xaa","0xff","0xaa","0xaa","0xaa","0xaa","0xaa","0xaa"]

Ottengo Data included: 132 bytes Shocked

 

 

Pi Network - mining app for phone: https://minepi.com/spippolino
Blockfolio trading: https://blockfolio.com/trading?r=MvFRE7EX98
alexrossi
Legendary
*
Offline Offline

Activity: 3892
Merit: 1745


Join the world-leading crypto sportsbook NOW!


View Profile
March 27, 2018, 06:41:36 AM
 #2

L'unica cosa che mi viene in mente è fare uno sha256 della stringa di testo che vuoi salvare, anche se hai un risultato molto diverso dall'archiviarla

  ▄▄███████▄███████▄▄▄
 █████████████
▀▀▀▀▀▀████▄▄
███████████████
       ▀▀███▄
███████████████
          ▀███
 █████████████
             ███
███████████▀▀               ███
███                         ███
███                         ███
 ███                       ███
  ███▄                   ▄███
   ▀███▄▄             ▄▄███▀
     ▀▀████▄▄▄▄▄▄▄▄▄████▀▀
         ▀▀▀███████▀▀▀
░░░████▄▄▄▄
░▄▄░
▄▄███████▄▀█████▄▄
██▄████▌▐█▌█████▄██
████▀▄▄▄▌███░▄▄▄▀████
██████▄▄▄█▄▄▄██████
█░███████░▐█▌░███████░█
▀▀██▀░██░▐█▌░██░▀██▀▀
▄▄▄░█▀░█░██░▐█▌░██░█░▀█░▄▄▄
██▀░░░░▀██░▐█▌░██▀░░░░▀██
▀██
█████▄███▀▀██▀▀███▄███████▀
▀███████████████████████▀
▀▀▀▀███████████▀▀▀▀
█████████████LEADING CRYPTO SPORTSBOOK & CASINO█████████████
MULTI
CURRENCY
1500+
CASINO GAMES
CRYPTO EXCLUSIVE
CLUBHOUSE
FAST & SECURE
PAYMENTS
.
..PLAY NOW!..
Makkara (OP)
Full Member
***
Offline Offline

Activity: 1064
Merit: 166



View Profile
March 27, 2018, 09:47:26 AM
 #3

L'unica cosa che mi viene in mente è fare uno sha256 della stringa di testo che vuoi salvare, anche se hai un risultato molto diverso dall'archiviarla

si, la soluzione consigliata quando devi archiviare dati ingombranti, vedo che è fare quello più usare un IPFS.

Pi Network - mining app for phone: https://minepi.com/spippolino
Blockfolio trading: https://blockfolio.com/trading?r=MvFRE7EX98
lorecoincoin
Newbie
*
Offline Offline

Activity: 69
Merit: 0


View Profile
April 13, 2018, 05:40:38 PM
 #4

anche io sto studiando come utilizzare gli smart contract
mi piacerebbe interfacciarmi con voi
picchio
Legendary
*
Offline Offline

Activity: 2506
Merit: 1120



View Profile
April 13, 2018, 10:12:00 PM
 #5

anche io sto studiando come utilizzare gli smart contract
mi piacerebbe interfacciarmi con voi
Io ho trovato questi due articoli che aiutano ad iniziare, non so a che punto siate ma credo che un punto di partenza possa essere interessante:
- https://medium.com/@mvmurthy/ethereum-for-web-developers-890be23d1d0c
- https://cryptozombies.io/
Happy hack

Waves mi piaceva ora non più.
Makkara (OP)
Full Member
***
Offline Offline

Activity: 1064
Merit: 166



View Profile
April 16, 2018, 09:22:56 AM
 #6

ottimo se qualcuno ad un certo punto vuole postare qualche smart contract che ha fatto con una piccola spiegazione o domande su come fare qualcosa può essere interessante per tutti.

consiglio anche di consultare la documentazione http://solidity.readthedocs.io


Pi Network - mining app for phone: https://minepi.com/spippolino
Blockfolio trading: https://blockfolio.com/trading?r=MvFRE7EX98
picchio
Legendary
*
Offline Offline

Activity: 2506
Merit: 1120



View Profile
April 16, 2018, 10:29:50 AM
 #7

ottimo se qualcuno ad un certo punto vuole postare qualche smart contract che ha fatto con una piccola spiegazione o domande su come fare qualcosa può essere interessante per tutti.

consiglio anche di consultare la documentazione http://solidity.readthedocs.io


Potresti riassumere i link in OP in modo che possa diventare utile a chi legge il 3d.

Waves mi piaceva ora non più.
lorecoincoin
Newbie
*
Offline Offline

Activity: 69
Merit: 0


View Profile
April 16, 2018, 10:33:07 AM
 #8

quanti di voi hanno esperienza di programmazione ad oggetti c++etc . inoltre terrei d'occhio eos che pare sia più semplice di eth .
Makkara (OP)
Full Member
***
Offline Offline

Activity: 1064
Merit: 166



View Profile
April 17, 2018, 10:37:01 AM
 #9

quanti di voi hanno esperienza di programmazione ad oggetti c++etc . inoltre terrei d'occhio eos che pare sia più semplice di eth .


io faccio il programmatore come lavoro, ovviamente aiuta, ma da quello che vedo l'ottica in cui devi entrare quando scrivi uno smart contract è leggermente diversa.

Può essere che nel futuro comparirà qualcos'altro meglio di ethereum a livello di SC, siamo solo all'inizio.  Cool


ottimo se qualcuno ad un certo punto vuole postare qualche smart contract che ha fatto con una piccola spiegazione o domande su come fare qualcosa può essere interessante per tutti.

consiglio anche di consultare la documentazione http://solidity.readthedocs.io


Potresti riassumere i link in OP in modo che possa diventare utile a chi legge il 3d.

aggiunti

Pi Network - mining app for phone: https://minepi.com/spippolino
Blockfolio trading: https://blockfolio.com/trading?r=MvFRE7EX98
Makkara (OP)
Full Member
***
Offline Offline

Activity: 1064
Merit: 166



View Profile
April 18, 2018, 06:20:11 AM
Last edit: April 18, 2018, 08:48:53 AM by Makkara
Merited by Piggy (4)
 #10

un'altra cosa interessante che ho scoperto/imparato:

Una volta creato un token, ad esempio con il codice standard che trovate qui: https://www.ethereum.org/token mi domandavo come fare in modo che chiunque possa interagire con lo smart contract direttamente ed ottenerli.


Per fare qualcosa di simile ho usato questa funzione, ma in realtà servirebbero altri controlli che non ho inserito, per fare qualcosa di sicuro e non abusabile:

Code:
    // Notifica generazione x tokens all'indirizzo specificato
    event TokenGenerato(address indexed _address, uint _reward);

    function getFreeTokens(){
        uint amount = 100  * 10 ** uint256(decimals);
        
        if (balanceOf[msg.sender] >= amount) throw;
      
        totalSupply += amount;
        balanceOf[msg.sender] += amount;
        
        TokenGenerato(msg.sender, amount);
        
    }

La cosa interessante è che se nell'evento TokenGenerato si inserisce un valore diverso da quello effettivo, ad esempio:

Code:
TokenGenerato(msg.sender, 1000  * 10 ** uint256(decimals));        

Il destinatario può pensare di aver ricevuto 1000 token (la transazione sui trasferimenti dei token mostra 1000 token in ingresso), ma ovviamente andando a controllare il saldo effettivo vedrebbe che ne ha solo 100.

Se non chiamiamo l'evento TokenGenerato, il destinatario ha si 100 token, ma non comprariranno nel saldo token.

Tutto questo giro di parole per far capire che gli eventi sono importanti e indispensabili per avere informazioni aggiornate  Wink
Maggiorni informazioni sugli eventi qui: http://solidity.readthedocs.io/en/v0.4.21/contracts.html#events

Potete verificare quanto sopra controllando i risultati delle transazioni e saldi su https://etherscan.io/



Pi Network - mining app for phone: https://minepi.com/spippolino
Blockfolio trading: https://blockfolio.com/trading?r=MvFRE7EX98
Pinty87
Newbie
*
Offline Offline

Activity: 38
Merit: 0


View Profile
April 18, 2018, 05:04:25 PM
 #11

Bravo Makkara finalmente qualcuno un po' preparato!

Non mi e' ancora chiaro cosa si intende per eventi che generano una notifica...

Volevo chiederti ancora, quando si crea uno smart contract si può' verificare... Ad esempio su myEtherScan se clicchi su Verify and Publish viene verificato. Ma in che senso? Anche questo passaggio non mi e' del tutto chiaro.

Grazie Makkara!
Makkara (OP)
Full Member
***
Offline Offline

Activity: 1064
Merit: 166



View Profile
April 19, 2018, 07:36:03 AM
 #12

Bravo Makkara finalmente qualcuno un po' preparato!

Non mi e' ancora chiaro cosa si intende per eventi che generano una notifica...

Volevo chiederti ancora, quando si crea uno smart contract si può' verificare... Ad esempio su myEtherScan se clicchi su Verify and Publish viene verificato. Ma in che senso? Anche questo passaggio non mi e' del tutto chiaro.

Grazie Makkara!

In parole povere quando qualcosa cambia in uno smart contract, che può essere il saldo dei token ma anche altro, se necessario deve essere generato un Evento, questo ha lo scoppo di avvertire gli indirizzi/parti interessate da questo cambiamento e agire di conseguenza. Gli eventi vengono salvati sulla blockchain.

La verifica consiste nel controllare se dato un codice sorgente questo corrisponde allo smart contract pubblicato/compilato ad un certo indirizzo. Compilano il sorgente e confrontano il Bytecode generato.

Pi Network - mining app for phone: https://minepi.com/spippolino
Blockfolio trading: https://blockfolio.com/trading?r=MvFRE7EX98
picchio
Legendary
*
Offline Offline

Activity: 2506
Merit: 1120



View Profile
April 19, 2018, 02:01:09 PM
 #13

Ci provo ... domanda specifica ...
Come si possono fare interagire due smart contract o come è possibile modificare una procedura di uno smart contract già pubblicato (se possibile).

Waves mi piaceva ora non più.
Makkara (OP)
Full Member
***
Offline Offline

Activity: 1064
Merit: 166



View Profile
April 19, 2018, 05:30:22 PM
Last edit: April 22, 2018, 11:21:22 AM by Makkara
 #14

Ci provo ... domanda specifica ...
Come si possono fare interagire due smart contract o come è possibile modificare una procedura di uno smart contract già pubblicato (se possibile).

Puoi usare un pattern del genere

Crei il contratto che esegue le operazioni e contiene i dati
Code:
pragma solidity ^0.4.9;

contract Figlio {
    uint risultato;

    function Figlio(uint valore_iniziale) public {
        risultato = valore_iniziale;
    }
    function setRisultato(uint value) {
        risultato = value;
    }
    function getRisultato() constant returns (uint) {
        return risultato;
    }
}

e poi crei il contratto "Ufficiale" che verrà usato, qui devi definire l'interfaccia del contratto che hai intenzione di usare (Figlio), poi per usarlo crei una nuova istanza e chiami i metodi definiti nell'interfaccia.

Se poi vuoi cambiare la logica ma per motivi di logistica non vuoi cambiare il contratto "Ufficiale" a cui tutti si stanno gia interfacciando, puoi semplicemente cambiare l'indirizzo del figlio.
Code:
pragma solidity ^0.4.9;

contract Figlio {
    function setRisultato(uint value);
    function getRisultato() constant returns(uint);
}

contract Padre {
    address indirizzo_figlio;
    Figlio figlio;
    function Padre(address new_figliolo) public {
        indirizzo_figlio = new_figliolo;
        figlio = Figlio(indirizzo_figlio);
    }
    function setNuovoFiglio(address new_figliolo) {
        indirizzo_figlio = new_figliolo;
        figlio = Figlio(indirizzo_figlio);
    }
    function setRisultato(uint value) {
        return figlio.setRisultato(value);
    }
    function getRisultato()  constant returns(uint) {
        return figlio.getRisultato();
    }
        
}


Comunque esistono diversi pattern che permettono di cambiare il comportamento degli smart contract, se trovo qualche link esaustivo sull'argomento lo posto in seguito.

Pi Network - mining app for phone: https://minepi.com/spippolino
Blockfolio trading: https://blockfolio.com/trading?r=MvFRE7EX98
Pinty87
Newbie
*
Offline Offline

Activity: 38
Merit: 0


View Profile
April 21, 2018, 01:49:03 PM
 #15

Comunque https://cryptozombies.io/ e' fatto davvero bene e' spiega con cura anche la questione della creazione di interfacce per far comunicare due smart contract.

Grazie Makkara per le tue spiegazioni.

Sto cercando di far comunicare uno smart contract con delle API esterne usando oraclize in questo caso. Ipotizza un contratto che risponde qualcosa solo a determinati indirizzi. Ovviamente la lista degli indirizzi chiamiamoli "whitelisted" li prenderebbe da queste API. Come imposteresti la cosa?

Altra cosa che mi chiedevo, ovviamente in questo caso la chiamata al contratto e la chiamata oraclize dovrebbe pagarla chi effettivamente chiama il contratto giusto? Come fa a capire effettivamente quanti eth servono?

Oppure e' necessario creare un indirizzo dove il contratto attinge? Sta cosa ancora non mi e' del tutto chiara.

Grazie!!
Makkara (OP)
Full Member
***
Offline Offline

Activity: 1064
Merit: 166



View Profile
April 22, 2018, 06:20:58 AM
 #16

Se ho capito bene qualcosa del genere:

Per la lista assumo che sia così:
Code:
mapping (address => bool) whiteList;

La funzione dove controlli se il chiamante è nella lista:
Code:
   function doSomething() {
        // recupera la lista whiteList dall altro smart contract
        
        if (whiteList[msg.sender] == false) throw;

        // fai qualcosa
    }

Se la funzione che chiami internamente al tuo contratto non apporta modifiche non dovrebbe costare niente chiamarla, comunque in generale il chiamante paga tutto il gas per le operazioni che vengono eseguite.

Per verificare il costo da javascript, quindi nella tua applicazione, c'è questo, in pratica simula l'esecuzione e ti dice quanto gas serve, comunque non ho ancora sperimentato:

https://github.com/ethereum/wiki/wiki/JavaScript-API#web3ethestimategas

Pi Network - mining app for phone: https://minepi.com/spippolino
Blockfolio trading: https://blockfolio.com/trading?r=MvFRE7EX98
lorecoincoin
Newbie
*
Offline Offline

Activity: 69
Merit: 0


View Profile
April 22, 2018, 08:35:24 AM
 #17

io ho capito come registrare un o smart contract su rete eth sia su testnet ...sto cercando prima di capire come fare relazionare il contratto ma vedo che voi a sviluppo siete avantissimo rispetto a me ...vogliamo creare un gruppo di sviluppo?
CryptoHelvetia
Jr. Member
*
Offline Offline

Activity: 58
Merit: 1


View Profile
April 22, 2018, 01:28:54 PM
 #18

quanti di voi hanno esperienza di programmazione ad oggetti c++etc . inoltre terrei d'occhio eos che pare sia più semplice di eth .


io faccio il programmatore come lavoro, ovviamente aiuta, ma da quello che vedo l'ottica in cui devi entrare quando scrivi uno smart contract è leggermente diversa.

Può essere che nel futuro comparirà qualcos'altro meglio di ethereum a livello di SC, siamo solo all'inizio.  Cool


ottimo se qualcuno ad un certo punto vuole postare qualche smart contract che ha fatto con una piccola spiegazione o domande su come fare qualcosa può essere interessante per tutti.

consiglio anche di consultare la documentazione http://solidity.readthedocs.io


Potresti riassumere i link in OP in modo che possa diventare utile a chi legge il 3d.

aggiunti
Ho appena letto questo articolo http://www.cryptominando.it/2018/04/17/creare-uno-smart-contract-solidity/ che mi sembra essere buono a livello di contenuti per neofiti, cioè "for dummies", come programmatore che ne pensi?
Pinty87
Newbie
*
Offline Offline

Activity: 38
Merit: 0


View Profile
April 22, 2018, 02:35:18 PM
 #19

Se ho capito bene qualcosa del genere:

Per la lista assumo che sia così:
Code:
mapping (address => bool) whiteList;

La funzione dove controlli se il chiamante è nella lista:
Code:
   function doSomething() {
        // recupera la lista whiteList dall altro smart contract
        
        if (whiteList[msg.sender] == false) throw;

        // fai qualcosa
    }

Se la funzione che chiami internamente al tuo contratto non apporta modifiche non dovrebbe costare niente chiamarla, comunque in generale il chiamante paga tutto il gas per le operazioni che vengono eseguite.

Per verificare il costo da javascript, quindi nella tua applicazione, c'è questo, in pratica simula l'esecuzione e ti dice quanto gas serve, comunque non ho ancora sperimentato:

https://github.com/ethereum/wiki/wiki/JavaScript-API#web3ethestimategas


Grazie Makkara, molto utile web3ethestimategas esattamente quello che cercavo.

Mi chiedevo cosa succede nel caso in cui si dovessero mandare al contratto meno o più' Ethereum del necessario... Grazie!
Makkara (OP)
Full Member
***
Offline Offline

Activity: 1064
Merit: 166



View Profile
April 23, 2018, 06:10:28 AM
 #20

io ho capito come registrare un o smart contract su rete eth sia su testnet ...sto cercando prima di capire come fare relazionare il contratto ma vedo che voi a sviluppo siete avantissimo rispetto a me ...vogliamo creare un gruppo di sviluppo?

se hai qualche idea esponila pure qui, entro i limiti di tempo conoscenze ti si può dare una mano 


Ho appena letto questo articolo http://www.cryptominando.it/2018/04/17/creare-uno-smart-contract-solidity/ che mi sembra essere buono a livello di contenuti per neofiti, cioè "for dummies", come programmatore che ne pensi?

si va bene come guida introduttiva per capire come muoversi, aggiungo alla lista dei link



Grazie Makkara, molto utile web3ethestimategas esattamente quello che cercavo.

Mi chiedevo cosa succede nel caso in cui si dovessero mandare al contratto meno o più' Ethereum del necessario... Grazie!

Questa è una questione che non mi è ancora ben chiara e mi dovrei informare, alcune volte ad esempio metamask mi avvisa subito che se imposto un valore del gas troppo alto la transazione fallirà (chiamando uno smart contract).

Comunque fai attenzione perchè a quanto pare in generale è possibile bruciare parecchi ETH in gas per errore, ci sono tanti casi come questo:
https://www.reddit.com/r/ethtrader/comments/7io2d3/someone_used_22_ether_10k_for_a_single_transaction/

Pi Network - mining app for phone: https://minepi.com/spippolino
Blockfolio trading: https://blockfolio.com/trading?r=MvFRE7EX98
Pages: [1] 2 3 4 5  All
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!