Pages:
Author

Topic: [Programmazione] Smart Contracts - page 5. (Read 20988 times)

full member
Activity: 1064
Merit: 166
April 23, 2018, 01: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/
newbie
Activity: 38
Merit: 0
April 22, 2018, 09:35:18 AM
#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!
jr. member
Activity: 58
Merit: 1
April 22, 2018, 08:28:54 AM
#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?
newbie
Activity: 69
Merit: 0
April 22, 2018, 03: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?
full member
Activity: 1064
Merit: 166
April 22, 2018, 01: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
newbie
Activity: 38
Merit: 0
April 21, 2018, 08:49:03 AM
#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!!
full member
Activity: 1064
Merit: 166
April 19, 2018, 12:30:22 PM
#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.
legendary
Activity: 2506
Merit: 1120
April 19, 2018, 09:01:09 AM
#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).
full member
Activity: 1064
Merit: 166
April 19, 2018, 02: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.
newbie
Activity: 38
Merit: 0
April 18, 2018, 12: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!
full member
Activity: 1064
Merit: 166
April 18, 2018, 01:20:11 AM
#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/


full member
Activity: 1064
Merit: 166
April 17, 2018, 05: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
newbie
Activity: 69
Merit: 0
April 16, 2018, 05: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 .
legendary
Activity: 2506
Merit: 1120
April 16, 2018, 05: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.
full member
Activity: 1064
Merit: 166
April 16, 2018, 04: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

legendary
Activity: 2506
Merit: 1120
April 13, 2018, 05: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
newbie
Activity: 69
Merit: 0
April 13, 2018, 12:40:38 PM
#4
anche io sto studiando come utilizzare gli smart contract
mi piacerebbe interfacciarmi con voi
full member
Activity: 1064
Merit: 166
March 27, 2018, 04: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.
legendary
Activity: 3766
Merit: 1742
Join the world-leading crypto sportsbook NOW!
March 27, 2018, 01: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
full member
Activity: 1064
Merit: 166
March 25, 2018, 07:53:02 AM
#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

 

 
Pages:
Jump to: