Makkara (OP)
|
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! ) Ho verificato la cosa con questo smart contract usando http://remix.ethereum.org e Metamask pragma solidity ^0.4.19;
contract SimpleStorage { bytes input; function setInput(bytes enterBytes){ input = enterBytes; } }
Provando a passare a setInput 1 byte o 32 byte ["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 bytesInfine passando 33 byte ["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
|
|
|
|
alexrossi
Legendary
Offline
Activity: 3892
Merit: 1745
Join the world-leading crypto sportsbook NOW!
|
|
March 27, 2018, 06:41:36 AM |
|
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
|
|
|
|
Makkara (OP)
|
|
March 27, 2018, 09:47:26 AM |
|
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.
|
|
|
|
lorecoincoin
Newbie
Offline
Activity: 69
Merit: 0
|
|
April 13, 2018, 05:40:38 PM |
|
anche io sto studiando come utilizzare gli smart contract mi piacerebbe interfacciarmi con voi
|
|
|
|
|
Makkara (OP)
|
|
April 16, 2018, 09:22:56 AM |
|
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
|
|
|
|
picchio
Legendary
Offline
Activity: 2506
Merit: 1120
|
|
April 16, 2018, 10:29:50 AM |
|
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.ioPotresti 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
Activity: 69
Merit: 0
|
|
April 16, 2018, 10:33:07 AM |
|
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)
|
|
April 17, 2018, 10:37:01 AM |
|
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. 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.ioPotresti riassumere i link in OP in modo che possa diventare utile a chi legge il 3d. aggiunti
|
|
|
|
Makkara (OP)
|
|
April 18, 2018, 06:20:11 AM Last edit: April 18, 2018, 08:48:53 AM by Makkara |
|
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: // 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: 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 Maggiorni informazioni sugli eventi qui: http://solidity.readthedocs.io/en/v0.4.21/contracts.html#eventsPotete verificare quanto sopra controllando i risultati delle transazioni e saldi su https://etherscan.io/
|
|
|
|
Pinty87
Newbie
Offline
Activity: 38
Merit: 0
|
|
April 18, 2018, 05:04:25 PM |
|
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)
|
|
April 19, 2018, 07:36:03 AM |
|
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.
|
|
|
|
picchio
Legendary
Offline
Activity: 2506
Merit: 1120
|
|
April 19, 2018, 02:01:09 PM |
|
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)
|
|
April 19, 2018, 05:30:22 PM Last edit: April 22, 2018, 11:21:22 AM by Makkara |
|
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 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. 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.
|
|
|
|
Pinty87
Newbie
Offline
Activity: 38
Merit: 0
|
|
April 21, 2018, 01:49:03 PM |
|
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)
|
|
April 22, 2018, 06:20:58 AM |
|
Se ho capito bene qualcosa del genere: Per la lista assumo che sia così: mapping (address => bool) whiteList;
La funzione dove controlli se il chiamante è nella lista: 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
|
|
|
|
lorecoincoin
Newbie
Offline
Activity: 69
Merit: 0
|
|
April 22, 2018, 08:35:24 AM |
|
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
Activity: 58
Merit: 1
|
|
April 22, 2018, 01:28:54 PM |
|
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. 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.ioPotresti 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
Activity: 38
Merit: 0
|
|
April 22, 2018, 02:35:18 PM |
|
Se ho capito bene qualcosa del genere: Per la lista assumo che sia così: mapping (address => bool) whiteList;
La funzione dove controlli se il chiamante è nella lista: 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#web3ethestimategasGrazie 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)
|
|
April 23, 2018, 06:10:28 AM |
|
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 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/
|
|
|
|
|